Tensorflow常用函數說明


1.矩陣操作

1.1矩陣生成

這部分主要將如何生成矩陣,包括全0矩陣,全1矩陣,隨機數矩陣,常數矩陣等

sess=tf.InteractiveSession()
#x=tf.ones([2,3],tf.int32)
x=tf.zeros([2,3],tf.int32)
print (sess.run(x))

新建一個與給定的tensor類型大小一致的tensor,使其所有元素為0和1

sess=tf.InteractiveSession()
tensor=[[1,2,3],[4,5,6]]
#x=tf.ones_like(tensor)
x=tf.zeros_like(tensor)
print (sess.run(x))

創建一個形狀大小為shape的tensor,初始值為value

sess=tf.InteractiveSession()
x=tf.fill([2,3],2)
print (sess.run(x))

創建一個常量tensor,按照給出value來賦值,可以用shape來指定其形狀。value可以是一個數,也可以是一個list。 
如果是一個數,那么這個常量中所有值的按該數來賦值。 
如果是list,那么len(value)一定要小於等於shape展開后的長度。賦值時,先將value中的值逐個存入。不夠的部分,則全部存入value的最后一個值。

sess=tf.InteractiveSession()
#x=tf.constant(2,shape=[2,3])
x=tf.constant([2,3],shape=[2,3])
print (sess.run(x))

random_normal:正態分布隨機數,均值是mean,標准差是stddev

truncated_normal:截斷正態分布隨機數,均值是mean,標准差是stddev,只保留[mean-2*stddev,mean+2*stddev]范圍內的隨機數

random_uniform:均勻分布隨機數,范圍為[minval,maxval]

sess=tf.InteractiveSession()
x=tf.random_normal(shape=[1,5],mean=0.0,stddev=1.0,dtype=tf.float32)
print (sess.run(x))
tf.get_variable(name, shape=None, dtype=dtypes.float32, initializer=None,
                 regularizer=None, trainable=True, collections=None,
                 caching_device=None, partitioner=None, validate_shape=True,
                 custom_getter=None):

如果在該命名域中之前已經有名字=name的變量,則調用那個變量;如果沒有,則根據輸入的參數重新創建一個名字為name的變量。

initializer為初始化工具,有tf.zero_initializer,tf.ones_initializer,tf.constant_initializer,tf.random_uniform_initializer,tf.random_normal_initializer,tf.truncated_normal_initializer

1.2 矩陣變換

tf.shape(Tensor)

返回張量的形狀。但是注意,tf.shape函數本身也是返回一個張量。而在tf中,張量是需要用sess.run(Tensor)來得到具體的值的。

sess=tf.InteractiveSession()
x=[[1,2,3],[4,5,6]]
shape=tf.shape(x)
print (shape)
print (sess.run(shape))

Tensor("Shape:0", shape=(2,), dtype=int32)
[2 3]

tf.expand_dims(Tensor,dim)

為張量增加一個維度

sess=tf.InteractiveSession()
x=[1,2,3]
y=tf.expand_dims(x,1)
print (sess.run(y))

[[1]
 [2]
 [3]]

#y=tf.expand_dims(x,0)
[[1,2,3]]

tf.pack()

將一個R維張量列表沿着axis軸組合成一個R+1維的張量。

x=[1,4]
y=[2,5]
z=[3,6]
t=tf.stack([x,y,z],1)
print (sess.run(t))

[[1 2 3]
 [4 5 6]]

tf.concat(concat_dim,values)將張量沿着指定的維數拼接起來。

tf.sparse_to_dense()將稀疏矩陣轉化為密集矩陣

def sparse_to_dense(sparse_indices,
                    output_shape,
                    sparse_values,
                    default_value=0,
                    validate_indices=True,
                    name=None):

sparse_indices: 元素的坐標[[0,0],[1,2]] 表示(0,0),和(1,2)處有值 
output_shape: 得到的密集矩陣的shape 
sparse_values: sparse_indices坐標表示的點的值,可以是0D或者1D張量。若0D,則所有稀疏值都一樣。若是1D,則len(sparse_values)應該等於len(sparse_indices) 
default_values: 缺省點的默認值

tf.random_shuffle(value)

沿着value的第一維進行隨機重新排列。

tf.argmax|tf.argmin(input=tensor,dimension=axis)

找到給定的張量tensor在指定軸axis上的最大值/最小值的位置。

tf.equal(x,y)

判斷兩個tensor是否每個元素都相等。

tf.cast(x,dtype)

將x的數據格式轉化為dtype。

tf.matmul(a,b,transpose_a=False,transpose_b=False,a_is_parse=False,b_is_sparse=False)

如果對應的transpose項為True,例如transpose_a=True,那么a在參與運算之前就會先轉置一下。 
而如果a_is_sparse=True,那么a會被當做稀疏矩陣來參與運算。

tf.reshape(tensor,shape)

如果shape=[-1],表示將tensor展開成一個list。

2. 神經網絡相關操作

tf.nn.embedding_lookup(params,ids)

簡單來說,就是講一個數字序列ids轉化成embedding序列表示。

tf.trainable_variables()

返回所有可以訓練的變量。

tf.gradients(ys,xs)

ys和xs都可以是一個tensor或者tensor列表。而計算完成以后,該函數會返回一個長為len(xs)的tensor列表,列表中的每個tensor是ys中每個值對xs[i]求導之和。

tf.clip_by_global_norm(t_list,clip_norm)

修正梯度值,用於控制梯度爆炸的問題。梯度爆炸和梯度彌散的原因一樣,都是因為鏈式法則求導的關系,導致梯度的指數級衰減。為了避免梯度爆炸,需要對梯度進行修剪。

t_list為待修剪的張量,clip_norm表示修剪比例,函數返回兩個參數:list_clipped,修剪后的張量,以及global_norm,一個中間計算量。

list_clipped[i]=t_list[i] * clip_norm / max(global_norm, clip_norm),其中 
global_norm = sqrt(sum([l2norm(t)**2 for t in t_list]))

tf.nn.dropout(x,keep_prob)

按照概率將x中的一些元素置0,並將其他的值放大。x是一個張量,而keep_prob是一個(0,1]之間的值。x中的各個元素清零的概率互相獨立,為1-keep_prob,而沒有清零的元素,則會統一乘以1/keep_prob, 目的是為了保持x的整體期望值不變。

3.普通操作

tf.linspace|tf.range

tf.linspace(start,stop,num)

在[start,stop]的范圍內產生num個數的等差數列,start和stop要用浮點數進行表示。

tf.range(start,limit=None,delta=1) 在[start,limit)范圍內以步進值delta產生等差數列。

tf.assign(ref,value)

用來更新模型中變量的值,ref是待賦值的變量,value是更新的值。

4.規范化

tf.variable_scope

為變量添加命名域

with tf.variable_scope("foo"):

tf.get_variable_scope()返回當前變量的命名域。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM