2017-08-25 4 views
0

Je veux charger le fichier point de contrôle, des formes de changement de certaines variables ((1,1,1024,55) ->(1,1,1024,60)) puis enregistrez point de contrôle à nouveauNe peut pas assigner des valeurs avec des formes différentes dans tensorflow

Ce que je l'ai fait:

1. J'ai checkpoint chargé

saver = tf.train.import_meta_graph(meta) 
saver.restore(sess, ckpt 
  1. Essayé utiliser tf.assign():

    for var in tf.global_variables(): if var.name == "22-convolutional/biases:0": assign = tf.assign(var, a, validate_shape=False) sess.run(assign)

Et puis, quand je suis en train d'exécuter

sess.run(tf.global_variables_initializer())

J'ai une erreur

Assign requires shapes of both tensors to match. lhs shape= [1,1,1024,60] rhs shape= [1,1,1024,55] [[Node: 22-convolutional/kernel/Adam_1/Assign = Assign[T=DT_FLOAT, _class=["loc:@22-convolutional/kernel"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](22-convolutional/kernel/Adam_1, zeros_51)]]

Est-e Avez-vous des idées de quoi essayer?

Merci!

+0

et ** quel est le résultat attendu? Qu'arrive-t-il aux 5 valeurs manquantes? – lejlot

+0

Le nouveau tenseur après affectation peut être rempli de zéros. En outre, il ne lancera pas de problèmes de calcul après avoir changé la forme nécessaire pour moi les variables, les formes vont bien correspondre – Dmitry

Répondre

1

Vous ne pouvez pas modifier la forme d'une variable. La forme est définie à la création et chaque valeur que vous lui attribuez doit avoir cette forme. Si la nouvelle valeur est toujours plus petite que celle d'origine, vous pouvez envisager de faire un slice assignment, si cela vous est utile. Ou vous pouvez utiliser une nouvelle variable, ou autre chose. Mais il n'y a pas de "truc" qui vous permet de changer la forme.

+0

Aussi j'ai essayé l'approche suivante: J'ai créé une nouvelle variable 'a' avec le nom de old_var, et juste écrit 'old_var = a'. Mais après l'affectation, 'a' a un nom de old_var + postfix __1_ – Dmitry

+0

@Dmitry Oui, vous ne pouvez pas" écraser "une variable avec une autre, ou quoi que ce soit, une fois que vous l'avez fait, elle est là pour toujours. même nom. Vous pouvez utiliser une nouvelle variable, mais elle ne sera pas automatiquement liée à la précédente. Faire aussi 'old_var = a' remplacera simplement la référence détenue par' old_var', mais la variable existera toujours dans le graphe. – jdehesa