我使用自己的自定义数据集训练了一个 CNN,其中调整数据集图像的大小是使用 PIL 库完成的。现在,当我尝试预测数据集中输入图像的标签时,它可以正常工作。我在 CNN 类中的预测函数如下:
def predict(self, X):
X = np.asarray(X, dtype=np.float32)
if self.pred is None:
try:
self.pred = theano.function([self.input_var], T.argmax(self.get_output(network=self.network, deterministic=True), axis=1))
except:
print("failed")
else:
pass
dim = X.ndim
if dim == 3:
X = X[newaxis,:,:,:]
elif dim == 2:
X = X[newaxis, newaxis, :, :]
else:
pass
try:
predicted_label = self.pred(X)
return int(predicted_label)
except:
print("failed")
像这样从 main 调用:
[bilder, label, names] = read_images1(dataset_path, sz=im_size, na=False)
bilder = np.asarray(bilder, dtype=np.float32)
print("The shape of bilder is; number of images: {}, height: {}, width: {}".format(bilder.shape[0], bilder.shape[1], bilder.shape[2]))
pred = model.predict(bilder[0])
print("Predicted label for image is: {}".format(pred))
bilder1 = bilder[0]
#bilder1 = cv2.resize(bilder1, (58, 58), interpolation=cv2.INTER_CUBIC)
pred1 = model.predict(bilder[400])
print("Predicted label for image is: {}".format(pred1))
bilder 几乎是一个具有形状(图像、高度、宽度)的数组,如果我运行代码,输出如下:
The shape of bilder is; number of images: 442, height: 58, width: 58
Predicted label for image is: 3
Predicted label for image is: 39
Process finished with exit code 0
请注意:
#bilder1 = cv2.resize(bilder1, (58, 58), interpolation=cv2.INTER_CUBIC)
已注释且未使用。现在,如果我在其中发表评论,则会得到以下输出:
The shape of bilder is; number of images: 442, height: 58, width: 58
Predicted label for image is: 3
这意味着它会卡在这部分,直到我自己停止代码:
try:
predicted_label = self.pred(X)
return int(predicted_label
这个我完全不明白。存储在 bilder1 中的图像甚至没有用于预测,因为它只是存储在 bilder1 中,然后当我继续尝试预测 bilder 中的图像 nr 400 时,它会卡住.. 这只是我尝试实时进行的测试通过网络摄像头进行识别,在调整人脸图像大小后会出现同样的问题。
编辑:问题似乎与使用 cv2 库对图像所做的任何更改一致。这些图像是否用于神经网络似乎并不重要。