Tensorflow概念

AI將會變得更加民主化, AI程序開發(fā)遲早會變?yōu)槌绦騿T的必備技能,還猶豫什么,趕緊來學(xué)習(xí). Google的Tensorflow無疑是目前最有前景的框架, 那么Tensorflow到底好不好學(xué)呢?我們拭目以待. 本篇介紹Tensorflow的基本概念.

1. 基本元素

1.1 constant

const的原型是tf.constant(value, dtype=None, shape=None, name='Const', verify_shape=False),可以是常數(shù),向量,矩陣等.例子如下:

import tensorflow as tf


def const_literal():
    a = tf.constant(2, name='a')
    b = tf.constant(3, name='b')
    x = tf.add(a, b, name='add')

    with tf.Session() as sess:
        writer = tf.summary.FileWriter('./graphs', sess.graph)
        print(sess.run(x))
    writer.close()


def const_tensor():
    a = tf.constant([2, 2], name='a')
    b = tf.constant([[0, 1], [2, 3]], name='b')
    x = tf.add(a, b, name='add')
    y = tf.multiply(a, b, name='mul')  # element wise multiply

    with tf.Session() as sess:
        x, y = sess.run([x, y])
        print('x:')
        print(x)
        print('y:')
        print(y)


def const_zeros():
    """tf.zeros and tf.ones has same API"""
    a = tf.zeros([2, 3], tf.int32)
    b = tf.zeros_like(a, tf.float32)
    with tf.Session() as sess:
        print(sess.run(a))
        print(sess.run(b))


def const_fill(val):
    """fill the tensor with a value"""
    a = tf.fill([2, 3], val)
    with tf.Session() as sess:
        print(sess.run(a))


def const_linear(start, stop, num):
    """linear space numbers in [start, stop], only float32, float64 permited"""
    a = tf.linspace(start, stop, num)
    b = tf.range(start, stop, 1.0)
    with tf.Session() as sess:
        print(sess.run(a))
        print(sess.run(b))


def const_random():
    """
    tf.random_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
    tf.truncated_normal(shape, mean=0.0, stddev=1.0, dtype=tf.float32, seed=None, name=None)
    tf.random_uniform(shape, minval=0, maxval=None, dtype=tf.float32, seed=None, name=None)
    tf.random_shuffle(value, seed=None, name=None)
    tf.random_crop(value, size, seed=None, name=None)
    tf.multinomial(logits, num_samples, seed=None, name=None)
    tf.random_gamma(shape, alpha, beta=None, dtype=tf.float32, seed=None, name=None)
    """
    pass


def const_graph():
    """don't need to use my_const, it has already been in the compute graph"""
    my_const = tf.constant([1.0, 2.0], name='my_const')
    with tf.Session() as sess:
        print(sess.graph.as_graph_def())


if __name__ == '__main__':
    # const_linear(0.0, 99.0, 99)
    const_graph()

Tensorboard

Tensorboard查看Graph.

Variable

constant是一個operation,子graph構(gòu)建的時候定義,Variable是一個類,代表變量.constant在圖的的定義里邊,Variable可以在參數(shù)服務(wù)器.

變量在使用前要進行顯示的初始化,否則報未初始化的錯.

可以使用eval()進行求知,只有operation和tensor有eval()函數(shù),Tensor.eval()相當(dāng)于get_default_session().run(t).

每一個Variable都有一個initializer,只有Variable被初始化了或者賦值成功了,才可以eval()

import tensorflow as tf


def test_eval():
    W = tf.constant(10)
    with tf.Session():
        print(W.eval())         # 10


def test_eval_Variable():
    W = tf.Variable(10)
    with tf.Session() as sess:
        print(sess.run(W.initializer))  # None <--- 1.
        print(W.eval())                 # 10


def test_eval_Variable_all():
    W = tf.Variable(10)
    with tf.Session():
        print(W.initializer.eval())  # error: object has no attribute 'eval'
        print(W.eval())

def initialize_properly():
    W = tf.Variable(10)
    with tf.Session() as sess:
        #This way
        tf.global_variables_initializer().run()

        print(W.eval()) 
        print(sess.run(W))


def run_multiple_times():
    W = tf.Variable(10)
    a_times_two = W.assign(2 * W)
    with tf.Session():
        tf.global_variables_initializer().run()
        print(W.eval())         # 10
        print(a_times_two.eval())  # 20
        print(a_times_two.eval())  # 40


if __name__ == '__main__':
    test_eval()
    test_eval_Variable()
    test_eval_Variable_all()

Placeholders

placeholder和Variable在普通的編程意義上差不多,不過在tensorflow里邊,placeholder用來表示輸入輸出的數(shù)據(jù),相當(dāng)于C/C++的io, Variable代表在學(xué)習(xí)中可以更新,迭代,存儲的參數(shù),更接近于普通意義上的變量. 具體來說有一下不同:

  • Variable需要用Tensor初始化; placeholder不用,也不能初始化
  • Variable的數(shù)據(jù)可以在訓(xùn)練中更新
  • Variable可以共享,并且可以是nontrainble
  • Variable學(xué)習(xí)好的參數(shù)可以保存在磁盤中
  • Variable創(chuàng)建的時候有三個op自動創(chuàng)建: variable op, initializer op, ops for the initial value
  • Variable是一個class, placeholder是一個function
  • 在分布式環(huán)境下,Variable在參數(shù)服務(wù)器里邊,并且在不同的worker里邊共享
  • Variable使用前要初始化,在使用的過程中shape是固定的, placeholder在使用的時候要feed數(shù)據(jù).

