面向機器智慧的TensorFlow實戰2:TensorFlow基礎
1、資料流圖簡介
兩個基礎構件:節點和邊
構建第一個TensorFlow資料流圖:
>>> import tensorflow as tf
>>> a = tf.constant(5, name="input_a")
>>> b = tf.constant(3, name="input_b")
>>> c = tf.multiply(a, b, name="mul_c")
>>> d = tf.add(a, b, name="add_d")
>>> e = tf.add(c, d, name="add_e")
>>> sess = tf.Session()
>>> sess.run(e)
# 儲存資料流圖的資料和概括統計量
>>> writer = tf.summary.FileWriter('./my_graph', sess.graph)
$ tensorboard --logdir="my_graph"
張量:1D張量等價於向量,2D張量等價於矩陣,N維張量
a = tf.constant([5,3], name="input_a")
b = tf.reduce_prod(a, name="prod_b") # 累乘
c = tf.reduce_sum(a, name="sum_c") # 累加
d = tf.add(c, d, name="add_d")
NumPy陣列:TensorFlow資料型別是基於NumPy的資料型別的。字串資料型別
Graph物件:在大多數TensorFlow程式中,只使用預設資料流圖就足夠了。然而,如果需要定義多個相互之間不存在依賴關係的模型,則建立多個Graph物件十分有用。
Session物件:Session類負責資料流圖的執行,tf.Session接收3個可選引數:
.target指定了所要使用的執行引擎。
.graph引數指定了將要在Session物件中載入的Graph物件。
.config引數允許使用者指定配置Session物件所需的選項,如限制CPU或GPU的使用數目,為資料流圖設定優化引數及日誌選項等。
session.run()接收一個引數fetches,以及其他三個可選引數:feed_dict、options和run_metadata。
利用佔位節點新增輸入:tf.placeholder Op可建立佔位符。
# 建立一個長度為2,資料型別為int32的佔位向量
a = tf.placeholder(tf.int32, shape=[2], name="my_input")
b = tf.reduce_prod(a, name="prod_b")
c = tf.reduce_sum(a, name="sum_c")
# 完成資料留圖的定義
d = tf.add(b, c, name="add_d")
Variable物件:Tensor物件和Op物件都是不可變的,但機器學習任務的本質決定了需要一種機制儲存隨事件變化的值。藉助TensorFlow中的Variable物件,便可達到這個目的。Variable物件包含了在對Session.run()多次呼叫中可持久的可變張量值。
通過名稱作用域組織資料流圖:現實世界中的模型往往會包含幾十或上百個節點,以及數以百萬計的引數。為使這種級別的複雜性可控,TensorFlow當前提供了一種幫助使用者組織資料流圖的機制---名稱作用域(name scope)
綜合例項:
import tensorflow as tf
tf.merge_all_summaries = tf.summary.merge_all
tf.train.SummaryWriter = tf.summary.FileWriter
graph = tf.Graph()
with graph.as_default():
with tf.name_scope("variables"):
# 用於追蹤模型的執行次數
global_step = tf.Variable(0, dtype=tf.int32, trainable=False, name="global_step")
# 追蹤該模型的所有輸出隨時間的累加和
total_output= tf.Variable(0.0, dtype=tf.float32, trainable=False, name="total_output")
with tf.name_scope("transformation"):
# 獨立的輸入層
with tf.name_scope("input"):
a = tf.placeholder(tf.float32, shape=[None], name="input_placeholder_a")
# 獨立的中間層
with tf.name_scope("intermediate_layer"):
b = tf.reduce_prod(a, name="product_b")
c = tf.reduce_sum(a, name="sum_c")
# 獨立的輸出層
with tf.name_scope("output"):
output = tf.add(b, c, name="output")
with tf.name_scope("update"):
# 用最新的輸出更新
update_total = total_output.assign_add(output)
# global_step增1
increment_step = global_step.assign_add(1)
with tf.name_scope("summaries"):
avg = tf.div(update_total, tf.cast(increment_step, tf.float32), name="average")
# 為輸出節點建立彙總資料
tf.summary.scalar(b'Output', output)
tf.summary.scalar(b'Sum of outputs over time', update_total)
tf.summary.scalar(b'Average of outputs over time', avg)
with tf.name_scope("global_ops"):
init = tf.initialize_all_variables()
merged_summaries = tf.merge_all_summaries()
sess = tf.Session(graph=graph)
writer = tf.summary.FileWriter("./improved_graph", graph)
sess.run(init)
def run_graph(input_tensor):
feed_dict = {a: input_tensor}
_, step, summary = sess.run([output, increment_step, merged_summaries], feed_dict=feed_dict)
writer.add_summary(summary, global_step=step)
run_graph([2,8])
run_graph([3,1,3,3])
run_graph([8])
run_graph([1,2,3])
run_graph([11,4])
run_graph([4,1])
run_graph([7,3,1])
run_graph([6,3])
run_graph([0,2])
run_graph([4,5,6])
writer.flush()
writer.close()
sess.close()
相關文章
- 面向機器智慧的TensorFlow實戰4:機器學習基礎機器學習
- 面向機器智慧的TensorFlow實戰1:安裝
- 面向機器智慧的TensorFlow實戰7:詞向量嵌入
- 面向機器智慧的TensorFlow實戰8:序列分類
- 面向機器智慧的TensorFlow實戰5:目標識別與分類
- 面向機器智慧的TensorFlow實戰6:迴圈神經網路與自然語言處理神經網路自然語言處理
- TensorFlow 計算與智慧基礎
- TensorFlow技術解析與實戰 4 基礎知識
- tensorflow(一):基礎
- tensorflow基礎概念
- tensorflow基礎版
- 基於TensorFlow的深度學習實戰深度學習
- TensorFlow2基礎:CNN影像分類CNN
- Tensorflow-基礎使用
- TensorFlow 實戰:Neural Style
- TensorFlow釋出面向JavaScript開發者的機器學習框架TensorFlow.jsJavaScript機器學習框架JS
- 3.2 Tensorflow基礎運算
- JB的Python之旅-人工智慧篇-TensorFlow基礎概念Python人工智慧
- 【深度學習-基於Tensorflow的實戰】公開課實況深度學習
- 面向初學者的快速入門tensorflow
- Tensorflow-keras 理論 & 實戰Keras
- tensorflow的各種坑 tensorflow1.x 與 tensorflow2.x
- TensorFlow系列專題(二):機器學習基礎機器學習
- TensorFlow系列專題(一):機器學習基礎機器學習
- 基於滴滴雲虛擬機器的TensorFlow搭建與使用虛擬機
- Tensorflow教程(2)Tensorflow的常用函式介紹函式
- 人工智慧實踐:Tensorflow2.0 新手筆記(2)人工智慧筆記
- Tensorflow2
- 深度學習:TensorFlow入門實戰深度學習
- TensorFlow實現seq2seq
- 深度學習之tensorflow2實戰:多輸出模型深度學習模型
- 人工智慧實踐:Tensorflow筆記:程式碼總結(2)人工智慧筆記
- Tensorflow搞一個聊天機器人機器人
- 【Tensorflow_DL_Note7】Tensorflow實現卷積神經網路(2)卷積神經網路
- 谷歌全attention機器翻譯模型Transformer的TensorFlow實現谷歌模型ORM
- seq2seq通俗理解----編碼器和解碼器(TensorFlow實現)
- TensorFlow模型部署到伺服器---TensorFlow2.0模型伺服器
- 《深度學習——基於Tensorflow的實戰》公開課語音直播預告深度學習