雙向迴圈神經網路tensorflow實現

2021-08-02 19:55:58 字數 1956 閱讀 3897

雙向迴圈神經網路不僅能捕獲當前狀態與之前狀態的聯絡,也能捕獲與之後的狀態的聯絡。

#coding:utf-8

import tensorflow as tf

import numpy as np

from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('/tmp/data',one_hot = true)

learning_rate = 0.01

max_samples = 400000

batch_size = 128

display_step = 10

n_input = 28

#影象的寬度

n_steps = 28

#lstm的展開步數,影象的高

n_hidden = 256

n_classes = 10

x = tf.placeholder('float',[none,n_steps,n_input])#none 高度 寬度

y = tf.placeholder('float',[none,n_classes])

weights = tf.variable(tf.random_normal([2*n_hidden,n_classes]))

biases = tf.variable(tf.random_normal([n_classes]))

defbirnn

(x,weights,biases):

x = tf.transpose(x,[1,0,2])

x = tf.reshape(x,[-1,n_input])

x = tf.split(x,n_steps)

lstm_fw_cell = tf.contrib.rnn.basiclstmcell(n_hidden,forget_bias = 1.0)

lstm_bw_cell = tf.contrib.rnn.basiclstmcell(n_hidden,forget_bias = 1.0)

outputs,_,_ = tf.contrib.rnn.static_bidirectional_rnn(lstm_fw_cell,lstm_bw_cell,x,dtype = tf.float32)

return tf.matmul(outputs[-1],weights)+biases

pred = birnn(x,weights,biases)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits = pred,labels = y))

optimizer = tf.train.adamoptimizer(learning_rate=learning_rate).minimize(cost)

correct_pred = tf.equal(tf.argmax(pred,1),tf.argmax(y,1))

accuracy = tf.reduce_mean(tf.cast(correct_pred,tf.float32))

init = tf.global_variables_initializer()

with tf.session() as sess:

sess.run(init)

step = 1

while step*batch_sizeif step % display_step ==0:

acc = sess.run(accuracy,feed_dict=)

loss = sess.run(cost,feed_dict=)

print

"step",step," acc = ",acc," lost = ",loss

step += 1

print

"finished!"

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

原文 迴圈神經網路也可以畫成下面這個樣子 對於語言模型來說,很多時候光看前面的詞是不夠的,比如下面這句話 我的手機壞了,我打算 一部新手機。可以想象,如果我們只看橫線前面的詞,手機壞了,那麼我是打算修一修?換一部新的?還是大哭一場?這些都是無法確定的。但如果我們也看到了橫線後面的詞是 一部新手機 那...

迴圈神經網路

特點 上一階段 時間步 的輸出作為輸入進入當前時間步。迴圈神經網路由迴圈神經原組成,迴圈神經元一般有兩個輸入,乙個是前階段的資訊,乙個是當前階段的資訊。同時產生乙個輸出,可以作為下一階段的輸入。迴圈神經網路採用多種模型。左上 每個時間步有乙個輸入,同時產生乙個輸出 右上 一串輸入,最後產生乙個輸出。...