神经网络-反向传播
反向傳播
? ?? ? ? ? ? ? ? ? ? ? ?, ?loss=tf.reduce_mean(tf.square(y_-y))
? ? ? 4.反向傳播訓練方法:以減小loss值為優化目標
- ? ? ?train_step=tf.train.GradientDescentOptimizer(learning_rate).minimize(loss)
- ? ? ?train_step=tf.train.MomentumOptimizer(learning_rate,momentum).minimize(loss)
- ? ? ?train_step=tf.train.AdamOptimizer(learning_rate).minimize(loss)
- ? ? ?選擇其中一個就行,學習開始選擇一個比較小的值。
?
? ? ? 5.學習率:決定參數每次更新的幅度
import tensorflow as tf import numpy as np SIZE=8#一次喂入數據的組數 seed=23455#基于seed產生隨機數 rng=np.random.RandomState(seed)#隨機返回32*2(體積和重量)的矩陣,作為數據集(特征), data=rng.rand(32,2)#設置數據標簽 data_lab=[[int(x1+x2<1)] for (x1,x2) in data]#合格為1,不合格為0for j in range(len(data)):print("%d.data:%s ,data_lab:%s"%(j+1,data[j],data_lab[j]))#定義神經網絡的輸入,參數和輸出,定義前向傳播的過程 x=tf.compat.v1.placeholder(tf.float32,shape=(None,2))#輸入,只知道有兩個特征,不知道有多少組數據 y_=tf.compat.v1.placeholder(tf.float32,shape=(None,1))#合格以否的標簽,print(x,y_) 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_))#均方誤差計算loss train_step=tf.compat.v1.train.GradientDescentOptimizer(0.001).minimize(loss)#梯度下降,0.001為學習率 #train_step=tf.train.MomentumOptimizer(0.001,0.9).minimize(loss) #train_step=tf.train.AdamOptimizer(0.001).minimize(loss)#生成會話,訓練STEPS=3000輪 with tf.compat.v1.Session() as sess:init_op=tf.compat.v1.global_variables_initializer()#初始優化前的參數sess.run(init_op)#輸入目前(未訓練)的參數值print("未訓練參數w1:\n",sess.run(w1))print("未訓練參數w1:\n",sess.run(w2))steps=3200for i in range(steps):start=(i * SIZE) % 32end=start+SIZEsess.run(train_step,feed_dict={x:data[start:end],y_:data_lab[start:end]})#分段喂入數據total_loss=sess.run(loss,feed_dict={x:data,y_:data_lab})lossData.append(total_loss)if i % 500 == 0:print("After %d training step(s),loss on all data is %g"%(i,total_loss))print('\n')print("訓練后參數w1:\n",sess.run(w1))print("訓練后參數w2:\n",sess.run(w2))plt.plot(lossData) plt.show()loss在訓練3000輪過程中的變化
總結
- 上一篇: 【计算机网络复习 物理层】2.1.5 编
- 下一篇: 小白 LeetCode 5605 检查两