国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

用tensorflow構(gòu)建線性回歸模型的示例代碼

2020-01-04 15:46:15
字體:
供稿:網(wǎng)友

用tensorflow構(gòu)建簡單的線性回歸模型是tensorflow的一個(gè)基礎(chǔ)樣例,但是原有的樣例存在一些問題,我在實(shí)際調(diào)試的過程中做了一點(diǎn)自己的改進(jìn),并且有一些體會(huì)。

首先總結(jié)一下tf構(gòu)建模型的總體套路

1、先定義模型的整體圖結(jié)構(gòu),未知的部分,比如輸入就用placeholder來代替。

2、再定義最后與目標(biāo)的誤差函數(shù)。

3、最后選擇優(yōu)化方法。

另外幾個(gè)值得注意的地方是:

1、tensorflow構(gòu)建模型第一步是先用代碼搭建圖模型,此時(shí)圖模型是靜止的,是不產(chǎn)生任何運(yùn)算結(jié)果的,必須使用Session來驅(qū)動(dòng)。

2、第二步根據(jù)問題的不同要求構(gòu)建不同的誤差函數(shù),這個(gè)函數(shù)就是要求優(yōu)化的函數(shù)。

3、調(diào)用合適的優(yōu)化器優(yōu)化誤差函數(shù),注意,此時(shí)反向傳播調(diào)整參數(shù)的過程隱藏在了圖模型當(dāng)中,并沒有顯式顯現(xiàn)出來。

4、tensorflow的中文意思是張量流動(dòng),也就是說有兩個(gè)意思,一個(gè)是參與運(yùn)算的不僅僅是標(biāo)量或是矩陣,甚至可以是具有很高維度的張量,第二個(gè)意思是這些數(shù)據(jù)在圖模型中流動(dòng),不停地更新。

5、session的run函數(shù)中,按照傳入的操作向上查找,凡是操作中涉及的無論是變量、常量都要參與運(yùn)算,占位符則要在run過程中以字典形式傳入。

以上時(shí)tensorflow的一點(diǎn)認(rèn)識(shí),下面是關(guān)于梯度下降的一點(diǎn)新認(rèn)識(shí)。

1、梯度下降法分為批量梯度下降和隨機(jī)梯度下降法,第一種是所有數(shù)據(jù)都參與運(yùn)算后,計(jì)算誤差函數(shù),根據(jù)此誤差函數(shù)來更新模型參數(shù),實(shí)際調(diào)試發(fā)現(xiàn),如果定義誤差函數(shù)為平方誤差函數(shù),這個(gè)值很快就會(huì)飛掉,原因是,批量平方誤差都加起來可能會(huì)很大,如果此時(shí)學(xué)習(xí)率比較高,那么調(diào)整就會(huì)過,造成模型參數(shù)向一個(gè)方向大幅調(diào)整,造成最終結(jié)果發(fā)散。所以這個(gè)時(shí)候要降低學(xué)習(xí)率,讓參數(shù)變化不要太快。

2、隨機(jī)梯度下降法,每次用一個(gè)數(shù)據(jù)計(jì)算誤差函數(shù),然后更新模型參數(shù),這個(gè)方法有可能會(huì)造成結(jié)果出現(xiàn)震蕩,而且麻煩的是由于要一個(gè)個(gè)取出數(shù)據(jù)參與運(yùn)算,而不是像批量計(jì)算那樣采用了廣播或者向量化乘法的機(jī)制,收斂會(huì)慢一些。但是速度要比使用批量梯度下降要快,原因是不需要每次計(jì)算全部數(shù)據(jù)的梯度了。比較折中的辦法是mini-batch,也就是每次選用一小部分?jǐn)?shù)據(jù)做梯度下降,目前這也是最為常用的方法了。

3、epoch概念:所有樣本集過完一輪,就是一個(gè)epoch,很明顯,如果是嚴(yán)格的隨機(jī)梯度下降法,一個(gè)epoch內(nèi)更新了樣本個(gè)數(shù)這么多次參數(shù),而批量法只更新了一次。

以上是我個(gè)人的一點(diǎn)認(rèn)識(shí),希望大家看到有不對(duì)的地方及時(shí)批評(píng)指針,不勝感激!

#encoding=utf-8 __author__ = 'freedom' import tensorflow as tf import numpy as np  def createData(dataNum,w,b,sigma):  train_x = np.arange(dataNum)  train_y = w*train_x+b+np.random.randn()*sigma  #print train_x  #print train_y  return train_x,train_y  def linerRegression(train_x,train_y,epoch=100000,rate = 0.000001):  train_x = np.array(train_x)  train_y = np.array(train_y)  n = train_x.shape[0]  x = tf.placeholder("float")  y = tf.placeholder("float")  w = tf.Variable(tf.random_normal([1])) # 生成隨機(jī)權(quán)重  b = tf.Variable(tf.random_normal([1]))   pred = tf.add(tf.mul(x,w),b)  loss = tf.reduce_sum(tf.pow(pred-y,2))  optimizer = tf.train.GradientDescentOptimizer(rate).minimize(loss)  init = tf.initialize_all_variables()   sess = tf.Session()  sess.run(init)  print 'w start is ',sess.run(w)  print 'b start is ',sess.run(b)  for index in range(epoch):   #for tx,ty in zip(train_x,train_y):    #sess.run(optimizer,{x:tx,y:ty})   sess.run(optimizer,{x:train_x,y:train_y})   # print 'w is ',sess.run(w)   # print 'b is ',sess.run(b)   # print 'pred is ',sess.run(pred,{x:train_x})   # print 'loss is ',sess.run(loss,{x:train_x,y:train_y})   #print '------------------'  print 'loss is ',sess.run(loss,{x:train_x,y:train_y})  w = sess.run(w)  b = sess.run(b)  return w,b  def predictionTest(test_x,test_y,w,b):  W = tf.placeholder(tf.float32)  B = tf.placeholder(tf.float32)  X = tf.placeholder(tf.float32)  Y = tf.placeholder(tf.float32)  n = test_x.shape[0]  pred = tf.add(tf.mul(X,W),B)  loss = tf.reduce_mean(tf.pow(pred-Y,2))  sess = tf.Session()  loss = sess.run(loss,{X:test_x,Y:test_y,W:w,B:b})  return loss  if __name__ == "__main__":  train_x,train_y = createData(50,2.0,7.0,1.0)  test_x,test_y = createData(20,2.0,7.0,1.0)  w,b = linerRegression(train_x,train_y)  print 'weights',w  print 'bias',b  loss = predictionTest(test_x,test_y,w,b)  print loss 

以上就是本文的全部內(nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持VEVB武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到python教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 鹰潭市| 仁寿县| 上栗县| 宣恩县| 宁都县| 剑川县| 巴中市| 凭祥市| 洱源县| 龙井市| 太仆寺旗| 景泰县| 图木舒克市| 剑阁县| 河南省| 丹江口市| 惠安县| 沙田区| 永修县| 洪洞县| 于田县| 工布江达县| 甘谷县| 邮箱| 南丹县| 壤塘县| 佛山市| 共和县| 皮山县| 南皮县| 江城| 宁远县| 宜昌市| 阿荣旗| 镇原县| 奉新县| 湘乡市| 桐柏县| 和龙市| 岫岩| 洛浦县|