5

私は文のラベル付け問題に取り組んでいます。自分で埋め込みとパディングを行いましたが、入力は次のようになります。

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% を示していますが、トレーニング済みモデルを使用して新しい文を予測しようとすると、結果は非常に悪くなります。モデルは最初の単語のいくつかのクラスを学習したばかりのようで、毎回それを示しています。問題は次のとおりだと思います。

  1. 自分でパディング (文末のゼロ ベクトル) を書いた場合、学習が悪化する可能性はありますか?

  2. パディングなしで、さまざまな長さの文を学習しようとする必要があります (はいの場合、Keras でそのような種類のモデルをトレーニングする方法を教えてもらえますか?)

  3. 学習目的を間違えましたが、平均二乗誤差、バイナリクロスエントロピーなどを試してみましたが変わりません。

  4. TimeDistributedDenseとの何かsoftmax、私はそれがどのように機能するかを知っていると思いますが、それでも 100% 確実ではありません.

この問題に関するヒントやヘルプをいただければ幸いです。ありがとうございます。

4

1 に答える 1

1

個人的には、「配列標識」の意味を誤解していると思います。

つまり:

  1. Xは文のリストで、各要素X[i]は任意の長さの単語列ですか?
  2. Y[i]のカテゴリでX[i]あり、の 1 つのホットな形式は配列Y[i][0, 1, 0, 0]ようなものですか?

もしそうなら、それは配列のラベル付けの問題ではなく、分類の問題です。

を使用しないでくださいTimeDistributedDense。多クラスの分類問題、つまり の場合は、" " の代わりに " " を使用len(Y[i]) > 2してください。categorical_crossentropybinary_crossentropy

于 2016-12-30T11:12:48.143 に答える