Tensorflow深度學習筆記1 基礎知識

2021-10-14 05:32:37 字數 4397 閱讀 4199

變數

# 將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...