生活随笔
收集整理的這篇文章主要介紹了
tensorflow 就该这么学--1
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
深度學習主要有下面幾個步驟:
1、獲取數據
2、搭建模型
3、模型訓練
4、使用模型解決實際問題
tensorflow是現在最火的深度學習框架,值得學習
簡單的用tensorflow擬合二維數據
1、獲取數據
這里面找一個一次函數y約等于3x
import?numpy?as?np??import?matplotlib.pyplot?as?plt????train_x?=?np.linspace(-1,1,100)??train_y?=?3*train_x+np.random.randn(100)*0.1??plt.plot(train_x,train_y,'yo',label='Original?data')??plt.legend()??plt.show()??
代碼解讀:導入兩個包,numpy是生成數據相關的包,更多的用于矩陣運算,matplotlib主要用于可視化畫圖
????????????????????????????????
plt.plot里面‘yo’ 代表黃色yellow形狀為o,后面為圖形命名,可以自己改動里面參數
? ? ? ? ? ? ? ? ? ? ? ?
上面這個圖形是y約等于2*x,'yo' 替換為'ro'
2、搭建模型
思想:構建模型z = w*x+b, 這里面就是用z來逼近擬合上面y,不斷逼近的過程中,主要調整的是參數w和b, 這兩個變量也是在過程當中不斷更新的亮,直到兩個模型擬合程度比較好
正向搭建模型
開始用tensorflow 搭建模型
x?=?tf.placeholder('float')??y?=?tf.placeholder('float')????w?=?tf.Variable(tf.random_normal([1]),name='weight')??b?=?tf.Variable(tf.zeros([1]),name='bias')??z?=?tf.multiply(x,w)+b??
代碼解讀:x,y稱為占位符,說白了就是先把位置占上,一會就來人把這個位置用上啦,簡單的理解圖書館給小伙伴占座~~~
w表示變量,里面兩個參數分別為1維的[-1,1]? 之間的隨機數,后面那個是代表命名,這個隨意啦
b也表示變量,初始化是1維的0向量,后面參數也是命名
z代表w*x+b,multiply代表矩陣想乘
反向調整:
剛才說過正向生成的數值z與實際的值(真實值)之間的誤差,反向調整參數變量w和b
大體流程:正向生成一個值反向調整一下參數循環下去,直到參數調整到合適值為止
cost?=?tf.reduce_mean(tf.square(y-z))??learning_rate?=?0.01??optimizer?=?tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)??
代碼解讀:1、算出誤差? 2、定義學習率參數 3、優化器利用梯度下降方法使得誤差最小(還可以使用其它方法替代梯度下降法)
3、訓練模型
??init?=?tf.global_variables_initializer()????training_epochs?=?20??display_step?=?2??????with?tf.Session()?as?sess:??????sess.run(init)??????????????for?epoch?in?range(training_epochs):??????????for?(x,?y)?in?zip(train_X,?train_Y):??????????????sess.run(optimizer,?feed_dict={X:?x,?Y:?y})??????????????????????if?epoch?%?display_step?==?0:??????????????loss?=?sess.run(cost,?feed_dict={X:?train_X,?Y:train_Y})??????????????print?("Epoch:",?epoch+1,?"cost=",?loss,"W=",?sess.run(W),?"b=",?sess.run(b))??????????????if?not?(loss?==?"NA"?):??????????????????plotdata["batchsize"].append(epoch)??????????????????plotdata["loss"].append(loss)????????print?("?Finished!")??????print?("cost=",?sess.run(cost,?feed_dict={X:?train_X,?Y:?train_Y}),?"W=",?sess.run(W),?"b=",?sess.run(b))??
? ? ? ? ? ? ? ? ? ? ? ? ??
擬合圖形展示:
可視化展示誤差隨訓練步驟的變化
4、使用模型給一個學x值會得到一個 z 值
全部代碼:
????import?tensorflow?as?tf??import?numpy?as?np??import?matplotlib.pyplot?as?plt??????plotdata?=?{?"batchsize":[],?"loss":[]?}??????train_X?=?np.linspace(-1,?1,?100)??train_Y?=?2?*?train_X?+?np.random.randn(*train_X.shape)?*?0.3?????plt.plot(train_X,?train_Y,?'ro',?label='Original?data')??plt.legend()??plt.show()????????X?=?tf.placeholder("float")??Y?=?tf.placeholder("float")????W?=?tf.Variable(tf.random_normal([1]),?name="weight")??b?=?tf.Variable(tf.zeros([1]),?name="bias")??????z?=?tf.multiply(X,?W)+?b??????cost?=tf.reduce_mean(?tf.square(Y?-?z))??learning_rate?=?0.01??optimizer?=?tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)???????init?=?tf.global_variables_initializer()????training_epochs?=?20??display_step?=?2??????with?tf.Session()?as?sess:??????sess.run(init)??????????????for?epoch?in?range(training_epochs):??????????for?(x,?y)?in?zip(train_X,?train_Y):??????????????sess.run(optimizer,?feed_dict={X:?x,?Y:?y})??????????????????????if?epoch?%?display_step?==?0:??????????????loss?=?sess.run(cost,?feed_dict={X:?train_X,?Y:train_Y})??????????????print?("Epoch:",?epoch+1,?"cost=",?loss,"W=",?sess.run(W),?"b=",?sess.run(b))??????????????if?not?(loss?==?"NA"?):??????????????????plotdata["batchsize"].append(epoch)??????????????????plotdata["loss"].append(loss)????????print?("?Finished!")??????print?("cost=",?sess.run(cost,?feed_dict={X:?train_X,?Y:?train_Y}),?"W=",?sess.run(W),?"b=",?sess.run(b))????????????????plt.plot(train_X,?train_Y,?'ro',?label='Original?data')??????plt.plot(train_X,?sess.run(W)?*?train_X?+?sess.run(b),?label='Fitted?line')??????plt.legend()??????plt.show()????????print(plotdata['loss'])??????print(plotdata['batchsize'])??????????????plt.figure(1)??????plt.subplot(211)??????plt.plot(plotdata["batchsize"],?plotdata["loss"],?'b--')??????plt.xlabel('Minibatch?number')??????plt.ylabel('Loss')??????plt.title('Minibatch?run?vs.?Training?loss')????????plt.show()????????print?("x=0.2,z=",?sess.run(z,?feed_dict={X:?0.2}))??
總結
以上是生活随笔為你收集整理的tensorflow 就该这么学--1的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。