先來個簡單的多層網路
關於rnn出現的原因,rnn詳細的原理,已經有很多博文講解的非常棒了。
如下:
多層網路
x = tf.placeholder(tf.float32,[none,256])
y = tf.placeholder(tf.float32,[none,10])
w1 = tf.variable(tf.random_normal([256,1024]))
b1 = tf.variable(tf.zeros([1024]))
x1 = tf.nn.relu(tf.multiply(w1,x)+b1)
w2 = tf.variable(tf.random_normal(1024,10))
b2 = tf.variable(tf.zeros([10]))
pred = tf.nn.softmax(tf.multiply(w2,x1)+b2)
loss = -tf.reduce_sum(pred*tf.log(y))
op = tf.train.gradientdescentoptimizer(0.001).minimize(loss)
在寫個簡單的rnn網路
import tensorflow as tf
# rnn
batch_size = 5
truncated_series_length = 50000
state_size = 4
x = tf.placeholder(tf.float32,[batch_size,truncated_series_length])
y = tf.placeholder(tf.float32,[batch_size,truncated_series_length])
'''最關鍵的點,好多書上沒寫的,就是這個引數,是參與迴圈的引數
bp網路中沒有這個引數
'''init_state = tf.placeholder(tf.float32,[batch_size,state_size])
# 把x,y拆開,我的理解是為了方便看得到迴圈的時候state是如何參與迴圈的
xs = tf.unstack(x,axis=1)
ys = tf.unstack(y,axis=1)
current_state = init_state
for currentx,currenty in zip(xs,ys):
w1 = tf.variable(tf.random_normal([truncated_series_length+ state_size,truncated_series_length]))
b1 = tf.variable(tf.zeros([truncated_series_length]))
#這個就是和bp的區別,把迴圈鏈結起來
concatedx = tf.concat(xs,current_state)
y1 = tf.nn.tanh(tf.multiply(w1,x) + b1)
#區別current_state = y1
#注釋掉這一層,讓看上去更容易理解為什麼叫做迴圈網路
#w2= tf.variable(tf.random_normal([truncated_series_length,truncated_series_length]))
#b2 = tf.variable(tf.zeros([truncated_series_length]))
#y2 = tf.multiply(w2,y1)+b2
loss = -tf.reduce_sum(y1*tf.log(currenty))
個人感覺兩個的主要區別在於bp網路中每個引數每一步都是獨立的,和下乙個樣本之間不相互依賴,而rnn有乙個引數參與迴圈。另外rnn的一些引數的設定,我還不是太熟悉,還有待於深入。另外很多書上講解rnn用的是tf.contrib.layers或tf.contrib.cnn的類庫去描繪,不是太利於理解底層的東西。所以我選擇了用這種寫法去表述。不對之處請多多指教。 BP演算法和RNN 雙向RNN的理解
我們在學習某種神經網路模型時,一定要把如下幾點理解透了,才算真正理解了這種神經網路。網路的架構 包含那些層,每層的輸入和輸出,有那些模型引數是待優化的 前向傳播演算法 損失函式的定義 後向傳播演算法 什麼情況下認為是發現了過擬合,怎麼進行優化。很多介紹深度學習的書籍,在介紹全連線神經網路時,對這幾個...
DNN中的BP和RNN中的BPTT推導
參考部落格 1 反向傳播演算法 backpropagation 深層神經網路 deep neural network,dnn 由輸入層 多個隱藏層和輸出層組成,任務分為分類和回歸兩大類別。如果我們使用深層神經網路做了乙個 任務,輸出為y tilde y 真實的為y,這時候就需要定義乙個損失函式來評價...
bp神經網路的簡單理解和使用
這裡構建的網路實際就是建立x到y的對映函式 a 1 1 10 輸入矩陣其實就是x t 1 1 5 6 1 2 期望矩陣就是y plot a,t net newff minmax a 5,1 trainlm 設定網路相關引數 net.trainparam.goal 0.001 net.trainpar...