2016-09-02 8 views
8

私はこの文に基づいて文の類似性アーキテクチャを実装しようとしています。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]) 
+0

を見つけた私は、あなたがStackOverflowのに新しいしている参照してください。私たちが問題を特定するのを助け、あなたがより迅速に必要とする回答を得るために、追加情報がありますか?もしあなたが見ているエラーは何ですか?代わりにあなたは何を期待しましたか? –

+0

さて、私はネットワークがトレーニング中に** nan **の損失になる理由を理解しようとしています。 – lila

+0

あなたの学習率が高すぎるかもしれません。たぶん別の問題があります。 Theanoを使用している場合は、スクリプトを起動するときに[THEANO_FLAGS = 'mode = NanGuardMode''](http://deeplearning.net/software/theano/tutorial/modes.html)を使用して、 'nan'値が検出され、問題の場所へのトレースバックが与えられます。 – nemo

答えて

1

ナノは、深い学習回帰の共通の問題です。サイアムネットワークを使用しているため、次のように試してみることができます:

  1. データを確認してください:正規化する必要がありますか?
  2. 最後のレイヤーとしてネットワークにDenseレイヤーを追加しようとしますが、アクティブ化機能を慎重に選択するようにしてください。 relu
  3. 別の損失関数を使用しようとします。あなたの学習率がより小さくなりました。慎重に、ゼロによる除算を扱っていない0.0001
  4. COSモードでは、完全に深い学習の仕事を作るのは簡単ではありませんNaNの

の原因である可能性があります。

0

私はnan号に掲載されませんでしたが、私の損失は変わりません。私は、こんにちは。この情報に check this out

def cosine_distance(shapes): 
    y_true, y_pred = shapes 
    def l2_normalize(x, axis): 
     norm = K.sqrt(K.sum(K.square(x), axis=axis, keepdims=True)) 
     return K.sign(x) * K.maximum(K.abs(x), K.epsilon())/ K.maximum(norm, K.epsilon()) 
    y_true = l2_normalize(y_true, axis=-1) 
    y_pred = l2_normalize(y_pred, axis=-1) 
    return K.mean(1 - K.sum((y_true * y_pred), axis=-1)) 
関連する問題