Python環(huán)境搭建請(qǐng)參考http://www.reibang.com/p/be400adba577
在入門前先要引入tensorflow
:
import tensorflow as tf
張量 tensor
張量是深度學(xué)習(xí)框架存儲(chǔ)數(shù)據(jù)的結(jié)構(gòu)乙漓,張量就是數(shù)組魂贬,但是一般是高維數(shù)組:把幾個(gè)矩陣疊起來(lái)這樣格遭。
TF的張量是元組(因?yàn)門F代碼是Python的)。
圖 graph
圖是TF的主要結(jié)構(gòu)咙俩。TF中能執(zhí)行的結(jié)構(gòu)就是圖庭敦。
上面說(shuō)的張量是構(gòu)成圖的邊务蝠!邊與邊之間的結(jié)點(diǎn)叫“操作”定欧。
在TF中,張量計(jì)算后才能拿到數(shù)組中的值聚请,圖在運(yùn)算前荠雕,張量就是簡(jiǎn)單的張量結(jié)構(gòu)tf.Tensors
,并不能拿到里面的值驶赏∥枋看下例子:
a = tf.constant(3.0, dtype=tf.float32)
b = tf.constant(4.0)
total = a + b
print(a)
print(b)
print(total)
這是一段經(jīng)典的類似“helloWorld”的代碼。a,b都是tf常量母市,一個(gè)3一個(gè)4。但他們是張量损趋,所以+
操作后還是張量患久,打印出來(lái)的并不是7:
Tensor("Const:0", shape=(), dtype=float32)
Tensor("Const_1:0", shape=(), dtype=float32)
Tensor("add:0", shape=(), dtype=float32)
圖中的每個(gè)指令都擁有唯一的名稱。這個(gè)名稱不是我們變量的名稱浑槽。張量是根據(jù)生成它們的指令命名的蒋失,后面跟著輸出索引,如上文的 "add:0" 所示桐玻。
張量板 tensorBoard
TensorBoard 的功能之一是將圖可視化篙挽。執(zhí)行
writer = tf.summary.FileWriter('.')
writer.add_graph(tf.get_default_graph())
將在當(dāng)前目錄中生成一個(gè) event 文件,其名稱格式是events.out.tfevents.{timestamp}.{hostname}
镊靴。
新建一個(gè)終端執(zhí)行"tensorboard --logdir .
"铣卡,然后打開http://localhost:6006
就能看到可視圖。
會(huì)話 session
到目前我們的圖還是沒運(yùn)行過偏竟,我們看不到3+4的結(jié)果是多少煮落。
要運(yùn)行圖,需要通過會(huì)話:
sess = tf.Session()
print(sess.run(total))
這樣7.0
就打出來(lái)了踊谋!
一定要記住蝉仇,圖在運(yùn)行前,張量中的值是不計(jì)算的〗蜗危看下面的例子:
vec = tf.random_uniform(shape=(3,))
out1 = vec + 1
out2 = vec + 2
print(sess.run(out1))
print(sess.run(out2))
print(sess.run((out1, out2)))
tf.random_uniform
會(huì)產(chǎn)生一個(gè)隨機(jī)向量沉迹。但是你可以看到前兩次打印的結(jié)果并不是相差1,因?yàn)槊看芜\(yùn)行的時(shí)候vec
是不同的害驹。而第三次打印由于vec
只產(chǎn)生一次鞭呕,它們就相差剛好是1(可能你看到的相差比1大或者小千萬(wàn)分之一)。
占位符
如果tf只支持常量就太難用了裙秋,所以最后說(shuō)一下參數(shù)化琅拌,類似于一個(gè)函數(shù)接收幾個(gè)參數(shù)。
x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
z = x + y
這一段很容易看懂:x,y都是浮點(diǎn)數(shù)摘刑,到底是多少目前不知道进宝。z是他們的和。
使用的時(shí)候要給x.y賦值枷恕,需要用feed_dict
以字典形式傳入:
print(sess.run(z, feed_dict={x: 3, y: 4.5}))
print(sess.run(z, feed_dict={x: [1, 3], y: [2, 4]}))
這樣結(jié)果就打出來(lái)了党晋。
如果你不小心把x寫成了z,而z正是它們的和怎么辦徐块?
print(sess.run(z, feed_dict={z: 3, y: 4.5}))
又或者你不小心在字典出現(xiàn)了o,p,q等莫名其妙的鍵又會(huì)怎么樣未玻?
結(jié)語(yǔ)
以上就是tf的核心概念,其他更復(fù)雜的操作都是基于上面這些胡控。