【Tensorflow_DL_Note4】Tensorflow中的常量、變數和資料型別的結構
一 Tensorflow資料模型---張量
Tensorflow用【張量:Tensor】這種資料結構來表示所有的資料,我們可以將一個張量想象成一個n維的陣列或列表。而一個張量有一個【靜態型別】和【動態型別】的【維數】,Tensor可以在圖中的節點Node之間流通。
因此,基於這種特殊的資料和處理方式,Tensorflow中的資料型別也會因此而隨之改變,常規的資料型別並不適合Tensorflow框架的使用。Tensorflow本身定義了一套特殊的函式,能夠根據需要將不同的量設定成所需要的形式。
二 Tensor:張量的概念
從Tensorflow的名字就可以看出Tensor:張量在Tensorflow這個【程式設計系統】中是一個非常重要的概念。在Tensorflow的程式中,所有的資料都是通過Tensor的形式來表示。
【1】從功能上看,Tensor可以被簡單的理解為【多維陣列】,其中零階Tensor表示標量scalar,也就是一個數;一階張量為向量(vector),也就是一個一維陣列;n階Tensor可以理解為一個n維陣列。但是,Tensor在Tensorflow中的實現,並不是直接採用陣列的形式,它只是對Tensorflow運算結果的【引用,C++中的引用,也就是說,這個Tensor對應的並不是一個真正的記憶體 空間,而是另一個記憶體空間的別名,稍微有點類似指標的意思】。也就是說,Tensorflow在張量Tensor中,並沒有儲存真正的資料,因為Tensor是一個引用,而不是一個變數,系統並沒有為Tensor開闢真正可以儲存資料的記憶體空間。Tensor儲存的是如何得到這些資料的計算過程。還是以【向量加法】為例,當執行程式碼的時候,並不會得到加法的結果,而會得到對結果的一個引用。
#coding=UTF-8
#========================================================================================================
#檔案說明:
# Tensorflow的【常量】、【變數】和【資料型別】
#開發環境:
# Win10+Tensorflow+OpenCv_python3.4+PyCharm5.0.3+Python3.5
#時間地點:
# 陝西師範大學.文津樓 2018.4.17
#作 者:
# 馬衛飛
#========================================================================================================
import tensorflow as tf
a = tf.constant([1.0,2.0],name="a")
b = tf.constant([2.0,3.0],name="b")
result = tf.add(a,b,name="add")
print(result)
三 Tensorflow中的常量、變數和佔位符
1 Tensorflow中的[常量]的建立-----tf.constant()
#========================================================================================================
#【1】首先是,對Tensorflow包的匯入
#【2】這裡將Tensorflow包匯入到系統,這樣便可以使得在後續的程式設計過程中,直接使用現成的Tensorflow包,為了便於使用,將其重
# 新命名為tf
import tensorflow as tf
#【1】Tensorflow中【常量】的【建立方法】如下所示,其中‘Hello Tensrflow’是常量的初始值;tf.string是常量型別,在平時編
# 寫的過程中可以省略
hello = tf.constant('Hello Tensorflow!',dtype=tf.string)
#【2】這裡建立了一個以【常數】為底的初始值,省略了tf.int的常量型別
a = tf.constant(1)
2 Tensorflow中的[變數]的建立-----tf.Variable()
在深度學習框架Tensorflow中,變數(tf.Variable)的作用就是【儲存】和【更新】神經網路的【引數】。和其他程式語言類似,Tensorflow中的Variabel也需要指定初始化值。因為,在神經網路中,給引數賦予初始值最為常見,所以,一般也使用隨機數給Tensorflow中的變數初始化。
首先,我們看一下Tensorflow中變數的建立,此塊,我們是呼叫了Tensorflow中變數的宣告函式tf.Variable()來建立的變數,如下所示:
#========================================================================================================
#檔案說明:
# Tensorflow中【變數】的建立
#========================================================================================================
import tensorflow as tf
a = tf.variable(1.0,dtype=tf.float32)
b = tf.Variable(1.0,dtype=tf.float32)
然後,我們看一下,神經網路中,引數的定義和引數的初始化方法,如下所示:
#========================================================================================================
#模組說明:
# 【1】此塊也是呼叫了Tensorflow中【變數的宣告函式】tf.Variable,在宣告函式中,給出了初始化這個變數的方法。
# 【2】Tensorflow中,變數的初始化值可以設定成【隨機數】、【常數】或者是通過其他變數的初始值計算得到的。
# 【3】在下面的程式中,tf.random_normal([2,3],stddev=2)函式會產生一個2*3的矩陣,矩陣中的元素是均值為0,標準
# 差為2的隨機數
# 【4】tf.random_normal函式可以通過引數mean來指定平均值,在沒有指定時,預設為0.通過滿足【正態分佈】的【隨機數】
# 來初始化神經網路中的引數是一個非常常用的方法。
# 【5】除了正太分佈的隨機數,Tensorflow還提供了一些其他的隨機數生成器。
# [1]tf.random_normal-----------正太分佈----------平均值、標準差、取值型別
# [2]tf.random_uniform----------平均分佈----------最小,最大取值,取值型別
# [3]tf.random_gamma------------Gamma分佈---------形狀引數alpha、尺度引數beta、取值型別
#========================================================================================================
import tensorflow as tf
weights = tf.Variable(tf.random_normal([2,3],stddev=2))
#========================================================================================================
# 【6】Tensorflow也支援通過【常數】來初始化一個變數。下面給出了Tensorflow中常數/常量的生成函式,如下所示:
# [1]tf.zeros---------產生全0的陣列--------tf.zeros([2,3],int32)
# [2]tf.ones----------產生全1的陣列--------tf.ones([2,3],int32)
# [3]tf.fill----------產生一個全部為指定數字的陣列----tf.fill([2,3],9)
# [4]tf.constant------產生一個給定值得常量
# 【7】在神經網路中,偏置項bias通常會使用【常數】來設定初始化,下面給出一個程式碼的樣例:
#========================================================================================================
biases = tf.Variable(tf.zeros([3]))
#========================================================================================================
# 【8】這段程式碼將會生成一個初始值全為0,且長度為3的變數
# 【9】除了使用【隨機數】和【常數】,Tensorflow也支援通過其他的變數來初始化新的變數。如下程式碼所示:
#========================================================================================================
w2 = tf.Variable(weights.initialized_value()) #[1]使用weights變數的值初始化w2,但必須藉助這個函式才可以
w3 = tf.Variable(weights.initialized_value()*2.0)
#========================================================================================================
# 【10】在上面的程式碼中,w2的初始值被設定成了與weights變數相同;w3的初始值被設定成了weights的兩倍
# 【11】在Tensorflow中,一個變數的值在被使用之前,這個變數的初始化過程需要被明確的呼叫
#========================================================================================================
3 Tensorflow中的[佔位符]的建立-----tf.placeholder
#========================================================================================================
#檔案說明:
# Tensorflow中【佔位符】
#詳細說明:
# 【1】除了一般框架中常見的【資料常量】和【資料變數】外,Tensorflow還存在另外一種特殊的【資料型別】,【佔位符】,
# placeholder;因為Tensorflow特殊的【資料計算】和【處理形式】,圖進行計算的時候,可以從外界傳入數值。而
# Tensorflow並不能直接對傳入的資料進行處理,因此,使用placeholder保留一個資料的位置,之後可以在Tensorflow
# 會話執行的時候進行賦值。
# 【2】tf.placeholder是佔位符的函式,其中的引數是傳入的資料型別,這裡可以看到,當定義一個引數是tf.float32時,
# 傳入的引數也必須是float32型別,如果傳入其他型別的引數,系統就會報錯。
# 【3】如下面的程式所示,input1和input2是2個int型別的佔位符,此時,資料並不能直接發生改變,而是在會話進行的過程
# 中,不停的填入資料集中進行資料的處理。
# 【4】這塊有個和有意思的例子,我們可以將這一過程想象成馬克沁重機槍,機槍平時裡面不儲存彈藥,只有在開火的時候,才
# 源源不斷的維機槍送入子彈。
# 【5】同理,佔位符placeholder平時只是作為一個空的Tensor在Tensorflow的圖中構成一個邊,只有當圖完全啟動後,才
# 有真實的資料被填入和計算。
#Tensorflow中幾種常用的函式:
# 【1】tf.add(x,y,name=None) 求和
# 【2】tf.sub(x,y,name=None) 減法
# 【3】tf.mul(x,y,name=None) 乘法
# 【4】tf.div(x,y,name=None) 除法
# 【5】tf.mod(x,y,name=None) 求模
# 【6】tf.abs(x,name=None) 求絕對值
# 【7】tf.neg(x,name=None) 求負
#========================================================================================================
import tensorflow as tf
input1 = tf.placeholder(tf.int32)
input2 = tf.placeholder(tf.int32)
output = tf.add(input1,input2)
sess = tf.Session()
print(sess.run(output,feed_dict={input1:[1],input2:[2]}))
相關文章
- 大樓的基石 資料型別 變數與常量資料型別變數
- C語言-變數常量資料型別C語言變數資料型別
- Java第三天【變數、常量、資料型別】Java變數資料型別
- 強型別語言變數和資料型別的理解變數資料型別
- python—資料型別和變數Python資料型別變數
- JS 中普通物件資料型別的基本結構和操作JS物件資料型別
- PLC結構化文字(ST)——變數型別和變數屬性變數型別
- TypeScript入門1:註釋、變數常量、資料型別、函式TypeScript變數資料型別函式
- 從零開始學GO ---- (1) 變數、常量、基本資料型別Go變數資料型別
- 逍遙自在學C語言 | 變數、常量與資料型別C語言變數資料型別
- JavaScript中的變數、資料型別以及運算子JavaScript變數資料型別
- 第八章:變數、常量和基礎型別變數型別
- 資料型別,變數資料型別變數
- SSIS 資料型別 第二篇:變數的資料型別資料型別變數
- pycharm的基本使用 、 Python的註釋語法,變數,常量,垃圾回收機制,資料型別PyCharmPython變數資料型別
- 1、變數和簡單資料型別變數資料型別
- python:變數和簡單資料型別Python變數資料型別
- Solidity-變數和資料型別[複合型別_1]Solid變數資料型別
- 資料結構中樹和森林的區別資料結構
- 分析 JavaScript 的資料型別與變數JavaScript資料型別變數
- c++中的變數型別_C ++中的變數C++變數型別
- [打牢基礎系列]JavaScript的變數和資料型別JavaScript變數資料型別
- pytorch和tensorflow的愛恨情仇之基本資料型別PyTorch資料型別
- Java雜記1—資料型別和變數Java資料型別變數
- 可變資料型別(mutable)與不可變資料型別(immutable)總結資料型別
- Java中的不可變資料結構Java資料結構
- 資料結構中抽象資料型別是什麼?資料結構抽象資料型別
- JavaScript中的樹型資料結構JavaScript資料結構
- Java基本資料型別總結、型別轉換、常量的宣告規範,final關鍵字的用法Java資料型別
- 修改全域性變數時,可變型別和不可變型別的區別變數型別
- 二、變數與資料型別變數資料型別
- 《JavaScript 闖關記》之變數和資料型別JavaScript變數資料型別
- php變數的型別是如何轉換的?常量如何定義?系統常量是如何定義的?PHP變數型別
- java常量和變數Java變數
- TensorFlow常量、變數和佔位符詳解(學習筆記)變數筆記
- 《Java核心技術 卷I》學習筆記2:資料型別、變數與常量Java筆記資料型別變數
- Python自學02day——變數和簡單的資料型別Python變數資料型別
- mysql儲存資料,varchar型別中的資料變成了科學計數法?MySql型別