tensorflow基礎(chǔ)概念

1.什么是tensorflow

Tensorflow是神經(jīng)網(wǎng)絡(luò)框架。

2.Tensorflow中個重要概念

· Tensor:即張量,在TensorFlow的范疇里,可以簡單的理解為多維數(shù)組

· Flow:中文翻譯過來是“流”,它形象的表達(dá)了張量之間通過計算相互轉(zhuǎn)化的過程

Tensorflow與傳統(tǒng)的程序結(jié)構(gòu)不一樣,tensorflow將程序分為兩個獨立的部分似舵,包括計算圖定義,和執(zhí)行兩部分葱峡。

因為tensorflow是采用數(shù)據(jù)流圖來計算砚哗,所以先創(chuàng)建一個數(shù)據(jù)流圖,在將數(shù)據(jù)(以張量tensor的形式存在)放在數(shù)據(jù)流圖中計算,節(jié)點(Nodes)在途中表示數(shù)學(xué)操作。訓(xùn)練模型的時候tensor會不斷從數(shù)據(jù)流圖的一個節(jié)點flow到另一個節(jié)點饶囚。

計算圖:即包含著節(jié)點和邊的網(wǎng)絡(luò)。每個節(jié)點可以有0個或者多個輸入仅淑,但是只有一個輸出。

計算機(jī)圖的執(zhí)行:

以一個例子說明:


圖片.png

用代碼實現(xiàn)如下:

圖片.png

由上圖可以看見,代碼分為兩個部分胸哥,計算圖和會話執(zhí)行的兩部分涯竟,1.2.為構(gòu)建計算圖的步驟,1獲取了數(shù)據(jù),并構(gòu)建計算節(jié)點庐船,執(zhí)行會話的時候就是將數(shù)據(jù)放進(jìn)計算圖银酬,使得數(shù)據(jù)在計算圖中運(yùn)行。

3. 會話控制

session 是 Tensorflow 為了控制,和輸出文件的執(zhí)行的語句. 運(yùn)行 session.run() 可以獲得你要得知的運(yùn)算結(jié)果.這有點像是python打開文本處理的兩種方式筐钟。

會話控制的兩種方法:

# method 1

sess = tf.Session()

result = sess.run(product)

print(result)

sess.close()

# method 2

with tf.Session() as sess:

    result2 = sess.run(product)

    print(result2)# [[12]]

4.梯度下降原理

梯度下降法是屬于優(yōu)化問題其中的一個方法捡硅。在這里可以簡單的理解為數(shù)學(xué)函數(shù)中的求導(dǎo)求微分。在求解損失函數(shù)的最小值時盗棵,可以通過梯度下降法來一步步的迭代求解,得到最小化的損失函數(shù)和模型參數(shù)值北发。反過來纹因,如果我們需要求解損失函數(shù)的最大值,這時就需要用梯度上升法來迭代了琳拨。在tensorful中主要應(yīng)用梯度下降方法瞭恰。
如下圖:假設(shè)從黑點開始,找到最低點是目標(biāo)狱庇。從黑點開始算斜率(這個斜率就是梯度惊畏,用數(shù)學(xué)的角度講就是微分),找到一個最大的即最陡的地方密任,然后再往前進(jìn)一步颜启,再計算其斜率,如此循環(huán)浪讳。才能找到這個最低點缰盏。其中步長不能太大也不能太小,太小的話淹遵,可能導(dǎo)致遲遲走不到最低點影響效率口猜,太大的話,可能會錯過最低點透揣。


圖片.png

5.用梯度下降優(yōu)化線性回歸問題

引入模塊
import numpy as np
import matplotlib.pyplot as plt
import tensorflow as tf
構(gòu)建數(shù)據(jù)
points_num = 100
vectors = []
用 Numpy 的正態(tài)隨機(jī)分布函數(shù)生成 100 個點
這些點的(x, y)坐標(biāo)值對應(yīng)線性方程 y = 0.1 * x + 0.2
權(quán)重(Weight)為 0.1济炎,偏差(Bias)為 0.2
for i in range(points_num):
    x1 = np.random.normal(0.0, 0.66)
    y1 = 0.1 * x1 + 0.3 + np.random.normal(0.0, 0.04)
    vectors.append([x1, y1])

