2017-06-15 13 views
0

私はトレーニングに関して高い分類をしていますが、同じデータセットを使用していますが、この問題は、バッチ正規化を使用している場合にのみ発生します。正しく実装していますか?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

+0

これらの結果については何が奇妙ですか?トレーニングの精度は常にテストよりも優れています。あなたは一般化が簡単であると思う何らかの理由がありますか? – lejlot

+0

私はそれが訓練されている同じデータセットでテストしています。だから結果はかなり似ているはずのものではない。 – mcudic

答えて

0

層おそらく間違い。なぜあなたはこれをやりますか?あなたの入力はイメージであり、入力を正規化する方法を非常によく知っています - 実際は、これは最初の行で行っていることです。もう一度正規化を適用するのは意味がありません。

データが大きくなり過ぎたり小さすぎたりしないように、隠れ層にバッチ正規化が適用されます。これを行うための単純で普遍的な方法はないので、Sergey Ioffe and Christian Szegedyによって導入されたこの特別な層。

+0

よろしくお願いします。私は最初の層でバッチの正規化を取り出しました。私はまだ同じ問題を抱えています。同じデータセットをトレーニングして検証/テストを行った場合、トレーニング結果はテスト結果よりもはるかに優れています。 – mcudic

+0

@mcudicあなたの問題を解決しましたか?あなたが使用していたKerasとTensorflowのバージョンを含めることができますか? CUDAとCuDNNのバージョンだけでなく、 –

関連する問題