我有一个我训练,评估甚至测试过的Keras模型。现在,我试图在模型中使用三个测试图像。
我通过预处理器运行图像,该预处理器与我用来制作训练数据的相同。然后,我对测试数据的单个图像执行完全相同的操作。但这给我一个
的错误检查模型输入时出错:传递给模型的Numpy数组列表不是模型期望的大小。预计会看到1个数组,但获得了以下2个数组的列表:
我不知道这是怎么回事。
这就是我成功测试模型的方式。
y_pred = []
y_true = []
for i in range(0, len(test_x1)):
x1 = test_x1[i]
x2 = test_x2[i]
x1 = np.expand_dims(x1, axis=0)
x2 = np.expand_dims(x2, axis=0)
y_true.append(np.argmax(test_y[i]))
pred = model.predict([x1, x2])
y_pred.append(make_binary(pred))
这是我用于两个图像的预处理方法
def create_features(file, image_dir, base_model):
img_path = os.path.join(image_dir, file)
img = image.load_img(img_path, target_size=(224, 224))
img = image.img_to_array(img)
x = resnet50.preprocess_input(img)
x = np.array([x])
feature = base_model.predict(x)
return feature
这就是我处理新图像的方式:
IMAGE_DIR = 'Data'
img1 = 'test1.jpg'
img2 = 'test2.jpg'
img3 = 'test3.jpg'
img1_feat = create_features(img1, IMAGE_DIR, model)
img2_feat = create_features(img2, IMAGE_DIR, model)
img3_feat = create_features(img3, IMAGE_DIR, model)
现在,当我查看这两个功能时,它们是相同的。
x1 = test_x1[0]
x1 = np.expand_dims(x1, axis=0)
print(x1.shape)
print(type(x1))
print(img1_feat.shape)
print(type(img1_feat))
(1, 1, 1000)
<class 'numpy.ndarray'>
(1, 1, 1000)
<class 'numpy.ndarray'>
然后我尝试从中做出预测
pred1 = model.predict([img1_feat, img2_feat])
但这会导致错误。
答案 0 :(得分:0)
由于@Matias Valdenegro和@Mukul,我发现了问题所在 我是在Ipython笔记本上执行此操作的,经过几个时期后,我发现该模型有时会被另一个类中导入的resent模型所覆盖。 感谢大家的帮助。我没有考虑使用model.summary(),因为我没有真正认为它已经改变。