私はトレーニングに関して高い分類をしていますが、同じデータセットを使用していますが、この問題は、バッチ正規化を使用している場合にのみ発生します。正しく実装していますか?Keras:バッチ正規化を使用して同じデータセットでトレーニングと検証の結果が異なる
バッチの正規化を使用してコード:
train_datagen = ImageDataGenerator(rescale=1./255)
train_generator = train_datagen.flow_from_directory(
directory = '../ImageFilter/Images/',
target_size=(img_rows, img_cols),
batch_size=batch_size,
class_mode='categorical',
shuffle=True)
model = Sequential()
model.add(Convolution2D(16,
kernel_size=(3, 3),
strides=(2,2),
activation='relu',
input_shape=(img_rows, img_cols, 3)))
model.add(BatchNormalization())
model.add(MaxPooling2D((2,2), strides=(2,2)))
model.add(Flatten())
model.add(Dense(128, activation='relu'))
model.add(Dense(2, activation='softmax'))
model.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics = ['accuracy'])
epochs = 100
patience = 6
n_images = 91
file_path = 'imageFilterCNN.hdf5'
checkpointer = ModelCheckpoint(file_path, monitor='val_acc', verbose=0, save_best_only=True)
earlystop = EarlyStopping(monitor='val_acc', patience=patience, verbose=0, mode='auto')
tboard = TensorBoard('./logs')
model.fit_generator(
train_generator,
steps_per_epoch=n_images// batch_size,
epochs=epochs,
callbacks=[checkpointer, earlystop, tboard],
validation_data=train_generator,
validation_steps=n_images// batch_size)
出力: エポック15/100 11/11 [===================== =========] - 2S - 損失:0.0092 - ACC:1.0000 - val_loss:3.0321 - val_acc:あなたが最初の(入力)にバッチの正規化を適用している0.5568
これらの結果については何が奇妙ですか?トレーニングの精度は常にテストよりも優れています。あなたは一般化が簡単であると思う何らかの理由がありますか? – lejlot
私はそれが訓練されている同じデータセットでテストしています。だから結果はかなり似ているはずのものではない。 – mcudic