2016-10-18 5 views
0

Во время перекрестной проверки данных обучения использование batchnorm значительно повышает производительность. Но (после переподготовки на весь набор тренировок) наличие слоя батнорма полностью разрушает обобщение модели до набора прочности. Это немного удивительно, и мне интересно, неправильно ли я выполняю предсказания теста.keras batchnorm имеет ужасные результаты теста

Обобщение без присутствующего слоя батнормора (недостаточно для целей моего проекта, но разумно для такой простой сети).

Я не могу поделиться своими данными, но кто-нибудь видит очевидную ошибку реализации? Есть ли флаг, который должен быть установлен в тестовый режим? Я не могу найти ответ в документах, и выпад (который также должен иметь разные поведенческие/тестовые действия) работает так, как ожидалось. Благодаря!

код:

from keras.callbacks import EarlyStopping 
early_stopping = EarlyStopping(monitor='val_loss', patience=10) 
from keras.callbacks import ModelCheckpoint 
filepath="L1_batch1_weights.best.hdf5" 
checkpoint = ModelCheckpoint(filepath, monitor='val_loss', verbose=1, save_best_only=True, mode='auto') 

init = 'he_normal' 

act = 'relu' 

neurons1 = 80 

dropout_rate = 0.5 

model = Sequential() 
model.add(Dropout(0.2, input_shape=(5000,))) 
model.add(Dense(neurons1)) 
model.add(BatchNormalization()) 
model.add(Activation(act)) 
model.add(Dropout(dropout_rate)) 
model.add(Dense(1, activation='sigmoid')) 

model.compile(loss='binary_crossentropy', optimizer="adam", metrics=["accuracy"]) 


my_model = model.fit(X_train, y_train, batch_size=128, nb_epoch=150, validation_data =(X_test, y_test),callbacks=[early_stopping, checkpoint]) 

model.load_weights("L1_batch1_weights.best.hdf5") 

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy']) 
print("Created model and loaded weights from file") 

probs = model.predict_proba(X_test,batch_size=2925) 
fpr, tpr, thresholds = roc_curve(y_test, probs) 
+0

Если вы читаете тег для пакетного файла, который вы увидите, что это о копировании файлов и т.д. в Windows. –

+0

@Noodles, как ваш комментарий связан с вопросом? –

+0

Я отредактировал ваш вопрос и удалил тег пакетного файла. Это язык сценария оболочки WINDOWS. Ничего общего с нейронными сетями. –

ответ

1

Из docs: «В процессе обучения мы используем за партию статистики для нормализации данных, а также во время тестирования мы используем средние работы, вычисленные на этапе обучения»

В моем случае размер учебной партии составлял 128. Во время тестирования я вручную установил размер партии в размере полного тестового набора (2925).

Имеет смысл, что статистика, используемая для одного размера партии, очевидно, не будет иметь отношения к размеру партии, который существенно отличается.

Изменение размера тестовой партии до размера партии поезда (128) дает более стабильные результаты. Я играл с размерами предсказания для наблюдения за эффектами: результаты прогнозирования были стабильными для любого размера партии +/- 3x от размера партии обучения, после чего производительность ухудшилась.

Существует некоторая дискуссия о влиянии испытания размера партии наряду с использованием batchnorm при использовании load_weights() здесь: https://github.com/fchollet/keras/issues/3423

 Смежные вопросы

  • Нет связанных вопросов^_^