2017-08-25 74 views
0

不同形狀的值我想加載檢查點文件,改變形狀有些變量((1,1,1024,55) - >(1,1,1024,60)),然後保存檢查站再次無法分配在Tensorflow

我所做的:

1.我已經加載檢查點

saver = tf.train.import_meta_graph(meta) 
saver.restore(sess, ckpt 
  • 試過使用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)

  • 然後,當我試圖執行

    sess.run(tf.global_variables_initializer())

    我有一個錯誤

    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)]]

    是個有什麼想法的想法嗎?

    謝謝!

    +0

    和**預期結果是什麼**?缺少5個值會發生什麼? – lejlot

    +0

    分配後的新張量可能滿了零。此外,它不會啓動任何計算問題後改變形狀所需的變量,形狀將很好匹配 – Dmitry

    回答

    1

    不能更改變量的形狀。該形狀在創建時定義,並且您分配給它的每個值必須具有該形狀。如果新值始終小於原始值,則可以考慮執行slice assignment,如果這對您有幫助。或者你可以使用一個新的變量,或其他的東西。但是沒有任何「技巧」可以讓你真正改變形狀。

    +0

    另外我已經嘗試了下一個方法: 我已經創建了名爲old_var的新變量'a',並且剛剛寫入'old_var = a'。但是在分配之後,'a'的名字是old_var + postfix __1_ – Dmitry

    +0

    @Dmitry是的,你不能用另一個或類似的東西「覆蓋」一個變量,一旦你使它永遠存在,沒有其他的操作可以使用一樣的名字。您可以使用一個新的不同的變量,但它不會自動與前一個變量相關聯。同樣,'old_var = a'只會替換'old_var'所持有的引用,但該變量仍然存在於圖中。 – jdehesa