나는 work using the STS dataset을 기반으로 문장 유사 아키텍처를 구현하려고합니다. 레이블은 정규화 된 유사성 점수가 0에서 1까지이므로 회귀 모델로 가정합니다.케라를 사용하여 문장의 유사성
내 문제는 손실이 직접적으로첫 번째 에포크부터 시작한다는 것입니다. 내가 도대체 뭘 잘못하고있는 겁니까?
나는 이미 최신 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])
을 발견 나는 당신에 유래에 익숙 참조하십시오. 문제를 파악하고 신속하게 답변해야하는 정보를 얻으려면 도움이 될만한 추가 정보가 있습니까? 오류가 있다면 무엇을보고 있습니까? 대신에 당신은 무엇을 기대 했습니까? –
글쎄, 지금은 왜 내 네트워크가 훈련 중에 ** nan ** 손실이되는지 알아 내려고하고있다. – lila
아마도 학습률이 너무 높을 수 있습니다. 어쩌면 다른 문제가있을 수 있습니다. Theano를 사용하는 경우 스크립트를 시작할 때 [ 'THEANO_FLAGS ='mode = NanGuardMode''] (http://deeplearning.net/software/theano/tutorial/modes.html)를 사용하여 예외를 throw하도록 할 수 있습니다. 'nan' 값이 감지되어 문제의 위치를 추적합니다. – nemo