2017-04-30 16 views
-1

tf.train.Saver およびrestoreを使用してTensorFlowモデルを保存および復元しています。復元プロセスでは、私は新しい入力データをロードしています。TensorFlow変数名 - 保存/復元時の割り当てエラー

InvalidArgumentError (see above for traceback): Assign requires shapes of both tensors to match. lhs shape= [1334,3] rhs shape= [1246,3] [[Node: save/Assign_6 = Assign[T=DT_FLOAT, _class=["loc:@Variable_2"], use_locking=true, validate_shape=true, _device="/job:localhost/replica:0/task:0/cpu:0"](Variable_2, save/RestoreV2_6)]]

これは、問題はVariable_2であることを言うようですが、どのように1はVariable_2に対応するコードのどの変数を判別ん:restoreメソッドは、このエラーがスローされますか?

答えて

-1

新しい変数を作成すると、固有の名前が付けられます。 Saver.restoreはチェックポイントで同じ名前を調べます。別の名前の別のチェックポイントから変数の一部を初期化する必要がある場合は、tf.contrib.framework.init_from_checkpointを参照してください。

+0

ありがとう、しかし私は非常に従っていません。チェックポイントを保存したコードと同じコードを使用してチェックポイントをロードしています。保存と復元の間に新しい変数は作成されませんでした。 –

0
  • あなたはモードを復元し、あなたがあなたのモデル1を復元する際に
  • だから、上記のエラーが言っている、それを保存したとき、モデルの形状とモデルarchtectureが同じである必要があり、フィードフォワードを行っている場合保存されたテンソルの形状は[1246,3]ですが、形状が[1334,3]
  • のテンソルに割り当てると、テンソルに一意の名前を割り当てることができる変数が明示的にわかります。例えばa = tf.placeholder("float", [3, 3], name="tensor_a")
  • だから、あなたがモデルを復元するとき、あなたはモデルのテンソルがname = "tensor_a"のグラフに3xコード中3
  • クイックチュートリアル:

    # Create some variables. 
    v1 = tf.get_variable("v1", shape=[3], initializer=tf.zeros_initializer) 
    v2 = tf.get_variable("v2", shape=[5], initializer=tf.zeros_initializer) 
    
    inc_v1 = v1.assign(v1+1) 
    dec_v2 = v2.assign(v2-1) 
    
    # Add an op to initialize the variables. 
    init_op = tf.global_variables_initializer() 
    
    # Add ops to save and restore all the variables. 
    saver = tf.train.Saver() 
    
    # Later, launch the model, initialize the variables, do some work, and save the 
    # variables to disk. 
    with tf.Session() as sess: 
        sess.run(init_op) 
        # Do some work with the model. 
        inc_v1.op.run() 
        dec_v2.op.run() 
        # Save the variables to disk. 
        save_path = saver.save(sess, "/tmp/model.ckpt") 
        print("Model saved in file: %s" % save_path) 
    
    tf.reset_default_graph() 
    
    # Create some variables. 
    d1 = tf.get_variable("v1", shape=[3]) 
    d2 = tf.get_variable("v2", shape=[5]) 
    
    # Add ops to save and restore all the variables. 
    saver = tf.train.Saver() 
    
    # Later, launch the model, use the saver to restore variables from disk, and 
    # do some work with the model. 
    with tf.Session() as sess: 
        # Restore variables from disk. 
        saver.restore(sess, "/tmp/model.ckpt") 
        print("Model restored.") 
        # Check the values of the variables 
        print("v1 : %s" % d1.eval()) 
        print("v2 : %s" % d2.eval()) 
    
  • あなたは上記のコードD1とV1に気づいた場合は、ここで同じ形状を有しているあなたは、変数oftheいずれかの形状を変更した場合、それはあなたのようなエラーがスローされますあなたが得ているエラー

関連する問題