私は文のラベル付け問題に取り組んでいます。自分で埋め込みとパディングを行いましたが、入力は次のようになります。
X_i = [[0,1,1,0,2,3...], [0,1,1,0,2,3...], ..., [0,0,0,0,0...], [0,0,0,0,0...], ....]
文中のすべての単語について、4 つのクラスのいずれかを予測したいので、目的の出力は次のようになります。
Y_i = [[1,0,0,0], [0,0,1,0], [0,1,0,0], ...]
私の単純なネットワーク アーキテクチャは次のとおりです。
model = Sequential()
model.add(LSTM(input_shape = (emb,),input_dim=emb, output_dim=hidden, return_sequences=True))
model.add(TimeDistributedDense(output_dim=4))
model.add(Activation('softmax'))
model.compile(loss='binary_crossentropy', optimizer='adam')
model.fit(X_train, Y_train, batch_size=32, nb_epoch=3, validation_data=(X_test, Y_test), verbose=1, show_accuracy=True)
トレーニング中は約 95% を示していますが、トレーニング済みモデルを使用して新しい文を予測しようとすると、結果は非常に悪くなります。モデルは最初の単語のいくつかのクラスを学習したばかりのようで、毎回それを示しています。問題は次のとおりだと思います。
自分でパディング (文末のゼロ ベクトル) を書いた場合、学習が悪化する可能性はありますか?
パディングなしで、さまざまな長さの文を学習しようとする必要があります (はいの場合、Keras でそのような種類のモデルをトレーニングする方法を教えてもらえますか?)
学習目的を間違えましたが、平均二乗誤差、バイナリクロスエントロピーなどを試してみましたが変わりません。
TimeDistributedDense
との何かsoftmax
、私はそれがどのように機能するかを知っていると思いますが、それでも 100% 確実ではありません.
この問題に関するヒントやヘルプをいただければ幸いです。ありがとうございます。