Ich versuche, benutzerdefinierte Worteinbettungen von Spacy für das Training einer Sequenz zu verwenden -> Label RNN Abfrageklassifikator. Hier ist mein Code:Genauigkeit geht auf 0,0000 beim Training RNN mit Keras?
word_vector_length = 300
dictionary_size = v.num_tokens + 1
word_vectors = v.get_word_vector_dictionary()
embedding_weights = np.zeros((dictionary_size, word_vector_length))
max_length = 186
for word, index in dictionary._get_raw_id_to_token().items():
if word in word_vectors:
embedding_weights[index,:] = word_vectors[word]
model = Sequential()
model.add(Embedding(input_dim=dictionary_size, output_dim=word_vector_length,
input_length= max_length, mask_zero=True, weights=[embedding_weights]))
model.add(Bidirectional(LSTM(128, activation= 'relu', return_sequences=False)))
model.add(Dense(v.num_labels, activation= 'sigmoid'))
model.compile(loss = 'binary_crossentropy',
optimizer = 'adam',
metrics = ['accuracy'])
model.fit(X_train, Y_train, batch_size=200, nb_epoch=20)
hier die word_vectors aus spacy.vectors abgezogen und haben Länge 300 ist die Eingabe ein np_array
die wie [0,0,12,15,0...]
der Dimension aussieht 186, wo die ganzen Zahlen der Token-IDs in dem Eingang sind, und Ich habe die eingebettete Gewichtsmatrix entsprechend konstruiert. Die Ausgabeschicht ist [0,0,1,0,...0]
mit einer Länge von 26 für jedes Trainingssample und gibt die Bezeichnung an, die zu diesem Vektortext gehören sollte.
Das sieht so aus, als müsste es funktionieren, aber in der ersten Epoche nimmt die Trainingsgenauigkeit ständig ab ... und am Ende der ersten Epoche/für den Rest des Trainings ist es genau 0 und ich bin mir nicht sicher warum das passiert. Ich habe schon viele Modelle mit Keras/TF trainiert und bin nie auf dieses Problem gestoßen.
Irgendeine Idee, was hier geschehen könnte?
Haben Sie versucht, die Lernrate zu verringern? Der Standard '1e-3' für Adam ist für diese Aufgabe ziemlich hoch. – y300