Tôi đang cố triển khai cấu trúc tương tự câu dựa trên số work using the STS dataset này. Nhãn là điểm tương đồng chuẩn hóa từ 0 đến 1 vì vậy nó được giả định là một mô hình hồi quy.Tương tự câu bằng cách sử dụng keras
Vấn đề của tôi là mất trực tiếp đến NaN
bắt đầu từ kỷ nguyên đầu tiên. Tôi đang làm gì sai?
Tôi đã thử cập nhật lên phiên bản mới nhất và phiên bản mới nhất.
Mã cho mô hình của tôi là:
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)
Tôi cũng đã cố gắng sử dụng một đơn giản Lambda
thay vì lớp Merge
, nhưng nó có cùng một kết quả.
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])
Xin chào, tôi thấy bạn mới sử dụng StackOverflow. Để giúp chúng tôi xác định sự cố và để nhận được câu trả lời bạn cần nhanh hơn, bạn có thể cung cấp thêm thông tin bổ sung nào không? Bạn đang gặp lỗi gì, nếu có? Bạn đã mong đợi điều gì? –
tốt, bây giờ tôi đang cố gắng tìm ra lý do tại sao mạng của tôi bị mất ** nan ** trong khi tập luyện. – lila
Có thể tỷ lệ học tập của bạn quá cao. Có thể có một vấn đề khác. Nếu bạn đang sử dụng Theano bạn có thể sử dụng ['THEANO_FLAGS = 'mode = NanGuardMode''] (http://deeplearning.net/software/theano/tutorial/modes.html) khi bắt đầu kịch bản của bạn để có nó ném một ngoại lệ, nơi một Giá trị 'nan' được phát hiện, cho phép bạn truy nguyên lại vị trí của vấn đề. – nemo