tensorflow實現迴圈神經網路

2021-08-15 12:56:30 字數 2967 閱讀 8872

迴圈神經網路出現於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...