x_data = [v[0] for v in vectors]  # 真實的點的 x 坐標(biāo)
y_data = [v[1] for v in vectors]  # 真實的點的 y 坐標(biāo)
圖像 1 :展示 100 個隨機(jī)數(shù)據(jù)點
plt.plot(x_data, y_data, 'r*', label="Original data")  # 紅色星形的點
plt.legend()
plt.show()
繪出的效果如下:
圖片.png
構(gòu)建線性回歸模型 Variable定義一個變量。random_uinifo用于產(chǎn)生一維的隨機(jī)張量
W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))  # 初始化 Weight
b = tf.Variable(tf.zeros([1]))                      # 初始化 Bias
y = W * x_data + b                                  # 模型計算出來的
定義 loss function(損失函數(shù))或 cost function(代價函數(shù))
對 Tensor 的所有維度計算 ((y - y_data) ^ 2) 之和 / N
reduce_mean計算張量的平均值辐真,square平方须尚。
loss = tf.reduce_mean(tf.square(y - y_data))
用梯度下降的優(yōu)化器來最小化我們的 loss(損失)
一般設(shè)置小于1,值越大越有可能錯過一些逼近真實曲線的點侍咱,太小會影響訓(xùn)練效率

minimize 接受了一個函數(shù)作為參數(shù)恨闪,這個函數(shù)做了下面的兩件事情:
首先它對所有的x值通過我們在之前定義的pridict函數(shù)預(yù)測了y值。
然后它通過我們之前定義的損失函數(shù)返回了這些預(yù)測的均方誤差放坏。
minimize函數(shù)之后會自動調(diào)整這些變量(即系數(shù)w,b)來使得損失函數(shù)更小咙咽。
在運(yùn)行訓(xùn)練迭代器之后,w,以及d就會是通過模型100次迭代之后學(xué)習(xí)到的結(jié)果了淤年。

optimizer = tf.train.GradientDescentOptimizer(0.1)  
train = optimizer.minimize(loss)
創(chuàng)建會話
with tf.Session() as sess:
    # 初始化數(shù)據(jù)流圖中的所有變量 (這一步一定要有)
    init = tf.global_variables_initializer()
    sess.run(init)
    # 訓(xùn)練 20 步
    for step in xrange(100):
        # 優(yōu)化每一步
        sess.run(train)
        # 打印出每一步的損失钧敞,權(quán)重和偏差
        print("第 {} 步的 損失={}, 權(quán)重={}, 偏差={}".format(step, sess.run(loss), sess.run(W), sess.run(b)))
    # 圖像 2 :繪制所有的點并且繪制出最佳擬合的直線
    plt.plot(x_data, y_data, 'r*', label="Original data")  # 紅色星形的點
    plt.title("Linear Regression using Gradient Descent")  # 標(biāo)題蜡豹,表示 "梯度下降解決線性回歸"
    plt.plot(x_data, sess.run(W) * x_data + sess.run(b), label="Fitted line")  # 擬合的線
    print(sess.run(W))
    plt.legend()
    plt.xlabel('x')
    plt.ylabel('y')
    plt.show()
