2017-10-03 1 views
0

Je travaille sur la modélisation de la langue et le vocabulaire est grand. Donc, je veux utiliser sampled_softmax_loss de tensorflow. Le problème est que poids et biais qui sont les arguments de la fonction sampled_softmax_loss ne semble pas trainable (leurs valeurs ne changent pas après la formation)keras ajouter une variable externe pouvant être entraînée au graphique

donc je suppose que je devrais les ajouter à la construction graphique de calcul automatique par Keras Model, mais j'ai passé beaucoup de temps et je n'ai toujours pas trouvé le moyen de le faire.

Alors, encore une fois. Je veux pour ajouter tf.Variables externes traitables au graphique de calcul de keras. Est-ce que quelqu'un connaît la méthode pour le faire?

mon modèle (tête et queue)

input_sentence = Input(shape=(INPUT_LENGTH,), dtype='int32') 
words = Embedding(embedding_matrix.shape[0], embedding_matrix.shape[1], 
        weights=[embedding_matrix], trainable=True)(input_sentence) 

... 

context = Dense(256, activation='tanh')(context) 

model = Model(inputs=input_sentence, outputs=context, name=name) 

perte

def softmax_fine_loss(labels, logits, transposed_W=None, b=None): 
    res = tf.map_fn(lambda (__labels, __logits): tf.nn.sampled_softmax_loss(transposed_W, b, __labels, __logits, 
                     num_sampled=1000, num_classes=OUTPUT_COUNT+1), 
       (labels, logits), dtype=tf.float32) 
    return res 

loss = lambda labels, logits: softmax_fine_loss(labels, logits, transposed_W=transposed_W, b=b) 

model_truncated.compile(optimizer=optimizer, loss=loss, sample_weight_mode='temporal') 

Répondre

1

J'ai enfin trouvé une solution

Disons que nous devons former des poids W et les préjugés b avec notre modele.

Donc, la solution de contournement consiste simplement à les ajouter à l'une des couches pouvant être entraînées de notre modèle.

model.layers[-1].trainable_weights.extend([W, b]) 

Lorsque nous compilons le modèle

model.compile(...) 

Il est extrêmement important de ajouter des variables à la couche trainable, par exemple, je l'ai expérimenté avec le modèle séquentiel, et en ajoutant [W, b] à la couche d'activation ne les rend pas réellement entraînables.