【tensorflow】神經網絡的一些基本概念(前向傳播、反向傳播、損失函數、梯度下降法、學習率)和設計過程


當今人工智能主流方向 —— 連接主義,即仿腦神經元連接,實現感性思維,如神經網絡。

 

神經網絡的一般設計過程:

  1. 准備數據:采集大量“特征/標簽”數據
  2. 搭建網絡:搭建神經網絡結構
  3. 優化參數:訓練網絡獲取最佳參數(反向傳播)
  4. 應用網絡:將網絡保存為模型,輸入新數據,輸出分類或預測結果(前向傳播)

 

前向傳播
y = x * w + b,輸入x,計算出y的過程叫做前向傳播

 

損失函數:可預測值(y)與標准答案(y_)的差距,定量判斷w、b的優劣。

當損失函數輸出最小時,參數w、b會出現最優值。

均方誤差是一種常用的損失函數。

 

梯度下降

目的:找到一組w、b,使得損失函數最小。

梯度:損失函數對各參數求偏導后的向量。損失函數梯度下降的方向,就是損失函數減小的方向。

梯度下降法:沿損失函數梯度下降的方向,尋找損失函數的最小值,得到最優參數的方法。

 

學習率 lr:梯度下降的速度。

學習率過小,參數更新會很慢;

學習率過大,參數更新會跳過最小值。

 

反向傳播

首先設置反向傳播迭代次數,在每次迭代中,根據下圖公式,迭代更新所有參數。

 

 

反向傳播(使用梯度下降法,使損失函數最小)

代碼示例:

import tensorflow as tf # w的初始值為5,設置為可訓練
w = tf.Variable(tf.constant(5, dtype=tf.float32)) # 學習率為0.2
lr = 0.2
# 數據集喂入神經網絡30次
epoch = 30

# 數據集級別的循環,每個epoch循環一次數據集
for epoch in range(epoch): # 使用with結構定義loss函數,gradient函數告知誰對誰求導
 with tf.GradientTape() as tape: # 損失函數定義為(w+1)^2
        loss = tf.square(w + 1) grads = tape.gradient(loss, w) # assign_sub函數:變量自減,即:w -= lr*grads
    w.assign_sub(lr * grads) print("After %s epoch,w is %f,loss is %f" % (epoch, w.numpy(), loss)) # 最終結果:損失函數最小值為 loss = 0.0,最優參數為 w = -1

 輸出結果:

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM