本文及相關索引已經過時,擁抱2.0吧。另外這幾年TF的官方文檔比之前整潔了不少,建議學習以官方文檔為主。
TensorFlow2.x快速入門:https://tf.wiki/zh/basic/tools.html
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
TensorFlow:官方文檔
TensorFlow:項目地址
本篇列出文章對於全零新手不太合適,可以嘗試TensorFlow入門系列博客,搭配其他資料進行學習。
Keras使用tf.Session訓練方法教程
一、API介紹
基礎操作列表
常用基礎操作
流程控制
『PyTorch』第六彈_最小二乘法對比PyTorch和TensorFlow :參數更新機制分析,流程控制初探
神經網絡構建
『TensorFlow』網絡操作API_上 :卷積層,池化層,激活函數(含dropout和bias_add)
層/網絡解析與實現
『教程』CapsNet 架構 & TensorFlow 實現
『TensorFlow』讀書筆記_Inception_V3_上
『TensorFlow』讀書筆記_Inception_V3_下
『PyTorch × TensorFlow』第十七彈_ResNet快速實現
優化器&梯度操作
.minimize
- compute_gradients
- apply_gradients
『TensorFlow』網絡操作API_下 :優化器相關接口
『TensorFlow』梯度優化相關 :梯度操作
集合操作與正則化實現
『TensorFlow』使用集合collection控制variables
#集合轉換為字典,{節點名:輸出張量值} end_points = slim.utils.convert_collection_to_dict(end_points_collection) # 收集 & 獲取 變量 tf.add_to_collection("loss",mse_loss) tf.add_n(tf.get_collection("loss"))
損失函數
『TensorFlow』網絡操作API_中 :損失函數以及分類器
模型載入
命令行解析
線程操作&數據讀取
Dataset API讀取數據
『TensorFlow』數據讀取類_data.Dataset
傳統數據讀取方法
『TensorFlow』TFR數據預處理探究以及框架搭建 :基於queue處理TFR數據
線程控制器原理:
監視tensorflow所有后台線程,有異常出現(主要是越界,資源循環完了)時,其should_stop方法就會返回True,而它的request_stop方法則用於要求各個線程安全退出。需要使用local變量,初始化時注意。
常規圖片數據讀取方式:
img_bytes = tf.read_file(FLAGS.style_image)
image = tf.image.decode_png(img_bytes)
涉及隊列操作時報錯可能解決辦法
OutOfRangeError (see above for traceback): FIFOQueue '_1_input_producer' is closed and has insufficient elements (requested 1, current size 0) [[Node: ReaderReadV2 = ReaderReadV2[_device="/job:localhost/replica:0/task:0/cpu:0"](WholeFileReaderV2, input_producer)]]
因為局部變量(local variables)沒有初始化,將初始化變量語句改為
全局變量初始化:tf.global_variables_initializer().run()
局部變量初始化:tf.local_variables_initializer().run()
不再報錯。局部變量很少,一般都是系統自己創建的變量,如記錄訓練進度的epoch。
可視化相關
ctrl + 鼠標滑輪 可以放大&縮小tensorboard中所有的頁面
命名空間設置好:添加記錄節點 -> 匯總記錄節點 -> run匯總節點 -> [書寫器生成]書寫入文件 [-> 刷新緩沖區]
# 書寫器生成,會自動記錄指定圖 tf.summary.FileWriter('./', sess.graph) # 張量記錄 tf.summary.histogram(layer_name+'/weights',Weights) # 標量記錄 tf.summary.scalar = ('loss',cross_entropy) # 記錄激活 merged = tf.summary.merge_all() # 書寫器生成 train_writer = tf.summary.FileWriter('logs/train',sess.graph) # run記錄 train_result = sess.run(merged, feed_dict={xs: X_train, ys: y_train, keep_prob:1}) # 書寫記錄 train_writer.add_summary(train_result,i) # 刷新緩沖區,立即寫入文件 train_writer.flush()
slim模塊
二、TensorFlow的tips
節點和張量
節點張量鋪設好了之后,只要不加sess.run(),可以運行腳本檢查張量節點是否匹配,無需傳入實際數據流。
'conv1'指節點,'conv1:0'指節點輸出的第一個張量。
sess上下文環境中的函數調用即使不傳入sess句柄,函數體內也存在於默認的sess環境中,可以直接sess.run()。
image_holder = tf.placeholder(tf.float32,[None, None, None, 3]),使用None回避指定大小。
sess實際運行單機模式時,會提取目標節點的所有前置依賴構建成子圖,然后按照設備划分成多個局部圖,局部圖根據依賴先后關系對節點進行加載
設備指定使用tf.device('/cpu:0')上下文操作,且支持嵌套,邏輯於slim的scope一致
查看信息版本安裝路徑
import tensorflow as tf
tf.__version__ # 版本
tf.__path_ # 路徑
# __看着是一個下划線,實際上是兩個下划線
通常張量的Feed
TensorFlow中所有張量而不僅是占位符都是可以feed的,如果有feed,其優先級大於圖中的計算流程。