1. 程式人生 > 程式設計 >TensorFlow基本的常量、變數和運算操作詳解

TensorFlow基本的常量、變數和運算操作詳解

簡介

深度學習需要熟悉使用一個框架,本人選擇了TensorFlow,一邊學習一邊做專案,下面簡要介紹TensorFlow中的基本常量、變數和運算操作,參考斯坦福大學的cs20si和TensorFlow官網API。

常量

tf.constant()

tf.constant(value,dtype=None,shape=None,name='Const',verify_shape=False),value為值,dtype型別,shape為張量形狀,name名稱、verify_shape預設False,這些項可選。作用建立一個常量。

a = tf.constant(2,name="a") # print(a) = 2
b = tf.constant(2.0,dtype=tf.float32,shape=[2,2],name="b") # 2x2矩陣,值為2
c = tf.constant([[1,[3,4]],name="c") # 2x2矩陣,值1,2,3,4

tf.zeros()和tf.zeros_like()

tf.zeros(shape,name=None),shape為張量形狀,dtype型別,name名稱。建立一個值為0的常量。

a = tf.zeros(shape=[2,3],dtype=tf.int32,name='a') # 2x3矩陣,值為0,a = [[0,0],[0,0]]

tf.zeros_like(input_tensor,name=None,optimize=True),input_tensor為張量,dtype型別,name名稱,optimize優化。根據輸入張量建立一個值為0的張量,形狀和輸入張量相同。

input_tensor = tf.constant([[1,4],[5,6])
a = tf.zeros_like(input_tensor) # a = [[0,0]]

tf.ones()和tf.ones_like()

tf.ones(shape,name=None),與tf.zeros()類似。

tf.ones_like(input_tensor,optimize=True),與tf.zeros_like()類似。

tf.fill()

tf.fill(dims,value,dims為張量形狀,同上述shape,vlaue值,name名稱。作用是產生一個張量,用一個具體值充滿張量。

a = tf.fill([2,8) # 2x3矩陣,值為8

tf.linspace()

tf.linspace(start,stop,num,name=None),start初始值,stop結束值,num數量,name名稱。作用是產生一個等差數列一維向量,個數是num,初始值start、結束值stop。

a = tf.linspace(10.0,13.0,4) # a = [10.0 11.0 12.0 13.0]

tf.range()

tf.range(start=0,limit=None,delta=1,name='range'),start初始值,limit限制,delta增量,dtype型別,name名稱。作用是產生一個等差數列的一維向量,初始值start,公差delta,結束值小於limit。

a = tf.range(start,limit,delta) # a = [3,6,9,12,15]
b = tf.range(5) # b = [0,1,4]

tf.random_normal()

tf.random_normal(shape,mean=0.0,stddev=1.0,seed=None,shape張量形狀,mean均值,stddev標準差,dtype型別,seed隨機種子,name名稱。作用是產生一個正太分佈分佈,均值為mean,標準差為stddev。

tf.truncated_normal()

tf.truncated_normal(shape,name=None),shape張量形狀,mean均值,stddev標準差,dtype型別,seed隨機種子,name名稱。作用是產生一個截斷的正太分佈,形狀為shape,均值為mean,標準差為stddev。

tf.random_uniform()

tf.random_uniform(shape,minval=0,maxval=None,name=None),shape張量形狀,minval最小值,maxval最大值,dtype型別,seed隨機種子,name名稱。作用是產生一個均勻分佈,形狀為shape,最小值為minval,最大值為maxval。

tf.random_shuffle()

tf.random_shuffle(value,name=None),value張量,seed隨機種子,name名稱。作用是將張量value裡面的值隨機打亂。

a = tf.constant([[1,name='a')
b = tf.random_shuffle(a,name='b') # b = [[2,[1,4]]

tf.random_crop()

tf.random_crop(value,size,value張量,size大小,seed隨機種子,name名稱。作用是將張量value隨機裁剪成size形狀大小的張量,value形狀大小>=size。

tf.multinomial()

tf.multinomial(logits,num_samples,logits張量,num_samples取樣輸出,seed隨機種子,name名稱。作用是根據概率分佈的大小,隨機返回對應維度的下標序號。

a = tf.constant([[1,4,1],3]],name='a')
b = tf.multinomial(a,name='b') # b = [0,0]或者[0,2]或者[4,4] 

tf.random_gamma()

tf.random_gamma(shape,alpha,beta=None,name=None)。作用是產生一個Gamma分佈。

變數

tf.Variable()

tf.Variable(<initial-value>,name=<optional-name>),變數可以根據直接賦值,如a、b、c,也可以根據建構函式賦值,如W、Z。

a = tf.Variable(2,name="scalar")
b = tf.Variable([2,name="vector")
c = tf.Variable([[0,[2,name="matrix")
W = tf.Variable(tf.zeros([784,10]),name="weights")
Z = tf.Variable(tf.random_normal([784,10],mean=0,stddev=0.01),name="Z"

tf.Variable().initializer

1.全域性變數初始化

init = tf.global_variables_initializer()
with tf.Session() as sess:
 sess.run(init)

2.指定變數初始化

W = tf.Variable(tf.truncated_normal([700,10]))
with tf.Session() as sess:
 sess.run(W.initializer)
 print(W) # Tensor("Variable/read:0",shape=(700,10),dtype=float32)

tf.Variable().eval()

返回變數值。

W = tf.Variable(tf.truncated_normal([700,10]))
with tf.Session() as sess:
 sess.run(W.initializer) 
 print(W.eval())
>> [[-0.76781619 -0.67020458 1.15333688 ...,-0.98434633 -1.25692499 -0.90904623]
 [-0.36763489 -0.65037876 -1.52936983 ...,0.19320194 -0.38379928
 0.44387451]
 [ 0.12510735 -0.82649058 0.4321366 ...,-0.3816964 0.70466036
 1.33211911]
 ...,[ 0.9203397 -0.99590844 0.76853162 ...,-0.74290705 0.37568584
 0.64072722]
 [-0.12753558 0.52571583 1.03265858 ...,0.59978199 -0.91293705
 -0.02646019]
 [ 0.19076447 -0.62968266 -1.97970271 ...,-1.48389161 0.68170643

tf.Variable.assign()

直接呼叫assign()並不起作用,它是一個操作,需要sess.run()操作才能起效果。

W = tf.Variable(10)
W.assign(100)
with tf.Session() as sess:
 sess.run(W.initializer)
 print(W.eval()) # >> 10
W = tf.Variable(10)
assign_op = W.assign(100)
with tf.Session() as sess:
 # sess.run(W.initializer) # 當變數有值的話,可以省略,不需要初始化
 sess.run(assign_op)
print W.eval() # >> 100

運算操作

運算操作圖

TensorFlow基本的常量、變數和運算操作詳解

tf.multiply()和tf.matmul()

tf.multiply(x,y,name)作用是x,y逐項相乘。

tf.matmul(x,name)作用是x,y矩陣相乘。

a = tf.constant([3,6])
b = tf.constant([2,2])
c1 = tf.matmul(a,b) # 報錯
c2 = tf.matmul(tf.reshape(a,2]),tf.reshape(b,1]))# c2 = [[18]]
c3 = tf.multiply(a,b) # c3 = [6,12]

加減就不細說了。

結束語

總結了一些常用的常量、變數和操作運算,供大家參考,尤其是對於tensorflow和python不太熟悉的選手有幫助,後續會補充更新,希望大家多多支援我們。