反向傳播: 使訓練資料的損失函式最小
損失函式(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)
學習率 : 決定引數每次更新的幅度 (可以先選乙個比較小的值填)
學習筆記:
產生乙個隨機數組
importnumpy 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 反向傳播演算法中的學習率為使用者...
反向傳播演算法
反向傳播演算法的工作機制為對 錯誤的神經元施以懲罰。從輸出層開始,向上層次查詢 錯誤的神經元,微調這些神經元輸入值的權重,以達到修復輸出錯誤的目的。神經元之所以給出錯誤的 原因在於它前面為其提供輸入的神經元,更確切地說是由兩個神經元之間的權重及輸入值決定的。我們可以嘗試對權重進行微調。每次調整的幅度...