1. 程式人生 > >tensorflow入門(二) 變數的定義、初始化、值的檢視

tensorflow入門(二) 變數的定義、初始化、值的檢視

1、常量

constant是TensorFlow的常量節點,通過constant方法建立,其是計算圖(Computational Graph)中的起始節點,是傳入資料;

import tensorflow as tf
sess = tf.InteractiveSession()# 直接構建預設的會話
cons1 = tf.constant([1, 2, 3], shape=[2, 3])
# 張量本身不儲存具體的數字
print(sess.run(cons1))#
#通過sess.run,得到具體的數字 
# [[1 2 3]
#  [3 3 3]]
**引數說明:**
def constant(value, dtype=None, shape=None, name="Const"
, verify_shape=False) value:初始值,必填 必須是一個張量(1或[1,2,3]或[[1,2,3],[2,2,3]]或......) dtype:資料型別,選填,預設為value的資料型別 傳入引數為tensorflow下的列舉值(float32,float64.......) shape:資料形狀,選填,預設為value的shape, 設定時不得比value小,可以比value階數、維度更高,超過部分按value提供最後一個數字填充, name:常量名,選填,預設值不重複,根據建立順序為(Const,Const_1,Const_2.......) verify_shape:是否驗證value的shape和指定shape相符,若設為True則進行驗證,不相符時會丟擲異常

2、placeholder

如果訓練網路時候,每輪迭代中,選取的資料都通過常量表示,計算圖會很大。Tensorflow提供placeholder 機制使用者提供輸入資料,placeholder相當於定義了一個位置,這個位置中的資料,在程式執行時候再指定,這樣程式中不需要生成大量常量來提供輸入資料;只需要通過placeholder傳入計算圖;

placeholder是TensorFlow的佔位符節點,由placeholder方法建立,其也是一種常量,但是由使用者在呼叫run方法是傳遞的,也可以將placeholder理解為一種形參。即其不像constant那樣直接可以使用,需要使用者傳遞常數值

用於宣告一個張量的資料格式,告訴系統這裡會有一個這種格式的張量,但是還沒有給出具體數值,具體數值在正式執行時候給; 是一種TensorFlow用來解決讀取大量訓練資料問題的機制,它允許你現在不用給它賦值,隨著訓練的開始,再把訓練資料傳送給訓練網路學習。

import tensorflow as tf
import numpy.random as random
node1 = tf.placeholder(tf.float32)  # , shape=[4, 5])
#佔位符shape不設時會按傳入引數自行匹配
node2 = tf.placeholder(tf.float32)  # , shape=[4, 5])
op = tf.multiply(node1, node2)
session = tf.Session()  # 啟動會話

const1 = tf.constant(random.rand(4, 5))
const2 = tf.constant(random.rand(4, 5))
#可以傳入初始化後的常量
print(session.run(op, {node1: session.run(const1), node2: session.run(const2)}))
#也可以直接傳入張量,其實同初始化後的常量一致
print(session.run(op, {node1: random.rand(2, 3), node2: random.rand(2, 3)}))
**引數說明**

def placeholder(dtype, shape=None, name=None)

dtype:資料型別,必填,預設為value的資料型別,傳入引數為tensorflow下的列舉值(float32,float64.......)

shape:資料形狀,選填,不填則隨傳入資料的形狀自行變動,可以在多次呼叫中傳入不同形狀的資料

name:常量名,選填,預設值不重複,根據建立順序為(Placeholder,Placeholder_1,Placeholder_2.......

3、Vatiable

Vatiable是tensorflow的變數節點,通過Variable(注:V大寫)方法建立,並且需要傳遞初始值。在使用前需要通過tensorflow的初始化方法進行初始化。變數的作用是儲存和更新神經網路中的引數;tensorflow中的變數包括網路引數、輸出值(一般用placeholder佔位符定義)等

W = tf.Variable(tf.zeros([9, 5])
**引數說明**

(initial_value=None,
trainable=True, collections=None, 
validate_shape=True,  caching_device=None,
name=None, variable_def=None,
dtype=None, expected_shape=None, import_scope=None)

初始值:必填,初始值必須有指定一個形狀,除非`validate_shape`設定為False。

dtype=tf.float32, # 如果設定,initial_value將被轉換為給定的型別。如果`None',資料型別將被儲存(如果`initial_value`是一個張量),或者“convert_to_tensor”來決定。
expected_shape=None,  # 張量的Shape。如果設定,initial_value需要符合這個形狀。

3、張量轉換reshape

reshape():將原始張量轉換為shape指定的形式; tf.reshape(tensor, shape, name=None) (shape中-1,說明不用顯示指定這一維的大小,函式自動計算)

lable = [1,2,3,4,5,6,7,8]
reshape1 = tf.reshape(lable,shape = [2,-1])
reshape2 = tf.reshape(lable,shape = [2,4])

4、初始化張量的方法

tf.ones()
tf.zeros()
tf.random_normal
tf.random_uniform