私はこの文に基づいて文の類似性アーキテクチャを実装しようとしています。work using the STS dataset。ラベルは、0から1までの正規化された類似度スコアであるため、回帰モデルと見なされます。ケラを使用した文の類似性
私の問題は、損失が最初のエポックから直接NaN
に行くということです。私は間違って何をしていますか?
私はすでに最新のkerasとtheanoバージョンに更新しようとしました。
私のモデルのコードは次のとおりです。
def create_lstm_nn(input_dim):
seq = Sequential()`
# embedd using pretrained 300d embedding
seq.add(Embedding(vocab_size, emb_dim, mask_zero=True, weights=[embedding_weights]))
# encode via LSTM
seq.add(LSTM(128))
seq.add(Dropout(0.3))
return seq
lstm_nn = create_lstm_nn(input_dim)
input_a = Input(shape=(input_dim,))
input_b = Input(shape=(input_dim,))
processed_a = lstm_nn(input_a)
processed_b = lstm_nn(input_b)
cos_distance = merge([processed_a, processed_b], mode='cos', dot_axes=1)
cos_distance = Reshape((1,))(cos_distance)
distance = Lambda(lambda x: 1-x)(cos_distance)
model = Model(input=[input_a, input_b], output=distance)
# train
rms = RMSprop()
model.compile(loss='mse', optimizer=rms)
model.fit([X1, X2], y, validation_split=0.3, batch_size=128, nb_epoch=20)
私はまた、代わりにMerge
層の簡単なLambda
を使用してみましたが、それは同じ結果になります。
def cosine_distance(vests):
x, y = vests
x = K.l2_normalize(x, axis=-1)
y = K.l2_normalize(y, axis=-1)
return -K.mean(x * y, axis=-1, keepdims=True)
def cos_dist_output_shape(shapes):
shape1, shape2 = shapes
return (shape1[0],1)
distance = Lambda(cosine_distance, output_shape=cos_dist_output_shape)([processed_a, processed_b])
を見つけた私は、あなたがStackOverflowのに新しいしている参照してください。私たちが問題を特定するのを助け、あなたがより迅速に必要とする回答を得るために、追加情報がありますか?もしあなたが見ているエラーは何ですか?代わりにあなたは何を期待しましたか? –
さて、私はネットワークがトレーニング中に** nan **の損失になる理由を理解しようとしています。 – lila
あなたの学習率が高すぎるかもしれません。たぶん別の問題があります。 Theanoを使用している場合は、スクリプトを起動するときに[THEANO_FLAGS = 'mode = NanGuardMode''](http://deeplearning.net/software/theano/tutorial/modes.html)を使用して、 'nan'値が検出され、問題の場所へのトレースバックが与えられます。 – nemo