私はいくつかのクラスにテキストを分類するプログラムを書いています。今、プログラムは単語列の列車とテストサンプルを読み込み、埋め込みレイヤーと畳み込みレイヤーを適用し、それらをクラスに分類します。次のコードのように、手作りの機能を実験に追加しようとしています。 features
は、2つの要素のリストです。最初の要素はトレーニングデータのフィーチャで構成され、2つ目の要素はテストデータのフィーチャで構成されます。各トレーニング/テストサンプルは、対応する特徴ベクトルを有する(すなわち、特徴は単語特徴ではない)。Kerasを使用したテキスト分類:カスタム機能の追加方法
model = Sequential()
model.add(Embedding(params.nb_words,
params.embedding_dims,
weights=[embedding_matrix],
input_length=params.maxlen,
trainable=params.trainable))
model.add(Convolution1D(nb_filter=params.nb_filter,
filter_length=params.filter_length,
border_mode='valid',
activation='relu'))
model.add(Dropout(params.dropout_rate))
model.add(GlobalMaxPooling1D())
# Adding hand-picked features
model_features = Sequential()
nb_features = len(features[0][0])
model_features.add(Dense(1,
input_shape=(nb_features,),
init='uniform',
activation='relu'))
model_final = Sequential()
model_final.add(Merge([model, model_features], mode='concat'))
model_final.add(Dense(len(citfunc.funcs), activation='softmax'))
model_final.compile(loss='categorical_crossentropy',
optimizer='adam',
metrics=['accuracy'])
print model_final.summary()
model_final.fit([x_train, features[0]], y_train,
nb_epoch=params.nb_epoch,
batch_size=params.batch_size,
class_weight=data.get_class_weights(x_train, y_train))
y_pred = model_final.predict([x_test, features[1]])
私の質問は正しいですか?各テキストシーケンスに機能を追加する従来の方法はありますか?
コードが正しいようです。私は['Functional API'](https://keras.io/getting-started/functional-api-guide/)がこの作業には良いかもしれないと思います。必要に応じて機能的なAPIに書き直す手助けをするかもしれません。その場合、 'Dense'からの出力を1つだけ追加するのではなく、完全な特徴ベクトルを追加する方が簡単です。 –
こんにちはマルシン、はい、してください!私はFunctional APIがどのように役立つかを学ぶことに非常に興味があります。 :) –