打印出如下效果,可以看到是十分比較實際的y=0.1x + 0.3的效果
<pre>第 0 步的 損失=0.2615503668785095, 權(quán)重=[-0.5386478], 偏差=[0.06145719]
第 1 步的 損失=0.20130445063114166, 權(quán)重=[-0.4748752], 偏差=[0.11052281]
第 2 步的 損失=0.15636701881885529, 權(quán)重=[-0.4175892], 偏差=[0.14968537]
第 3 步的 損失=0.12244605273008347, 權(quán)重=[-0.366123], 偏差=[0.18093464]
第 4 步的 損失=0.09656181931495667, 權(quán)重=[-0.31987983], 偏差=[0.20586148]
第 5 步的 損失=0.07661882042884827, 權(quán)重=[-0.2783252], 偏差=[0.22573774]
第 6 步的 損失=0.06112353503704071, 權(quán)重=[-0.24098018], 偏差=[0.24158014]
第 7 步的 損失=0.04899679124355316, 權(quán)重=[-0.20741548], 偏差=[0.2542014]
第 8 步的 損失=0.03944816440343857, 權(quán)重=[-0.17724614], 偏差=[0.26425108]
第 9 步的 損失=0.0318911150097847, 權(quán)重=[-0.15012686], 偏差=[0.27224827]
第 10 步的 損失=0.025884980335831642, 權(quán)重=[-0.12574784], 偏差=[0.2786078]
第 11 步的 損失=0.02109493501484394, 權(quán)重=[-0.10383102], 偏差=[0.283661]
第 12 步的 損失=0.017263982445001602, 權(quán)重=[-0.08412677], 偏差=[0.2876727]
第 13 步的 損失=0.014193098992109299, 權(quán)重=[-0.06641099], 偏差=[0.29085425]
第 14 步的 損失=0.011726957745850086, 權(quán)重=[-0.05048241], 偏差=[0.2933745]
第 15 步的 損失=0.009743548929691315, 權(quán)重=[-0.03616025], 偏差=[0.29536825]
第 16 步的 損失=0.008146497420966625, 權(quán)重=[-0.02328211], 偏差=[0.29694307]
第 17 步的 損失=0.006859328597784042, 權(quán)重=[-0.01170211], 偏差=[0.29818475]
第 18 步的 損失=0.00582113629207015, 權(quán)重=[-0.00128914], 偏差=[0.29916176]
第 19 步的 損失=0.00498326076194644, 權(quán)重=[0.00807462], 偏差=[0.2999287]
第 20 步的 損失=0.004306729417294264, 權(quán)重=[0.01649503], 偏差=[0.30052903]
第 21 步的 損失=0.0037602675147354603, 權(quán)重=[0.02406726], 偏差=[0.30099744]
第 22 步的 損失=0.00331873563118279, 權(quán)重=[0.03087685], 偏差=[0.30136147]
第 23 步的 損失=0.002961900783702731, 權(quán)重=[0.03700069], 偏差=[0.3016431]
第 24 步的 損失=0.002673461800441146, 權(quán)重=[0.0425079], 偏差=[0.30185977]
第 25 步的 損失=0.0024402739945799112, 權(quán)重=[0.04746062], 偏差=[0.30202532]
第 26 步的 損失=0.0022517316974699497, 權(quán)重=[0.05191472], 偏差=[0.3021508]
第 27 步的 損失=0.0020992732606828213, 權(quán)重=[0.05592044], 偏差=[0.30224487]
第 28 步的 損失=0.0019759831484407187, 權(quán)重=[0.05952293], 偏差=[0.3023145]
第 29 步的 損失=0.00187627540435642, 權(quán)重=[0.06276281], 偏差=[0.30236512]
第 30 步的 損失=0.0017956355586647987, 權(quán)重=[0.0656766], 偏差=[0.30240107]
第 31 步的 損失=0.0017304145731031895, 權(quán)重=[0.06829713], 偏差=[0.30242568]
第 32 步的 損失=0.0016776630654931068, 權(quán)重=[0.07065392], 偏差=[0.3024417]
第 33 步的 損失=0.0016349953366443515, 權(quán)重=[0.07277352], 偏差=[0.30245116]
第 34 步的 損失=0.0016004836652427912, 權(quán)重=[0.07467983], 偏差=[0.30245575]
第 35 步的 損失=0.0015725686680525541, 權(quán)重=[0.0763943], 偏差=[0.30245674]
第 36 步的 損失=0.0015499889850616455, 權(quán)重=[0.07793624], 偏差=[0.30245513]
第 37 步的 損失=0.0015317249344661832, 權(quán)重=[0.07932302], 偏差=[0.30245167]
第 38 步的 損失=0.0015169511316344142, 權(quán)重=[0.08057026], 偏差=[0.30244693]
第 39 步的 損失=0.0015050009824335575, 權(quán)重=[0.081692], 偏差=[0.3024414]
第 40 步的 損失=0.0014953347854316235, 權(quán)重=[0.08270086], 偏差=[0.30243537]
第 41 步的 損失=0.001487515983171761, 權(quán)重=[0.08360821], 偏差=[0.30242914]
第 42 步的 損失=0.0014811910223215818, 權(quán)重=[0.08442426], 偏差=[0.30242288]
第 43 步的 損失=0.0014760750345885754, 權(quán)重=[0.08515821], 偏差=[0.3024167]
第 44 步的 損失=0.001471936353482306, 權(quán)重=[0.08581831], 偏差=[0.30241075]
第 45 步的 損失=0.0014685888309031725, 權(quán)重=[0.086412], 偏差=[0.30240503]
第 46 步的 損失=0.0014658808941021562, 權(quán)重=[0.08694594], 偏差=[0.30239964]
第 47 步的 損失=0.0014636905398219824, 權(quán)重=[0.08742617], 偏差=[0.30239457]
第 48 步的 損失=0.0014619188150390983, 權(quán)重=[0.08785808], 偏差=[0.30238983]
第 49 步的 損失=0.0014604852767661214, 權(quán)重=[0.08824653], 偏差=[0.30238542]
第 50 步的 損失=0.0014593261294066906, 權(quán)重=[0.0885959], 偏差=[0.30238134]
第 51 步的 損失=0.0014583882875740528, 權(quán)重=[0.08891013], 偏差=[0.30237758]
第 52 步的 損失=0.0014576294925063848, 權(quán)重=[0.08919273], 偏差=[0.30237415]
第 53 步的 損失=0.0014570162165910006, 權(quán)重=[0.0894469], 偏差=[0.302371]
第 54 步的 損失=0.0014565197052434087, 權(quán)重=[0.0896755], 偏差=[0.3023681]
第 55 步的 損失=0.0014561181887984276, 權(quán)重=[0.0898811], 偏差=[0.30236548]
第 56 步的 損失=0.0014557933900505304, 權(quán)重=[0.09006602], 偏差=[0.3023631]
第 57 步的 損失=0.001455530640669167, 權(quán)重=[0.09023233], 偏差=[0.30236092]
第 58 步的 損失=0.0014553182991221547, 權(quán)重=[0.09038191], 偏差=[0.30235896]
第 59 步的 損失=0.0014551462372764945, 權(quán)重=[0.09051643], 偏差=[0.30235717]
第 60 步的 損失=0.0014550070045515895, 權(quán)重=[0.09063742], 偏差=[0.30235556]
第 61 步的 損失=0.0014548946637660265, 權(quán)重=[0.09074625], 偏差=[0.3023541]
第 62 步的 損失=0.0014548037433996797, 權(quán)重=[0.09084412], 偏差=[0.30235276]
第 63 步的 損失=0.0014547302853316069, 權(quán)重=[0.09093214], 偏差=[0.30235156]
第 64 步的 損失=0.0014546705642715096, 權(quán)重=[0.09101131], 偏差=[0.3023505]
第 65 步的 損失=0.001454622601158917, 權(quán)重=[0.09108251], 偏差=[0.3023495]
第 66 步的 損失=0.0014545833691954613, 權(quán)重=[0.09114655], 偏差=[0.3023486]
第 67 步的 損失=0.001454551937058568, 權(quán)重=[0.09120415], 偏差=[0.3023478]
第 68 步的 損失=0.0014545266749337316, 權(quán)重=[0.09125596], 偏差=[0.3023471]
第 69 步的 損失=0.0014545059530064464, 權(quán)重=[0.09130254], 偏差=[0.30234644]
第 70 步的 損失=0.001454489422030747, 權(quán)重=[0.09134445], 偏差=[0.30234584]
第 71 步的 損失=0.0014544756850227714, 權(quán)重=[0.09138213], 偏差=[0.3023453]
第 72 步的 損失=0.0014544647419825196, 權(quán)重=[0.09141602], 偏差=[0.30234483]
第 73 步的 損失=0.0014544560108333826, 權(quán)重=[0.09144651], 偏差=[0.3023444]
第 74 步的 損失=0.0014544487930834293, 權(quán)重=[0.09147393], 偏差=[0.30234402]
第 75 步的 損失=0.0014544432051479816, 權(quán)重=[0.09149859], 偏差=[0.3023437]
第 76 步的 損失=0.001454438315704465, 權(quán)重=[0.09152077], 偏差=[0.3023434]
第 77 步的 損失=0.0014544345904141665, 權(quán)重=[0.09154072], 偏差=[0.30234313]
第 78 步的 損失=0.0014544314472004771, 權(quán)重=[0.09155866], 偏差=[0.30234286]
第 79 步的 損失=0.0014544292353093624, 權(quán)重=[0.0915748], 偏差=[0.30234262]
第 80 步的 損失=0.0014544271398335695, 權(quán)重=[0.09158931], 偏差=[0.3023424]
第 81 步的 損失=0.0014544252771884203, 權(quán)重=[0.09160236], 偏差=[0.30234224]
第 82 步的 損失=0.001454424113035202, 權(quán)重=[0.0916141], 偏差=[0.3023421]
第 83 步的 損失=0.0014544231817126274, 權(quán)重=[0.09162466], 偏差=[0.30234194]
第 84 步的 損失=0.001454422133974731, 權(quán)重=[0.09163415], 偏差=[0.3023418]
第 85 步的 損失=0.0014544215518981218, 權(quán)重=[0.09164269], 偏差=[0.30234167]
第 86 步的 損失=0.0014544209698215127, 權(quán)重=[0.09165037], 偏差=[0.30234155]
第 87 步的 損失=0.0014544205041602254, 權(quán)重=[0.09165728], 偏差=[0.30234146]
第 88 步的 損失=0.0014544199220836163, 權(quán)重=[0.09166349], 偏差=[0.30234137]
第 89 步的 損失=0.0014544199220836163, 權(quán)重=[0.09166908], 偏差=[0.30234128]
第 90 步的 損失=0.0014544193400070071, 權(quán)重=[0.09167411], 偏差=[0.30234122]
第 91 步的 損失=0.0014544193400070071, 權(quán)重=[0.09167863], 偏差=[0.30234116]
第 92 步的 損失=0.0014544192235916853, 權(quán)重=[0.0916827], 偏差=[0.3023411]
第 93 步的 損失=0.0014544188743457198, 權(quán)重=[0.09168636], 偏差=[0.30234104]
第 94 步的 損失=0.0014544188743457198, 權(quán)重=[0.09168965], 偏差=[0.302341]
第 95 步的 損失=0.0014544188743457198, 權(quán)重=[0.0916926], 偏差=[0.30234098]
第 96 步的 損失=0.0014544188743457198, 權(quán)重=[0.09169526], 偏差=[0.30234095]
第 97 步的 損失=0.001454418757930398, 權(quán)重=[0.09169766], 偏差=[0.30234092]
第 98 步的 損失=0.001454418757930398, 權(quán)重=[0.09169981], 偏差=[0.3023409]
第 99 步的 損失=0.0014544186415150762, 權(quán)重=[0.09170175], 偏差=[0.30234087]
[0.09170175]
</pre>
image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末溉苛,一起剝皮案震驚了整個濱河市镜廉,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌愚战,老刑警劉巖娇唯,帶你破解...
    沈念sama閱讀 216,544評論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異寂玲,居然都是意外死亡塔插,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,430評論 3 392
  • 文/潘曉璐 我一進(jìn)店門拓哟,熙熙樓的掌柜王于貴愁眉苦臉地迎上來想许,“玉大人,你說我怎么就攤上這事断序×魑疲” “怎么了?”我有些...
    開封第一講書人閱讀 162,764評論 0 353
  • 文/不壞的土叔 我叫張陵违诗,是天一觀的道長漱凝。 經(jīng)常有香客問我,道長诸迟,這世上最難降的妖魔是什么碉哑? 我笑而不...
    開封第一講書人閱讀 58,193評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮亮蒋,結(jié)果婚禮上扣典,老公的妹妹穿的比我還像新娘。我一直安慰自己慎玖,他們只是感情好贮尖,可當(dāng)我...
    茶點故事閱讀 67,216評論 6 388
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著趁怔,像睡著了一般湿硝。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上润努,一...
    開封第一講書人閱讀 51,182評論 1 299
  • 那天关斜,我揣著相機(jī)與錄音,去河邊找鬼铺浇。 笑死痢畜,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播丁稀,決...
    沈念sama閱讀 40,063評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼吼拥,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了线衫?” 一聲冷哼從身側(cè)響起凿可,我...
    開封第一講書人閱讀 38,917評論 0 274
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎授账,沒想到半個月后枯跑,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,329評論 1 310
  • 正文 獨居荒郊野嶺守林人離奇死亡白热,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,543評論 2 332
  • 正文 我和宋清朗相戀三年敛助,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片棘捣。...
    茶點故事閱讀 39,722評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖休建,靈堂內(nèi)的尸體忽然破棺而出乍恐,到底是詐尸還是另有隱情,我是刑警寧澤测砂,帶...
    沈念sama閱讀 35,425評論 5 343
  • 正文 年R本政府宣布茵烈,位于F島的核電站,受9級特大地震影響砌些,放射性物質(zhì)發(fā)生泄漏呜投。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,019評論 3 326
  • 文/蒙蒙 一存璃、第九天 我趴在偏房一處隱蔽的房頂上張望仑荐。 院中可真熱鬧,春花似錦纵东、人聲如沸粘招。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,671評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽洒扎。三九已至,卻和暖如春衰絮,著一層夾襖步出監(jiān)牢的瞬間袍冷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,825評論 1 269
  • 我被黑心中介騙來泰國打工猫牡, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留胡诗,地道東北人。 一個月前我還...
    沈念sama閱讀 47,729評論 2 368
  • 正文 我出身青樓,卻偏偏與公主長得像乃戈,于是被迫代替她去往敵國和親褂痰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,614評論 2 353

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