Ich versuche, den word2vec Algorithmus mit Keras zu implementieren, aber ich bin immerGenannt set_weights (Gewichte) auf Schicht „I2h“ mit einer Gewichtsliste der Länge 3418, aber die Schicht erwartete 0 Gewichte
ValueError: You called `set_weights(weights)` on layer "i2h" with a weight list of length 3418, but the layer was expecting 2 weights. Provided weights: [[ 0.07142857 0.07142857 0.07142857 ..., 0.0714...
als ich versuche, die Gewichte für die gemeinsam genutzten Matrix von dem Eingang zu der verborgenen Schicht zu setzen i2h
:
class Word2Vec:
def __init__(self, window_size, word_vectors):
vocab_size = word_vectors.shape[0]
embedding_size = word_vectors.shape[1]
i2h = Dense(embedding_size, activation='linear', name='i2h')
inputs = list()
h_activations = list()
for i in range(window_size):
in_x = Input(shape=(vocab_size, 1), name='in_{:d}'.format(i))
inputs.append(in_x)
h_activation = i2h(in_x)
h_activations.append(h_activation)
i2h.set_weights(word_vectors)
h = merge(h_activations, mode='ave')
h2out = Dense(vocab_size, activation='softmax', name='out')(h)
self.model = Model(input=inputs, output=[h2out])
self.model.compile(optimizer='adam', loss='mse')
ich verstehe nicht ganz, wie ich diese Gewichtsmatrix einstellen.
Ich habe auch die Dense()
Schicht als Eingabe verwendet wird versucht
i2h = Dense(embedding_size, input_dim=vocab_size, activation='linear', name='i2h')
i2h.set_weights(word_vectors)
aber ich bin mit dem gleichen Fehler.
Wie kann ich die geteilten Gewichte in diesem Fall einstellen?
Nun, ich verstehe nicht die 'Embedding' Klasse. Es braucht eine ganzzahlige Matrix für die Wörter, aber wenn ich das zu einer "Dichte" Ebene übergebe, erhält ich einen '(?, 6, 13)' Tensor, der für mich keinen Sinn ergibt. Was ich tun muss, ist, alle Wörter, die gegeben sind, so zusammenzufassen, dass ich den Logit-Vektor heraushole. Ich finde jedoch kein Beispiel dafür, daher bin ich damit nicht gegangen. – displayname
Nur als ein Beispiel: 'h_activation = Einbetten (input_dim = vocab_size, output_dim = embedding_size, input_length = input_length, weights = [word_vectors], trainable = False) (in_x)' das Ergebnis wird ein '(?, Input_length, embedding_size) 'geformter Tensor anstelle von' (?, embedding_size) 'wobei jedes Sample die Summe aller Worteinbettungen ist. – displayname
Haben Sie "Pooling" probiert? –