1. ホーム
  2. tensorflow

[解決済み] TensorflowとKerasを使用して、学習精度よりも高い検証精度を実現。

2022-02-11 19:51:56

質問

出会い系サイトで自己申告した15の属性から、ディープラーニングを使って収入を予測しようとしています。

トレーニングデータよりも検証データの方が精度が高く、損失が少ないという、かなり奇妙な結果が出ています。これは、隠れ層の大きさが変わっても同じです。 これが我々のモデルです。

for hl1 in [250, 200, 150, 100, 75, 50, 25, 15, 10, 7]:
    def baseline_model():
        model = Sequential()
        model.add(Dense(hl1, input_dim=299, kernel_initializer='normal', activation='relu', kernel_regularizer=regularizers.l1_l2(0.001)))
        model.add(Dropout(0.5, seed=seed))
        model.add(Dense(3, kernel_initializer='normal', activation='sigmoid'))

        model.compile(loss='categorical_crossentropy', optimizer='adamax', metrics=['accuracy'])
        return model

    history_logs = LossHistory()
    model = baseline_model()
    history = model.fit(X, Y, validation_split=0.3, shuffle=False, epochs=50, batch_size=10, verbose=2, callbacks=[history_logs])

そして、これが精度と損失の例です。 .

正則化とドロップアウトを除去してみましたが、予想通りオーバーフィッティングになってしまいました(学習acc:〜85%)。さらに、学習率を極端に下げてみたが、同様の結果となった。

同じような結果を見たことがある方はいらっしゃいますか?

解決方法は?

を使用すると、このようなことが起こります。 Dropout というのは、学習時とテスト時の動作が異なるからです。

学習時には、一定割合の素性がゼロに設定されます(あなたの場合は Dropout(0.5) ). テスト時には、すべての特徴が使用されます(そして、適切にスケーリングされます)。そのため、テスト時のモデルはより堅牢になり、テストの精度を高めることができます。