2017-03-16 2 views
1

J'utilise Keras (version 2.0.0) et j'aimerais utiliser des modèles pré-formés comme par ex. VGG16. Pour commencer, j'ai couru l'exemple du [site de documentation Keras] [https://keras.io/applications/] pour extraire des caractéristiques avec VGG16:Dois-je pré-traiter les données de test à l'aide de réseaux de neurones?

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) 

Le utilisé preprocess_input() fonction me dérange (la fonction ne zéro de centrage moyenne par pixel ce qui peut être vu en regardant le code source).

Dois-je vraiment pré-traiter les données d'entrée (données de validation/de test) avant d'utiliser un modèle entraîné? Si oui, on peut conclure qu'il faut toujours être conscient des étapes de pré-traitement qui ont été effectuées pendant la phase d'entraînement ?!

b) Si non: Le prétraitement des données de validation/d'essai entraîne-t-il un biais?

J'apprécie votre aide.

Répondre

0

Oui, vous devez utiliser l'étape de prétraitement. Vous pouvez recycler le modèle sans lui mais les premières couches apprendront à centrer vos données, c'est donc une perte de paramètres.

Si vous ne recentrez pas, vos performances en souffriront.

Très bien sur reddit: https://www.reddit.com/r/MachineLearning/comments/3q7pjc/why_is_removing_the_mean_pixel_value_from_each/

+0

Merci pour votre réponse. Pour plus de clarté, je dois utiliser la ou les étapes de prétraitement pour les données de validation/d'essai que j'ai utilisées pour l'entraînement (par exemple: réduction moyenne des données d'entraînement -> utiliser la même valeur moyenne pour la réduction moyenne de la validation/données de test?). Si le modèle pré-entraîné fonctionne sur des images avec des valeurs [0,255], alors j'ai aussi mes images à l'échelle, non? –

+0

Je ne suis pas sûr si vous m'avez bien compris. Je ne veux pas réapprendre le modèle. Je veux l'affiner. Signification: Les premières couches ne seront pas formables, seules les dernières peuvent être entraînées. Alors, qu'entendez-vous par "les premières couches vont apprendre à centrer vos données", puisque les premières couches sont de toute façon non-formables? –

+0

Oui. Si vous souhaitez utiliser un réseau existant, vous devez utiliser exactement le même prétraitement que celui utilisé lors de la formation. Sinon, les performances en souffriront probablement puisque la distribution de vos données différera alors de la distribution des données utilisées pour la formation. – sietschie