與訓練相關的操作
- 0 gpu版本的tensor flow安裝
- 1. tf.control_dependencies(update_ops)
0 gpu版本的tensor flow安裝
cuda10.2
conda create -n py27 python=2.7
conda activate py27
pip install tensorflow==1.14.0
驗證 gpu版本的tensor可用
import tensorflow as tf
print(tf.test.is_gpu_available()) # true 為可用
報錯1: Could not dlopen library ‘libcudart.so.10.0’; dlerror: libcudart.so.10.0: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-11.2/lib64:
解決:安裝cudatoolkit
conda install cudatoolkit=10.0
報錯1: Could not dlopen library ‘libcudnn.so.7’; dlerror: libcudnn.so.7: cannot open shared object file: No such file or directory; LD_LIBRARY_PATH: /usr/local/cuda-11.2/lib64
解決:安裝cudnn=7.6.5
conda install cudnn=7.6.5
如果你的模型訓練出不了效果,可能的原因太多了,沒搞清tf 中各個函數的具體作用可能就是其中一個原因。本文記錄【如果不理清,會造成無法解釋的訓練現象的操作】。
1. tf.control_dependencies(update_ops)
- tf.control_dependencies()–保證其作用域內的操作必須要在該函數所傳遞的參數中的操作完成后再進行。 如下Code Demo,只有在update_ops 操作完成后,才會執行optimizer.minimize(loss)。
- tf.GraphKeys.UPDATE_OPS–tensorflow計算圖中內置的一個集合,通過 tf.get_collection獲取這個集合。其中會保存一些需要在訓練操作之前完成的操作。例如: batch normalization 均值和方差的更新。
Code Demo
update_ops = tf.get_collection(tf.GraphKeys.UPDATE_OPS)with tf.control_dependencies(update_ops):train_op = optimizer.minimize(loss)
參考文獻:
1.tensorflow中的batch_norm以及tf.control_dependencies和tf.GraphKeys.UPDATE_OPS的探究
2.tf.get_collection(tf.GraphKeys.UPDATE_OPS)