[tf]tf的數(shù)據(jù)類型

引用

tf.get_variable可以只指定一個(gè)name 就行了和initializer就行了,可以將shape放在initializer里面

self.ent_emb = tf.get_variable(name="ent_emb", initializer=tf.random_uniform(shape=[self.num_ent, self.params.emb_size], minval=-sqrt_size, maxval=sqrt_size))

variables

可以看到Variable之所以為Variable 就是沒(méi)有在用feed_dict賦值的話就是初始值(或者在assign的值)掏熬。

y = tf.Variable(1) #1是初始值
b = tf.identity(y)
with tf.Session() as sess:
    tf.global_variables_initializer().run()
    print(sess.run(b,feed_dict={y:3})) #使用3 替換掉
    print(sess.run(b))
>>3
1

v.initializer只是初始化v,tf.global_variables_initializer()就是調(diào)用所有variable的initializer函數(shù)

import tensorflow as tf
v = tf.Variable([1,2,3])   #創(chuàng)建變量v仲锄,為一個(gè)array
print(v)  #查看v的shape休蟹,不是v的值爽锥。結(jié)果是: <tf.Variable 'Variable:0' shape=(3,) dtype=int32_ref>
with tf.Session() as sess:
    sess.run(v.initializer)     #運(yùn)行變量的initializer。調(diào)用op之前,所有變量都應(yīng)被顯式地初始化過(guò)铺根。
    sess.run(v)     #查看v的值障涯,結(jié)果是:array([1, 2, 3])

variable的初始化罐旗,注意variable的初始化列表里面的都是表示初始值

r = tf.Variable(tf.random_normal([20, 10], stddev=0.35))     #以標(biāo)準(zhǔn)差0.35的正太分布初始化一個(gè)形狀為[20唯蝶,40]的張量
z = tf.Variable(tf.zeros([20]))  #初始化一個(gè)形狀為[20]的張量九秀, 里面的元素值全部為0.

創(chuàng)建變量還可以調(diào)用tf.get_variable 函數(shù)。要求指定變量的名稱粘我。此名稱將被其他副本用來(lái)訪問(wèn)同一變量鼓蜒,以及在檢驗(yàn)和導(dǎo)出模型時(shí)命名此變量的值。tf.get_variable 還允許您重用先前創(chuàng)建的同名變量征字,從而輕松定義重用層的模型都弹。

my_variable = tf.get_variable("my_variable", [1, 2, 3]) #這將創(chuàng)建一個(gè)名為“my_variable”的變量,該變量是形狀為 [1, 2, 3] 的三維張量
  • initial_value:變量的初始值可以是一個(gè)張量匙姜,或者是可轉(zhuǎn)換為張量的Python對(duì)象畅厢。
  • dtype:如果設(shè)置,initial_value將被轉(zhuǎn)換為給定的類型氮昧。如果為None框杜,數(shù)據(jù)類型將被保留(前提是initial_value是張量)浦楣,或者由convert_to_tensor決定。
Variable(
    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,
    constraint=None
)

Variable中的常用屬性和方法

  • .eval(session=None):對(duì)tensor進(jìn)行運(yùn)算咪辱,返回該tensor運(yùn)算后的numpy ndarray類型的復(fù)制樣本振劳。
  • .get_shape():==tensor.shape
  • .initialized_value():返回variable的初始值。
  • read_value():返回當(dāng)前的variable的值
  • .assign(value, use_locking=False):僅需要賦值

assign返回的是一個(gè)tensor Op油狂,所以并不是立即就給y賦值历恐,而是需要執(zhí)行了這個(gè)Op操作以后才能完成賦值操作,通過(guò)這樣的設(shè)置可以完成更為復(fù)雜的運(yùn)算专筷。

  • assign_add(delta, use_locking=False)
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
----------------
my_var = tf.Variable(2, name="my_var")

# assign a * 2 to a and call that op a_times_two

my_var_times_two = my_var.assign(2 * my_var) 
with tf.Session() as sess: 
    sess.run(my_var.initializer) 
    sess.run(my_var_times_two)  
    sess.run(my_var_times_two) 
    sess.run(my_var_times_two)  
