tf.nn.embedding_lookup()
# tf.nn.embedding_lookup(
# params, 表示完整的嵌入張量,或者除了第一維度之外具有相同形狀的P個(gè)張量的列表导饲,表示經(jīng)分割的嵌入張量
# ids, 一個(gè)類型為int32或int64的Tensor氯材,包含要在params中查找的id
# partition_strategy='mod',指定分區(qū)策略的字符串,如果len(params)> 1袋毙,則相關(guān)冗尤。當(dāng)前支持“div”和“mod”。 默認(rèn)為“mod”
# name=None, 操作名稱(可選)
# validate_indices=True, 是否驗(yàn)證收集索引
# max_norm=None) 如果不是None皆看,嵌入值將被l2歸一化為max_norm的值
import tensorflow as tf
import numpy as np
c = np.random.random([5,1])
# 隨機(jī)生成一個(gè)5*1的數(shù)組
b = tf.nn.embedding_lookup(c, [1, 3])
# 查找數(shù)組中的序號(hào)為1和3的
with tf.Session() as sess:
sess.run(tf.global_variables_initializer())
print(sess.run(b))
print(c)
tf.Graph() 和tf.Session()
tf.Graph()表示實(shí)例化一個(gè)用于tensorflow計(jì)算和表示用的數(shù)據(jù)流圖腰吟,不負(fù)責(zé)運(yùn)行計(jì)算徙瓶。通俗來講就是:在代碼中添加的操作(畫中的結(jié)點(diǎn))和數(shù)據(jù)(畫中的線條)都是畫在紙上的“畫”嫉称,而圖就是呈現(xiàn)這些畫的紙灵疮,你可以利用很多線程生成很多張圖始藕,但是默認(rèn)圖就只有一張。
tf.Session() 主要用于執(zhí)行網(wǎng)絡(luò)。所有關(guān)于神經(jīng)網(wǎng)絡(luò)的計(jì)算都在這里進(jìn)行剩胁,它執(zhí)行的依據(jù)是計(jì)算圖或者計(jì)算圖的一部分,同時(shí)晾腔,會(huì)話也會(huì)負(fù)責(zé)分配計(jì)算資源和變量存放啊犬,以及維護(hù)執(zhí)行過程中的變量。
# 默認(rèn)計(jì)算圖上的操作
a = tf.constant([1.0, 2.0])
b = tf.constant([2.0, 3.0])
result = a + b
# 定義兩個(gè)計(jì)算圖
g1 = tf.Graph()
g2 = tf.Graph()
# 在g1中定義張量和操作
with g1.as_default():
a = tf.constant([1.0, 1.0])
b = tf.constant([1.0, 1.0])
result1 = a + b
# 在g2中定義張量和操作
with g2.as_default():
a = tf.constant([2.0, 2.0])
b = tf.constant([2.0, 2.0])
result2 = a + b
# 創(chuàng)建會(huì)話
with tf.Session(graph=g1) as sess:
out = sess.run(result1)
print(out)
with tf.Session(graph=g2) as sess:
out = sess.run(result2)
print(out)
with tf.Session(graph=tf.get_default_graph()) as sess:
out = sess.run(result)
print(out)
tf.random_normal_initializer()
tf.random_normal_initializer(mean=0.0, stddev=1.0, seed=None, dtype=tf.float32)
#生成具有正態(tài)分布的張量的初始化器
tf.get_variable()
# tf.get_variable(name,shape峻贮,dtype应闯,initializer,trainable)
# name:名稱
# shape:數(shù)據(jù)形狀。
# dtype:數(shù)據(jù)類型船万。常用的tf.float32骨田,tf.float64等數(shù)值類型
# initializer:初始化值∈⒊牛可以使用各種初始化方法
# trainable:是否訓(xùn)練變量抵卫。bool類型:True訓(xùn)練胎撇,F(xiàn)alse不訓(xùn)練
a1 = tf.get_variable(name='a1', shape=[2,3], initializer=tf.random_normal_initializer(mean=0, stddev=1))
a2 = tf.get_variable(name='a2', shape=[1], initializer=tf.constant_initializer(1))
a3 = tf.get_variable(name='a3', shape=[2,3], initializer=tf.ones_initializer())
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
print (sess.run(a1))
print (sess.run(a2))
print (sess.run(a3))
#initializer 初始化方法
#tf.constant_initializer:常量初始化函數(shù)
#tf.random_normal_initializer:正態(tài)分布
#tf.truncated_normal_initializer:截取的正態(tài)分布
#tf.random_uniform_initializer:均勻分布
#tf.zeros_initializer:全部是0
#tf.ones_initializer:全是1
#tf.uniform_unit_scaling_initializer:滿足均勻分布殖氏,但不影響輸出數(shù)量級(jí)的隨機(jī)值
tf.reduce_sum()
張量沿著某一個(gè)維度的和
#tf.reduce_sum(
# input_tensor, 待求和tensor
# axis=None, 指定的維度雅采,如果不指定,則計(jì)算所有元素的和
# keepdims=None, 是否保持原有張量的維度宝鼓,設(shè)置為True巴刻,結(jié)果保持輸入tensor的形狀,設(shè)置為False沥寥,結(jié)果會(huì)降低維度柠座,如果不傳入這個(gè)參數(shù),則系統(tǒng)默認(rèn)為False;
# name=None, 操作的名稱;
# keepdims=None) 是否保持原張量的維度
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
u=tf.reduce_sum(v,axis=1)
print(sess.run(u))
其他類似函數(shù)
tf.reduce_mean():計(jì)算tensor指定軸方向上的所有元素的平均值;
tf.reduce_max():計(jì)算tensor指定軸方向上的各個(gè)元素的最大值狂塘;
tf.reduce_all():計(jì)算tensor指定軸方向上的各個(gè)元素的邏輯和(and運(yùn)算)荞胡;
tf.reduce_any():計(jì)算tensor指定軸方向上的各個(gè)元素的邏輯或(or運(yùn)算);
tf.add_n()
tf.add_n() 將list中的數(shù)值相加
import tensorflow as tf
x = tf.constant([2,4])
sess = tf.Session()
print(sess.run(tf.add_n([x, x])))
# [ 4 8 ]