日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

神经网络-反向传播

發布時間:2024/7/19 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 神经网络-反向传播 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

反向傳播

  • 反向傳播---->訓練參數,在所有參數上使用梯度下降。使NN模型在訓練數據上的損失函數最小。
  • 損失函數(loss):預測值(y)與已知答案(y_)的差距。
  • 均方誤差MSE:
  • ? ?? ? ? ? ? ? ? ? ? ? ?, ?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輪過程中的變化

    總結

    以上是生活随笔為你收集整理的神经网络-反向传播的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。