>>4
8
16
-----------------------------

y = tf.Variable(1)
b = tf.identity(y)
addOp = y.assign(y+3)
with tf.Session() as sess:
     tf.global_variables_initializer().run()
     print(addOp.eval())
     print(addOp.eval())
--------
y = tf.Variable(1)
b = tf.identity(y)
addOp = y.assign(y+3)
x = tf.constant(1)
print(addOp)
print(b)
print(y)
print(x)
>>Tensor("Assign:0", shape=(), dtype=int32_ref)
Tensor("Identity:0", shape=(), dtype=int32)
<tf.Variable 'Variable:0' shape=() dtype=int32_ref>
Tensor("Const:0", shape=(), dtype=int32)
# Tensor("Assign")表示 Assign類型的op操作
# Tensor("Identity")表示是Identity類型的Op操作

tf.constant()

返回一個(gè)常量tensor

  • tf.zeros_like(tensor,) :表示和這個(gè)tensor的形狀一樣但是是全零向量弱贼。
  • tf.constant(value,):產(chǎn)生常量 Tensor, value 值可為 python 標(biāo)準(zhǔn)數(shù)據(jù)類型、Numpy 等仁堪,和variable不一樣了哮洽,第一個(gè)參數(shù)是值**。
  • tf.fill(shape,value):表示給一個(gè)shape填充值弦聂。
# 產(chǎn)生全 0 的張量
tf.zeros(shape, dtype=tf.float32, name=None)
tf.zeros_like(tensor, dtype=None, name=None)


# 產(chǎn)生全 1 的張量
tf.ones(shape, dtype=tf.float32, name=None)
tf.ones_like(tensor, dtype=None, name=None)


# Creates a tensor of shape  and fills it with value
tf.fill(shape, value, name=None)
tf.fill([2, 3], 9) ==> [[9, 9, 9]
                        [9, 9, 9]]


tf.constant(value, dtype=None, shape=None, name='Const')
tf.constant(-1.0, shape=[2, 3]) => [[-1., -1., -1.]  # Note: 注意 shape 的用法(廣播機(jī)制) 
                                    [-1., -1., -1.]]
tf.constant([1,2,3,4,5,6], shape=[2,3]) => [[1, 2, 3]
                                            [4, 5, 6]]

序列

  • tf.linspace(start,stop,num)產(chǎn)生 num 個(gè)等距分布在 [start, stop] 間元素組成的數(shù)組鸟辅,包括 start & stop (需為 float 類型)
  • tf.range([start], limit, delta=1, dtype=None, name='range'):[]為可選參數(shù),步長(zhǎng) delta 默認(rèn)為 1莺葫,start 默認(rèn)為 0, limit 的值取不到匪凉,它產(chǎn)生一個(gè)數(shù)字序列。tf.range(limit=5) # [0, 1, 2, 3, 4]捺檬。
# increase by (stop - start) / (num - 1)
tf.linspace(start, stop, num,, name=None)

tf.range([start], limit, delta=1, dtype=None, name='range')
# eg
tf.range(start=3, limit=18, delta=3)  # [3, 6, 9, 12, 15]
tf.range(limit=5)  # [0, 1, 2, 3, 4]

Random Tensors

  • tf.random_normal(shape,mean=0.0,dtype=tf.float32,): 正態(tài)分布再层,默認(rèn)均值為0,標(biāo)準(zhǔn)差為1.0堡纬,數(shù)據(jù)類型為float32聂受。
  • tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, ):截?cái)嗾植迹骄档木嚯x超過(guò)2倍標(biāo)準(zhǔn)差的隨機(jī)數(shù)將被丟棄烤镐,然后重新抽取蛋济,直到取得足夠數(shù)量的隨機(jī)數(shù)為止
  • seed:是設(shè)置抽樣的隨機(jī)種子數(shù)。
  • tf.random_shuffle(value, seed=None, name=None):對(duì)value的第0維隨機(jī)進(jìn)行shuffle操作炮叶。
  • tf.random_crop(value, size, seed=None, name=None):對(duì)value的按照指定的size進(jìn)行隨機(jī)裁剪碗旅,例如對(duì)圖片進(jìn)行隨機(jī)裁剪可以設(shè)置size = [crop_height, crop_width, 3]
  • tf.random_uniform([1], seed=1):根據(jù)隨機(jī)數(shù)種子隨機(jī)創(chuàng)造一個(gè)形狀為[1]的數(shù)字
  • tf.multinomial(logits, num_samples, seed=None, name=None):從多項(xiàng)式分布里面采樣镜悉。
  • tf.random_gamma(shape,alpha,beta=None,dtype=tf.float32,:從gamma分布里面生成形狀為shape的隨機(jī)數(shù)序列
# 正態(tài)分布祟辟,默認(rèn)均值為0,標(biāo)準(zhǔn)差為1.0侣肄,數(shù)據(jù)類型為float32
tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)


