簡單的RNN和BP多層網路之間的區別

2022-04-19 08:04:06 字數 1997 閱讀 2638

先來個簡單的多層網路

關於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...