我用Keras训练了一个模型(二进制图像分类,再训练的Xception模型)。现在,如果我喂它
model.predict(np.random.rand(1, 300, 300, 3))
我得到输出
array([[0.68225867, 0.3177413 ]], dtype=float32)
这就是我要获得的真实图像。但是,当我这样输入真实图像时:
from scipy.misc import imread,imresize
x=imread('processed_dataset/test/EM/bull_212.jpg',mode='RGB')
x=imresize(x,(300,300))
x=np.invert(x)
x=x.reshape(-1,300,300,3)
model.predict(x)
我总是得到相同的输出:
array([[1., 0.]], dtype=float32)
无论输入图像如何,模型都会输出[1.,0]。如果以这种方式输入图像,则是相同的:
img = image.load_img('processed_dataset/test/EM/bull_212.jpg', target_size=(img_width, img_height))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
images = np.vstack([x])
model.predict(images, batch_size=1)
我的想法是:如果输入np.random'图像'可以得到预期的结果,那么问题就出在我如何输入真实图像上。 如何正确执行此操作以使其达到预期效果?
答案 0 :(得分:1)
似乎您没有应用用于训练模型的归一化,如果您不这样做,那么输入将完全不同,这将使神经元饱和,产生不一致的输出。