<p>我也有类似的问题,在运行了下面的小实验之后,我认为您需要在使用预先训练的模型时始终使用<code>preprocess_input</code>,并在从头开始训练时使用rescale。在</p>
<p>显然,当您直接使用预先训练的模型进行推理时,您必须使用<code>preprocess_input</code>:例如,我试图在kaggle dogs vs cats</strong>数据集上使用<code>resnet50</code>,使用<code>rescale=1./255</code>它返回索引111<code>(nematode, nematode worm, roundworm)</code>,作为所有图像最可能的类,而使用<code>preprocess_input</code>它主要返回与狗和猫如所料。在</p>
<p>然后我尝试使用<code>resnet50</code>和<code>include_top=False</code>、来自imagenet的冻结权重、一个<code>GlobalAveragePooling2D</code>层和最后一个密集的sigmoid层。我和亚当一起训练了2000张kaggle狗对猫的图片(我用1000张图片作为验证)。使用rescale它在5个时期后都无法适应任何情况,它总是预测第一个类(虽然奇怪的是训练精度<strong>97%</strong>,但是当我运行<code>evaluate_generator`` on the training images, the accuracy is **50%**). But with</code>preprocess_input<code>, it achieves **98%** accuracy on the validation set. Also note that you do not really need the images to be of the same dimensions as the trained models, for example if I use 150 instead of 224, I still get a **97.5%** accuracy. Without any rescaling or</code>preprocess_input`,我得到了一个<strong>95%</strong>的验证准确率。在</p>
<p>我用<code>vgg16</code>做了同样的尝试,重新调整了它的大小,但是使用<code>preprocess_input</code>对<strong>87%</strong>对<strong>97%</strong>,没有任何东西,<strong>95%</strong>。在</p>
<p>然后我从零开始训练了一个10个时期的小型conv网络,没有任何东西或者使用<code>resnet50</code><code>preprocess_input</code>,它根本不适合,但是通过重新缩放,我获得了<strong>70%</strong>验证准确率。在</p>