Tensorflow 模型加载及部分变量初始化
生活随笔
收集整理的這篇文章主要介紹了
Tensorflow 模型加载及部分变量初始化
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
最近在做預訓練部分圖模型,將這部分圖模型重新加載到一個新的圖中,并加入一些新的op。下面是一些遇到的問題,調試方法以及解決方案。
1、從已有圖中restore參數
saver_restore = tf.train.import_meta_graph(meta_path_restore) saver_restore.restore(sess,<checkpoint path>)2、通過tensor的名字獲取變量
input_y = saver_restore.get_tensor_by_name('name:0')P.S.在實驗過程中,我自己嘗試了一種方法,在外部創建會話,直接將需要加載的參數通過會話加載進來也是可以的。
sess = tf.Session() model1= Model1(Session=sess, restore='Model1參數path') model2= Model2(Session=sess, restore='Model2參數path')這樣也是可行的,但是如果加入其它操作的話會出現attempting to use uninitialized value。出現這個問題的原因是在部分加載變量后,添加了其它操作,同時又沒有做對未賦值變量做initialize。解決辦法
1、先添加需要的其它操作,然后運行
tf.global_variables_initializer()隨后對部分參數加載。這里需要注意,如果是最后執行global_variables_initializer()的話,之前所有的賦值操作都會被覆蓋掉,也即之前做的所有操作都是無意義的。
2、加載參數后,加入新的操作,最后對沒有初始化的部分參數進行初始化操作。
uninit_vars=[] for var in tf.all_variables():try:sess.run(var)except tf.errors.FailedPreconditionError:uninit_vars.append(var) init_new_vars_op = tf.initialize_variables(uninit_vars) sess.run(init_new_vars_op)這里使用的是部分參數初始化,通過這種方法就可以避免需要加載參數后再加入其他操作無法初始化參數的問題。
附加一個可以用于查看參數變量的代碼,方便調試使用:
var = tf.trainable_variables() value = sess.run(var) for v in value:print(v)另https://blog.csdn.net/ying86615791/article/details/76215363這篇寫的也很好,可供參考。
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的Tensorflow 模型加载及部分变量初始化的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 预训练模型参数重载必备!
- 下一篇: TensorFlow预训练模型在新图中权