1. 程式人生 > >tensorflow學習筆記(2)-反向傳播

tensorflow學習筆記(2)-反向傳播

die AD col 更新 min with SQ 矩陣 glob

              tensorflow學習筆記(2)-反向傳播

  反向傳播是為了訓練模型參數,在所有參數上使用梯度下降,讓NN模型在的損失函數最小

  損失函數:學過機器學習logistic回歸都知道損失函數-就是預測值和真實值得差距,比如sigmod或者cross-entropy

  均方誤差:tf.reduce_mean(tf.square(y-y_))很好理解,假如在歐式空間只有兩個點的的話就是兩點間距離的平方,多點就是多點誤差的平方和除以對比點個數

  學習率:決定了參數每次更新的幅度

  反向傳播訓練方法:為了減小loss的值為優化目標

  

# -*- coding: utf-8 -*-
""" Created on Sat May 26 18:42:08 2018 @author: Administrator """ import tensorflow as tf import numpy as np BATCH_SIZE=8 seed=23455 #基於seed產生隨機數 rng=np.random.RandomState(seed) #隨機返回32行2列的矩陣 作為數據集輸入 X=rng.rand(32,2) #從X這個32行2列的矩陣中取出一行 判斷如果和小於1 給Y賦值1 如果和不小於1 給Y賦值0 #Y作為訓練集的標簽 Y=[[int((x0+x1)<1)] for
(x0,x1) in X] print(X) print(Y) #定義輸入,參數和輸出 x=tf.placeholder(tf.float32,shape=(None,2)) y_=tf.placeholder(tf.float32,shape=(None,1)) #2是特征值 3是隱藏層 1是輸出 w1=tf.Variable(tf.random_normal([2,3],stddev=1,seed=1)) w2=tf.Variable(tf.random_normal([3,1],stddev=1,seed=1)) a=tf.matmul(x,w1) y=tf.matmul(a,w2)
#定義損失函數以及反向傳播方法 loss=tf.reduce_mean(tf.square(y-y_)) train_step=tf.train.GradientDescentOptimizer(0.001).minimize(loss) #會話訓練 with tf.Session() as sess: init_op=tf.global_variables_initializer() sess.run(init_op) #輸出未訓練的參數值 print(sess.run(w1)) print(sess.run(w2)) #訓練3000次 STEPS=10000 for i in range(STEPS): start=(i*BATCH_SIZE)%32 end=BATCH_SIZE+start #每次訓練抽取start到end的數據 sess.run(train_step,feed_dict={x:X[start:end],y_:Y[start:end]}) #每500次打印一次參數 if i%500==0: total_loss=sess.run(loss,feed_dict={x:X,y_:Y}) print("在第%d次訓練,損失為%g"%(i,total_loss)) #輸出訓練後的參數 print("\n") print(sess.run(w1)) print(sess.run(w2))

這是輸出的內容

技術分享圖片

我們現在稍微改下參數比較下,首先是學習速率

當學習速率為0.1時候                        當學習速率為0.01

技術分享圖片                   技術分享圖片                       

可以看出來學習速率越大梯度下降越塊。

再來看看隱藏層

首先是隱藏層為4時候                        隱藏層為3時候

技術分享圖片                    技術分享圖片

現在還不知道隱藏層怎麽定義,知道以後再補上

問了群裏老哥:老哥回答

技術分享圖片

  

tensorflow學習筆記(2)-反向傳播