# 正態(tài)分布旧困,但那些到均值的距離超過(guò)2倍標(biāo)準(zhǔn)差的隨機(jī)數(shù)將被丟棄,然后重新抽取,直到取得足夠數(shù)量的隨機(jī)數(shù)為止, 隨機(jī)數(shù) x 
# 的取值范圍是$[mean - 2*stddev, mean + 2*stddev]$, 從而可以防止有元素與該張量中的其他元素顯著不同的情況出現(xiàn)
tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)


# 產(chǎn)生在[minval, maxval)之間形狀為 shape 的均勻分布, 默認(rèn)是[0, 1)之間形狀為 shape 的均勻分布
tf.random_uniform(shape, minval=0.0, maxval=1, dtype=tf.float32, seed=None, name=None)


# Randomly shuffles a tensor along its first dimension
tf.random_shuffle(value, seed=None, name=None)


# Randomly crops a tensor to a given size
tf.random_crop(value, size, seed=None, name=None)
# Note:If a dimension should not be cropped, pass the full size of that dimension. 
# For example, RGB images can be cropped with size = [crop_height, crop_width, 3]


# Sets the graph-level random seed
tf.set_random_seed(seed)
# 1. To generate the same repeatable sequence for an op across sessions
# set the seed for the op, a = tf.random_uniform([1], seed=1)
# 2. To make the random sequences generated by all ops be repeatable across sessions
# set a graph-level seed, tf.set_random_seed(1234)


# 其它
tf.multinomial(logits, num_samples, seed=None, name=None)
tf.random_gamma(shape,alpha,beta=None,dtype=tf.float32,seed=None,name=None)

參數(shù)的初始化

  • tf.constant_initializer()吼具、tf.zeros_initializer()被芳、tf.ones_initializer()
  • tf.random_uniform_initializer()馍悟、tf.uniform_unit_scaling_initializer()
  • tf.variance_scaling_initializer()
  • tf.glorot_uniform_initializer()剩晴、tf.glorot_normal_initializer():又稱Xavier_uniform_initializer

假設(shè)均勻分布的區(qū)間是[-limit, limit],則
limit=sqrt(6 / (fan_in + fan_out))
其中的fan_in和fan_out分別表示輸入單元的結(jié)點(diǎn)數(shù)和輸出單元的結(jié)點(diǎn)數(shù)锣咒。
由一個(gè) truncated normal distribution來(lái)初始化數(shù)據(jù).
stddev = sqrt(2 / (fan_in + fan_out))

  • tf.orthogonal_initializer():生成正交矩陣的隨機(jī)初始化

簡(jiǎn)寫(xiě)為tf.Orthogonal()。
生成正交矩陣的隨機(jī)數(shù)赞弥。
當(dāng)需要生成的參數(shù)是2維時(shí)毅整,這個(gè)正交矩陣是由均勻分布的隨機(jī)數(shù)矩陣經(jīng)過(guò)SVD分解而來(lái)。

init = tf.constant_initializer()
x = tf.get_variable(name='v_x', shape=[2, 3], initializer=init) # 必須指定shape
sess.run(x.initializer)
sess.run(x)
>>> array([[ 0.,  0.,  0.],
           [ 0.,  0.,  0.]], dtype=float32)

使用另外一個(gè)變量進(jìn)行初始化

weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35), name="weights")
# Create another variable with the same value as 'weights'.
w2 = tf.Variable(weights.initialized_value(), name="w2")
# Create another variable with twice the value of 'weights'
w_twice = tf.Variable(weights.initialized_value() * 0.2, name="w_twice")

Tensor的訪問(wèn)

  • 可以進(jìn)行索引和切片:可以逆序索引(arr[ : : -1])和負(fù)索引arr[-3]绽左。
  • 二維tensor的索引:arr[r1:r2, c1:c2:step] # 也可指定 step 進(jìn)行切片
  • ndarray的方式:arr[i, j] == arr[i][j]悼嫉。
  • 在多維 Tensor 中,如果省略了后面的索引拼窥,則返回的對(duì)象會(huì)是一個(gè)維度低一點(diǎn)的ndarray(但它含有高一級(jí)維度上的某條軸上的所有數(shù)據(jù))戏蔑。
  • 還可以進(jìn)行條件索引:arr[conditon] # conditon 可以使用 & | 進(jìn)行多條件組合

Tensor常用屬性

  • dtype
    • 不帶小數(shù)點(diǎn)的數(shù)會(huì)被默認(rèn)為tf.int32帶小數(shù)點(diǎn)的會(huì)默認(rèn)為tf.float32鲁纠。
    • 可使用tf.cast(x, dtype, name=None)轉(zhuǎn)換數(shù)據(jù)類型总棵。
    • tf.string、tf.bool改含、tf.complex64情龄、tf.qint8,tf.float32/64捍壤、tf.int8/16/32/64 int8就是char骤视,pytorch中沒(méi)有t.bool只有。
  • shape
    • tf.reshape(tensor, shape,)鹃觉,進(jìn)行reshape操作
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末专酗,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子帜慢,更是在濱河造成了極大的恐慌笼裳,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,222評(píng)論 6 493
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件粱玲,死亡現(xiàn)場(chǎng)離奇詭異躬柬,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)抽减,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,455評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門(mén)允青,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái),“玉大人卵沉,你說(shuō)我怎么就攤上這事颠锉》ㄉ” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 157,720評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵琼掠,是天一觀的道長(zhǎng)拒垃。 經(jīng)常有香客問(wèn)我,道長(zhǎng)瓷蛙,這世上最難降的妖魔是什么悼瓮? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 56,568評(píng)論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮艰猬,結(jié)果婚禮上横堡,老公的妹妹穿的比我還像新娘。我一直安慰自己冠桃,他們只是感情好命贴,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,696評(píng)論 6 386
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著食听,像睡著了一般胸蛛。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上碳蛋,一...
    開(kāi)封第一講書(shū)人閱讀 49,879評(píng)論 1 290
  • 那天胚泌,我揣著相機(jī)與錄音,去河邊找鬼肃弟。 笑死玷室,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的笤受。 我是一名探鬼主播穷缤,決...
    沈念sama閱讀 39,028評(píng)論 3 409
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼箩兽!你這毒婦竟也來(lái)了津肛?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 37,773評(píng)論 0 268
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤汗贫,失蹤者是張志新(化名)和其女友劉穎身坐,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體落包,經(jīng)...
    沈念sama閱讀 44,220評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡部蛇,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,550評(píng)論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了咐蝇。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片涯鲁。...
    茶點(diǎn)故事閱讀 38,697評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抹腿,到底是詐尸還是另有隱情岛请,我是刑警寧澤,帶...
    沈念sama閱讀 34,360評(píng)論 4 332
  • 正文 年R本政府宣布警绩,位于F島的核電站崇败,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏肩祥。R本人自食惡果不足惜僚匆,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,002評(píng)論 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搭幻。 院中可真熱鬧,春花似錦逞盆、人聲如沸檀蹋。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,782評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)俯逾。三九已至,卻和暖如春舅逸,著一層夾襖步出監(jiān)牢的瞬間桌肴,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,010評(píng)論 1 266
  • 我被黑心中介騙來(lái)泰國(guó)打工琉历, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留坠七,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 46,433評(píng)論 2 360
  • 正文 我出身青樓旗笔,卻偏偏與公主長(zhǎng)得像彪置,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子蝇恶,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,587評(píng)論 2 350

推薦閱讀更多精彩內(nèi)容