Neural network 我必须使用神经网络预处理测试数据吗?

Neural network 我必须使用神经网络预处理测试数据吗?,neural-network,keras,test-data,image-preprocessing,Neural Network,Keras,Test Data,Image Preprocessing,我使用的是Keras(版本2.0.0),我希望使用预训练的模型,例如VGG16。 为了开始,我运行了[Keras documentation site]的示例,用于使用VGG16提取特征: from keras.applications.vgg16 import VGG16 from keras.preprocessing import image from keras.applications.vgg16 import preprocess_input import numpy as np

我使用的是Keras(版本2.0.0),我希望使用预训练的模型,例如VGG16。 为了开始,我运行了[Keras documentation site]的示例,用于使用VGG16提取特征:

from keras.applications.vgg16 import VGG16
from keras.preprocessing import image
from keras.applications.vgg16 import preprocess_input
import numpy as np

model = VGG16(weights='imagenet', include_top=False)

img_path = 'elephant.jpg'
img = image.load_img(img_path, target_size=(224, 224))
x = image.img_to_array(img)
x = np.expand_dims(x, axis=0)
x = preprocess_input(x)

features = model.predict(x)
使用的
preprocess\u input()
函数困扰着我 (该函数通过查看源代码可以看到的像素平均值进行零居中)

在使用经过训练的模型之前,我真的需要预处理输入数据(验证/测试数据)吗

(a) 如果是的话,我们可以得出这样的结论:您必须始终了解在培训阶段执行了哪些预处理步骤

(b) 如果否:验证/测试数据的预处理是否会导致偏差


非常感谢您的帮助。

是的,您应该使用预处理步骤。您可以在不使用预处理步骤的情况下重新训练模型,但第一层将学习将数据居中,因此这是对参数的浪费

如果你不重新居中,你的表演就会受到影响


reddit上的优秀线程:

谢谢你的回答。为了清晰起见:我必须对验证/测试数据使用与训练数据相同的预处理步骤(例如:训练数据的平均缩减-->对验证/测试数据的平均缩减使用相同的平均值?)。如果预训练模型在具有值的图像上执行[0255],然后我也要将我的图像缩放到这个范围,对吗?我不确定你是否正确。我不想重新训练模型。我想对它进行微调。意思是:第一层是不可训练的,只有最后一层是可训练的。那么,“第一层将学习以数据为中心”是什么意思,因为第一层无论如何都是不可培训的?是的。如果要使用现有网络,则应使用与培训过程中使用的完全相同的预处理。否则,性能可能会受到影响,因为您的数据分布将不同于用于培训的数据分布。