變數
# 將tensorflow1.x的
import tensorflow as tf
# 替換為
import tensorflow.compat.v1 as tf
tf.disable_eager_execution(
)# 強制使用cpu模式:
import os
os.environ[
"cuda_visible_devices"]=
"-1"
tensorflow是乙個通過計算圖的形式來表述計算的程式設計系統。
基於tensorflow這個程式設計系統中的每乙個計算都是計算圖上的乙個節點,而節點與節點之間的連線則代表計算之間的依賴關係。
在tensorflow程式中,系統會自動維護乙個預設的計算圖,可以通過tf.get_default_graph()函式獲取。以下**展示了如何獲取預設計算圖以及如何檢視乙個運算所屬的計算圖:
import tensorflow as tf
a=tf.constant(
[1.0
,2.0
], name=
'a')
# 定義乙個常量使用tf.constant方法
b=tf.constant(
[1.0
,2.0
], name=
'b')
result = a+b
# 通過a.graph可以檢視張量所屬的計算圖,如果沒有特別指定,則屬於當前預設的計算圖
print
(a.graph is tf.get_default_graph())
# 輸出為true
可以通過tf.graph函式生成新的計算圖。不同計算圖上的張量和運算都不會共享
g1=tf.graph(
)with g1.as_default():
# 在計算圖g1中定義變數'v',並設定初始值為0。
v=tf.get_variable(
'v',initializer=tf.zeros_initializer(
)(shape =[1
]))
g2=tf.graph(
)with g2.as_default():
# 在計算圖g2中定義變數'v',並設定初始值微1。
v=tf.get_variable(
'v',initializer=tf.ones_initializer(
)(shape =[1
]))# 在計算圖g1中讀取變數'v'的取值
with tf.session(graph=g1)
as sess:
tf.global_variables_initializer(
).run(
)with tf.variable_scope(
'',reuse=
true):
# 在計算圖g1中,變數'v'的取值應該為0,下一行**會輸出[0.]。
print
(sess.run(tf.get_variable(
'v')))
# 在計算圖g2中讀取變數'v'的取值
with tf.session(graph=g2)
as sess:
tf.global_variables_initializer(
).run(
)with tf.variable_scope(
'',reuse=
true):
# 在計算圖g2中,變數'v'的取值應該為1,下一行**會輸出[1.]。
print
(sess.run(tf.get_variable(
'v')
))
計算圖可以通過tf.graph.device函式來指定執行計算的裝置,下面**指定在gpu上執行加法計算:
g=tf.graph(
)# 指定計算執行的裝置。不過由於我使用的是cpu版本 所以沒有測試這段**
with g.device(
'/gpu:0'):
result=a+b
張量是運算結果的乙個引用。可以簡單的理解為乙個陣列,但是實際上其儲存的是運算結果的屬性。
# tf.constant是乙個計算,這個計算的結果為乙個張量,儲存在變數a中。
a=tf.constant(
[1.0
,2.0
], name=
'a')
b=tf.constant(
[1.0
,2.0
], name=
'b')
result = tf.add(a,b,name=
'add'
)print
(result)
'''輸出:tensor("add:0", shape=(2,), dtype=float32)
'''
張量儲存的是操作(op),維度(shape),資料型別
op屬性以「node:src_output」的形式表示,node表示節點的名稱,src_output表示當前張量來自節點的第幾個輸出。
還可以通過result.get_shape函式來獲取結果張量的維度資訊。預設資料型別:int32、float32
# 1、 建立乙個會話
with tf.session(
)as sess:
print
(sess.run(result)
)# tensorflow中需要手動指定缺省會話,當該會話指定後,可以通過tf.tensor.eval函式來計算乙個張量的取值。
# 2、 建立乙個預設的會話
sess=tf.session(
)with sess.as_default():
print
(result.
eval()
)# 3、 建立乙個會話
sess=tf.session(
)# 下面兩個命令等價
print
(sess.run(result)
)print
(result.
eval
(session=sess)
)# 在互動式環境下,使用設定缺省會話的方法來獲取張量的取值更加方便,tensorflow提供了一種在互動式環境下直接構建
# 缺省會話的函式,tf.interactivesession。該函式會自動將生成的會話註冊為缺省會話。
sess= tf.interactivesession(
)print
(result.
eval()
)sess.close(
)
變數的常用生成函式:書本p102
在tensorflow中,變數(tf.variable)的作用就是用來儲存和更新神經網路中的引數,在宣告變數的同時需要指定其初始值。
tensorflow中支援的隨機數生成器:
函式名稱
隨機數分布
tf.random_normal
正態分佈
tf.truncated_normal
正態分佈,但如果隨機出來的值偏離平均值超過2個標準差,那麼這個數將會被重新隨機
tf.random_uniform
平均分布
tensorflow也支援使用常數來初始化乙個變數,常用的常量生成函式如下表
函式名稱
功能 例項
tf.zeros
產生全0的陣列 tf.zeros([2,3],int32)->[[0,0,0],[0,0,0]]
tf.ones
產生全1的陣列 tf.ones([2,3],int32)->[[1,1,1],[1,1,1]]
tf.fill
產生乙個全部為給定數字的陣列 tf.fill([2,3],9)->[[9,9,9],[9,9,9]]
tf.constant
產生乙個給定值的常量 tf.constant([1,2,3])->[1,2,3]
import tensorflow as tf
# 生成乙個2*3的矩陣,矩陣中的元素均值為0,標準差為2。
weights=tf.variable(tf.random_normal([2
,3],stddev=2)
)# 生成乙個初始值全為0,長度為3的變數
biases=tf.variable(tf.zeros([3
]))# 使用其他變數的初始值來初始化新的變數
w2=tf.variable(weights.initialized_value())
w3=tf.variable(weights.initialized_value()*
2.0)
TensorFlow 深度學習筆記
google 深度學習筆記 經常總結是個好習慣,筆記目錄奉上。歡迎star,有問題可以到issue區討論 官方教程位址 最近tensorflow團隊出了乙個model專案,和這個課程無關,但是可以參考 框架 tensorflow 谷歌出品的基於python的深度學習工具集 工具 ipython,py...
TensorFlow深度學習框架
tensorflow支援python和c 兩種程式語言,再複雜的多層神經網路模型都可以用python來實現,如果業務使用其他程式設計也不用擔心,使用跨語言的grpc或者http服務也可以訪問使用tensorflow訓練好的智慧型模型。tensorflow 是乙個採用資料流圖 data flow gr...
深度學習 初識TensorFlow
深度學習使用場景 影象理解 語音識別 自然語言處理 機器自主 無人駕駛 深度學習,如深度神經網路 卷積神經網路和遞迴神經網路已被應用計算機視覺 語音識別 自然語言處理 音訊識別與生物資訊學等領域並取得了很好的效果。深度學習在人工智慧領域的地位 深度學習框架 google brain計畫產物 應用於a...