Session

import tensorflow as tf

x = tf.Variable(3, name='x')
y = tf.Variable(4, name='y')

f = x*x*y + y + 2

with tf.Session() as sess:
    x.initializer.run()
    y.initializer.run()
#     result = f.eval()
#     result = sess.run(f)
    result = tf.get_default_session().run(f)

    
tf.reset_default_graph()
print(result)
result = None
  • 這段代碼里邊用了三種方法求值
  • InteractiveSession自動創(chuàng)建一個Session并且是default Session,不需要with block

Graph操作

x1 = tf.Variable(1)
x1.graph is tf.get_default_graph() # True

graph = tf.Graph()
with graph.as_default():
    x2 = tf.Variable(2)
    
x2.graph is graph # True

x2.graph is tf.get_default_graph() # False
  • 任何一個創(chuàng)建的node都會自動放到default graph里邊
  • 當(dāng)然也可以給node指定graph,尤其是程序中有多個graph的情形.

Node的生命周期

w = tf.constant(3)
x = w + 2
y = x + 5
z = x * 3

with tf.Session() as sess:
    print(y.eval())
    print(z.eval())
  • 在這個代碼中求y的時候需要先求x和w,求z的時候也是x和w,但是第二次不能復(fù)用第一次的結(jié)果
  • 在graph的run函數(shù)調(diào)用后,除了variable之外的數(shù)據(jù)都會被丟棄,variable的聲明周期始于初始化,止于session關(guān)閉.
  • 為了讓求值更搞笑,需要在一個run中計算y和z:
with  tf.Session() as sesss:
    y_val, z_val = sess.run([y, z])
    print(y_val)
    print(z_val)
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末屑柔,一起剝皮案震驚了整個濱河市剧蚣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌拇派,老刑警劉巖,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件褐澎,死亡現(xiàn)場離奇詭異言询,居然都是意外死亡,警方通過查閱死者的電腦和手機设易,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蛹头,“玉大人顿肺,你說我怎么就攤上這事≡希” “怎么了屠尊?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長耕拷。 經(jīng)常有香客問我讼昆,道長,這世上最難降的妖魔是什么骚烧? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任浸赫,我火速辦了婚禮,結(jié)果婚禮上赃绊,老公的妹妹穿的比我還像新娘既峡。我一直安慰自己,他們只是感情好碧查,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布运敢。 她就那樣靜靜地躺著,像睡著了一般么夫。 火紅的嫁衣襯著肌膚如雪者冤。 梳的紋絲不亂的頭發(fā)上肤视,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天档痪,我揣著相機與錄音,去河邊找鬼邢滑。 笑死腐螟,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的困后。 我是一名探鬼主播乐纸,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼摇予!你這毒婦竟也來了汽绢?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤侧戴,失蹤者是張志新(化名)和其女友劉穎宁昭,沒想到半個月后跌宛,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡积仗,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年疆拘,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片寂曹。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡哎迄,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出隆圆,到底是詐尸還是另有隱情漱挚,我是刑警寧澤,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布渺氧,位于F島的核電站棱烂,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏阶女。R本人自食惡果不足惜颊糜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望秃踩。 院中可真熱鬧衬鱼,春花似錦、人聲如沸憔杨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽消别。三九已至抛蚤,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間寻狂,已是汗流浹背岁经。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蛇券,地道東北人缀壤。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像纠亚,于是被迫代替她去往敵國和親塘慕。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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

  • 基本使用 使用 TensorFlow, 你必須明白 TensorFlow: 使用圖 (graph) 來...
    西方失敗9527閱讀 768評論 0 1
  • 你在找各種借口要見我一面嗎 還好我都一一回絕了 意志一定要堅定啊 我們 還是不見的好 其實你這樣想靠近我 我不說感...
    茶潤人生閱讀 119評論 0 0
  • 窗外, 聽到的是小鳥清脆動聽的 聲音 它們似乎在聊天? 還是在談?wù)摻裉斓奶鞖猓? 還是和我一樣在分享著自己...
    梓涵的心房閱讀 253評論 0 2
  • 剛過小雪后的今天蛤织,在太陽還值班的時間里并不算太冷拥娄。午時一刻,我正在吃飯瞳筏,發(fā)小發(fā)來消息稚瘾,邀請我去看他剛置下的新房,就...
    丁丁小午閱讀 438評論 1 5
  • 每天能夠早起,有很多原因柱宦。夢想稱之為第一要素些椒,不過還有很多更真實的原因,那就是'其實你是窮'掸刊,又或者你欠銀行很多錢...
    念殘泊宇閱讀 409評論 0 0