KerasとDNNは一般的に新しく、いくつかのチュートリアルから始めて、文章を分類するモデルを作成しました。モデルを以下に示します。正直言って、私はそれの背後にある直感とそれがなぜ機能するのかは分かりません。だからこれは私の質問です。このDNNモデルを理解していて、なぜマルチラベル分類では機能しないのですか
def create_model():
embedding_layer = Embedding(input_dim=100, output_dim=300,
input_length=100)
model = Sequential()
model.add(embedding_layer)
model.add(Dropout(0.2))
model.add(Conv1D(filters=100, kernel_size=4, padding='same', activation='relu'))
model.add(MaxPooling1D(pool_size=4))
model.add(LSTM(units=100, return_sequences=True))
model.add(GlobalMaxPooling1D())
#model.add(Dense(1, activation='sigmoid'))
###### multiclassification #########
model.add(Dense(3, activation='sigmoid')) #I want to replace the above line with this for multi-classification but this didnt work
model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy'])
そして、ここに私の理解である:モデルは、(文章の)コーパスに訓練ワード埋め込みで始まり、単語ベクトル(embedding_layer)のベクトルとして各文を表します。ドロップアウトレイヤーは、モデルを特定の単語に依存させないようにします。畳み込みは、個々の単語とは対照的に、フレーズ/ nグラムを特定する同様の効果を有する。有用な特徴であり得るフレーズ/ nグラムのシーケンスを学習するためにLSTMが続く。次に、Globalmaxpooling1D
レイヤーは、LSTM出力を最終的な分類(密なレイヤー)のフィーチャーとして「平坦化」します。
これは意味がありますか?私はまた、maxpooling1D
層とlstm
層の間の相互作用をかなり理解していません。 input_shape
〜lstm
とは何ですか。出力はどのように見えますか?
私の質問に関連していますが、これは直接答えますので...私はまだ層間のデータの形を整えようとしています。なぜlstmは同じ機能の25の長さを持っていますか?私は層が長さではなく機能を減らしていると思ったのですか?埋め込みレイヤーは100(単語または長さ)x 300(特徴)を出力し、conv1dはそれぞれ100(単語)×75(300/4)の100(フィルターまたはチャンネル)の特徴マップを生成する。 max poolingはこれをさらに75/4に減らすべきではありませんか?この場合、lstmへの入力についても、バッチサイズはどのくらいですか?ステップ= 100ですか? Thanks – Ziqi
'stride'が4に設定されている場合、これはこのように動作します.4に等しいフィルタサイズは、' Conv1D'の各出力が4つのタイムステップからの情報を収集したことを意味します。 –
申し訳ありませんが、conv1dで 'kernel_size'を意味しますか? – Ziqi