Sentence Ähnlichkeit mit Keras

Ich versuche, eine auf diesem @ basierende Satzähnlichkeitsarchitektur zu implementiere Arbeit mit dem STS-Datensatz. Beschriftungen sind normalisierte Ähnlichkeitswerte von 0 bis 1, sodass davon ausgegangen wird, dass es sich um ein Regressionsmodell handelt.

Mein Problem ist, dass der Verlust direkt an @ geNaN ab der ersten epoche. Was mache ich falsch

Ich habe bereits versucht, auf die neuesten Keras- und Theano-Versionen zu aktualisieren.

Der Code für mein Modell lautet:

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)

Ich habe auch versucht mit einem einfachenLambda anstatt desMerge Ebene, aber es hat das gleiche Ergebnis.

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])

Antworten auf die Frage(4)

Ihre Antwort auf die Frage