反向傳播 2019 07 20

2022-06-10 23:45:19 字數 2679 閱讀 6436

反向傳播:  使訓練資料的損失函式最小

損失函式(loss) : **值(y) 與 已知答案(y_)的差距

均方誤差 mse : mse(y_, y) = $\frac^\left ( y -y{}'\right )}$

loss = tf.reduce_mean(tf.square(y - y_))

反向傳播訓練方法: 以減小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)

學習率 : 決定引數每次更新的幅度  (可以先選乙個比較小的值填)  

學習筆記:

產生乙個隨機數組

import

numpy as np

rng =np.random.randomstate(seed)

x = rng.rand(0, 1, (32, 2)) #

產生乙個每個隨機數都在 [0, 1]區間的32行2列的陣列

#x = rng.rand(32, 2) 產生乙個隨機的32行2列的陣列

python推導式

x = [i for i in range(0, 10) if i % 2 ==0]

print x

輸出:

[0, 2, 4, 6, 8]

python求平均值

tf.reduce_mean()

#

coding:utf-8

2 import

tensorflow as tf

3 import

numpy as np

4 batch_size = 8

5 seed = 1

6 #基於seed產生隨機數

7 rd =np.random.randomstate(seed)

8 #隨機數返回32行2列的矩陣

9 x = rd.rand(32, 2)

10 #

從這個32行2列的矩陣中 依次取出一行 判斷 如果兩個元素相加 < 1 則給y賦值1 否》 則賦值 0

11 y = [[int(x0 + x1 < 1)] for (x0, x1) in

x] 12 print

"x:\n",x

13 print

14 print

"y:\n",y

15none,

16 #

定義神經網路的輸入 引數和輸出, 定義前向傳播過程.

17 x = tf.placeholder(tf.float32, shape = (none, 2))

18 y_ = tf.placeholder(tf.float32, shape = (none, 1))

19 20 w1 = tf.variable(tf.random_normal([2, 3]))

21 w2 = tf.variable(tf.random_normal([3, 1]))

22 23 a =tf.matmul(x, w1)

24 y =tf.matmul(a, w2)

25 26 #

定義損失函式及神經網路的傳播方法

27 loss = tf.reduce_mean(tf.square(y_ -y))

28 train_step = tf.train.gradientdescentoptimizer(0.001).minimize(loss)

29 30 #

生成會話, 訓練steps輪

31with tf.session() as sess:

32sess.run(tf.global_variables_initializer())

33 #

iiii輸出未經過訓練的引數取值

34 print

"w1:\n

", sess.run(w1)

35 print

"w2:\n

", sess.run(w2)

36 print"\n

" 37

38 #

訓練模型

39 steps = 3000

40 for i in

range(steps):

41 start = (i * batch_size) % 32

42 end = start +batch_size

43 sess.run(train_step,feed_dict =)

44 if i % 500 == 0: #

每500次輸出當前的loss值

45 total_loss = sess.run(loss,feed_dict =)

46 print i, total_loss

反向傳播演算法

首先我們對數學符號做一些約定。我們首先考慮簡單的情況 前饋神經網路,如圖 所示。我們先假設任意兩層之間沒有權值共享。方向傳播演算法本質上就是梯度下降演算法,所以我們要對損失函式關於每個引數求導。設單個輸入例項 x 損失函式為 j x 那麼我們要求解 j wi 和 j bi i 1,2,n 對 j 關...

彈性反向傳播

正常使用的反向傳播演算法有兩個缺點待解決,其一為學習過程中學習率的選擇較難,一旦學習率選擇不當會造成學習效果不好 其二為反向傳播演算法的梯度瀰散作用,即距離輸出層越遠的神經元學習的速度越慢。martin riedmiller也因此提出了彈性反向傳播演算法 rprop 反向傳播演算法中的學習率為使用者...

反向傳播演算法

反向傳播演算法的工作機制為對 錯誤的神經元施以懲罰。從輸出層開始,向上層次查詢 錯誤的神經元,微調這些神經元輸入值的權重,以達到修復輸出錯誤的目的。神經元之所以給出錯誤的 原因在於它前面為其提供輸入的神經元,更確切地說是由兩個神經元之間的權重及輸入值決定的。我們可以嘗試對權重進行微調。每次調整的幅度...