2017-07-12 12 views
1

私は以前に訓練された文章を分類するモデルを作った。TensorFlowの小さな変数を大きな変数に戻す方法は?

いくつかの変数を大きくしたいが、より小さな古い変数と変数の残りの部分を元に戻して新しいものを復元したい。

ここ

は私が何をしたいの画像です:私はこれを試したとき

enter image description here

、このエラーが発生しました。

InvalidArgumentError (see above for traceback): Assign requires shapes 
of both tensors to match. lhs shape= [13173,32] rhs shape= [13113,32] 
[[Node: save_1/Assign = Assign[T=DT_FLOAT, 
_class=["loc:@embedding/embedding_W"], use_locking=true, validate_shape=true, 
_device="/job:localhost/replica:0/task:0/gpu:0"](embedding/embedding_W, 
save_1/RestoreV2/_5)]] 

答えて

0

あなたは、たとえばTensorFlowが小さい変数が中に埋め込まれるべき大きな変数のどの部分を知っていない、いくつかの理由のために直接大きな変数に小さい変数を復元することはできません。

を適切にこれを行う方法代わりに古い変数をロードし、新しい変数を作成し、古い変数を新しい変数のサブセットに割り当てます。コードで

は、それは次のようになります。

# the old variable, as it was before 
old_variable = tf.Variable(..., name='old_name') 

# variable with new shape, the one you want to use now 
new_variable = tf.Variable(...) 

# Initialize the variables and restore the checkpoint 
sess.run(tf.global_variables_initializer()) 
saver.restore(sess, 'old_checkpoint') 

# assign op for the places you want to fill in the old variable 
idx = tuple(slice(0, osi) for osi in old_variable.shape) 
asssign_op = new_variable[idx].assign(old_variable) 
sess.run(asssign_op) 
+1

が速い返事ありがとうございます!私はそれを試したが、可変である。 –

+1

ValueError:両方の図形の寸法0は等しくなければなりませんが、入力形状[13173,32]、[13113,32]で 'Assign'(op: 'Assign')の場合は13173と13113です。 –

+1

ああ、あなたは 'new_variable [:13113、:32] .assign(old_variable)'を意味しましたか?できます!!!!!どうもありがとうございます!!!わたしは、あなたを愛しています!!!あなたは私の人生を救っただけです。 –

関連する問題