迴圈神經網路出現於20世紀80年代,在其發展早期,應用部署特別豐富。最近幾年由於神經網路結構的進步和gpu上深度學習訓練效率的突破,rnn變得越來越流行。rnn對時間序列資料非常有效,其每個神經元可通過內部元件儲存之前輸入的資訊。
人每次思考時不會重頭開始,而是保留之前思考的一些結果為現在的決策提供支援。
下面我們將rnn用在手寫數字識別上。
# tensorflow 實現遞迴神經網路
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
from tensorflow.contrib import rnn
mnist = input_data.read_data_sets("mnist_data", one_hot=true)
# 輸入是28*28
n_inputs = 28 # 輸入一行,一行有28個資料
max_time = 28 # 一共28行
lstm_size = 200#隱層單元
n_class = 10#分類個數
batch_size = 50#每個批次樣本大小
n_batch = mnist.train.num_examples // batch_size #批次個數
x = tf.placeholder(tf.float32, [none, 784])
y = tf.placeholder(tf.float32, [none, 10])
#初始化權值
weights = tf.variable(tf.truncated_normal([lstm_size, n_class], stddev = 0.1))
biase = tf.variable(tf.constant(0.1, shape=[n_class]))
#定義rnn網路
def rnn(x,weights,biases):
# inputs=[batch_size, max_time, n_inputs]
inputs = tf.reshape(x,[-1,max_time,n_inputs])
#定義lstm基本cell
lstm_cell = rnn.basiclstmcell(lstm_size)
# final_state[0]是cell state
# final_state[1]是hidden_state
outputs,final_state = tf.nn.dynamic_rnn(lstm_cell,inputs,dtype=tf.float32)
results = tf.nn.softmax(tf.matmul(final_state[1],weights) + biases)
return results
def lstm(x, weights, biase):
#inputs format : [batch_size, max_time, n_inputs]
inputs = tf.reshape(x, [-1, max_time, n_inputs])
#定義lstm基本cell
lstm_cell = rnn.basiclstmcell(lstm_size)
outputs, final_state = tf.nn.dynamic_rnn(lstm_cell, inputs, dtype=tf.float32)
results = tf.nn.softmax(tf.matmul(final_state[1], weights) + biase)
return results
#返回結果
prediction = lstm(x, weights, biase) # rnn
#損失函式
cross_entropy = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(labels=y, logits=prediction))
#優化器
train_step = tf.train.adamoptimizer(1e-4).minimize(cross_entropy)
#計算準確率
correct_prediction = tf.equal(tf.argmax(y, 1), tf.argmax(prediction, 1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction, tf.float32))
init = tf.global_variables_initializer()
with tf.session() as sess:
sess.run(init)
for epoch in range(61):
for batch in range(batch_size):
batch_xs, batch_ys = mnist.train.next_batch(batch_size)
sess.run(train_step, feed_dict=)
acc = sess.run(accuracy, feed_dict=)
print("iter " + str(epoch) + ", testing accuracy= " + str(acc))
最終迭代結果為:
iter 54, testing accuracy= 0.8411
iter 55, testing accuracy= 0.8555
iter 56, testing accuracy= 0.8968
iter 57, testing accuracy= 0.9022
iter 58, testing accuracy= 0.9109
iter 59, testing accuracy= 0.907
iter 60, testing accuracy= 0.9185
tensorflow安裝神坑
莫名的,我之前安裝的tensorflow又用不了了,並且不論怎麼重新安裝都會報錯。1.importerror dll load failed 找不到指定的模組。這個錯誤在我不停解除安裝不停重灌中一直存在,直到我在乙個博主安裝細節中找到 這一步網上有很多安裝方法,有pip的,有conda的。但是,大部...
Tensorflow實現乙個簡單的卷積神經網路
今天對照tensorflow的書,實現了乙個簡單的卷積神經網路。基於mnist資料集。在神經網路還未出現之前,在處理影象的問題上都是使用的特徵工程 如sift 特徵工程是有侷限性的。cnn被用於影象處理,不需要將特徵提取和分類訓練兩個過程分開,它在訓練時就自動提取了最有效的特徵。卷積神經網路由多個卷...
使用TensorFlow在瀏覽器中實現神經網路
什麼是神經網路 neural network 神經網路技術是通過電腦程式來從資料中學習,它是基於人類大腦學習的過程建立的。首先,建立神經元,然後鏈結在一起,互相傳送訊息 其次,網路是用來解決問題的,每次加強通往成功的鏈結,減弱通往失敗的鏈結。更詳細的神經網路介紹可以前往michael nielsen...