tensorflow利用RNN和双向RNN实现MNIST分类问题
来源:互联网 发布:中国移动10086软件 编辑:程序博客网 时间:2024/06/04 10:15
1.使用单向RNN
建立输入层,RNN层和输出层
n_steps * n_inputs = 28 * 28,读取的单位是图片中的一行像素
输入数据:x=[batch_size,n_steps,n_inputs]
输出数据:y=[batch_size,n_classes]
输入层:
输入数据:x=[batch_size*n_steps,n_inputs]
权重w=[n_inputs,n_hidden],偏置b=[n_hidden]
输出数据:x=[batch_size*n_steps,n_hidden]
RNN层:
输入n_steps个[batch_size,n_hidden],即对于展开的LSTM单元,一个LSTM单元输入一批数据
使用如下函数得到单向LSTM单元的输出汇总和最终状态:
output, final_state = tf.nn.dynamic_rnn(lstm_cell, x_in, initial_state=init_state, time_major=False)
x_in=[batch_size,n_steps,n_hidden],对于动态RNN,输入必须为一个tensor。
time_major针对x_in的格式,time_major=False,表示n_steps位置的数为展开步数;若为True,表示batch_size位置的数为展开步数。
输出数据的获取:
output=[batch_size,n_steps,n_hidden],与输入统一,需要降维,得到n_steps个[batch_size,n_hidden],最后一个即为输出数据
final_state=(c_state,h_state),其中h_state为最终输出的状态
输出层
import tensorflow as tfimport input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)learning_rate = 0.01max_samples = 40000batch_size = 128n_steps = 28n_inputs = 28n_hidden = 256n_classes = 10weights={ "weight_in": tf.Variable(tf.random_normal([n_inputs, n_hidden])), "weight_out": tf.Variable(tf.random_normal([n_hidden, n_classes]))}biases={ "biases_in":tf.Variable(tf.random_normal([n_hidden])), "biases_out": tf.Variable(tf.random_normal([n_classes]))}x = tf.placeholder(tf.float32, [None, n_steps, n_inputs])y = tf.placeholder(tf.float32, [None, n_classes])def RNN(x, weights, biases): x_in = tf.reshape(x, [-1, n_inputs]) x_in = tf.matmul(x_in, weights["weight_in"]) + biases["biases_in"] x_in = tf.reshape(x_in, [-1, n_steps, n_hidden]) lstm_cell = tf.contrib.rnn.BasicLSTMCell(n_hidden, forget_bias=1.0) init_state = lstm_cell.zero_state(batch_size, tf.float32) output, final_state = tf.nn.dynamic_rnn(lstm_cell, x_in, initial_state=init_state, time_major=False) y_ = tf.matmul(final_state[1], weights["weight_out"]) + biases["biases_out"] return y_prediction = RNN(x, weights, biases)cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)), tf.float32))init = tf.global_variables_initializer()with tf.Session() as sess: sess.run(init) step = 1 while step * batch_size < max_samples: batch_x, batch_y = mnist.train.next_batch(batch_size) batch_x = batch_x.reshape((batch_size, n_steps, n_inputs)) sess.run(optimizer, feed_dict={x: batch_x, y: batch_y}) if step % 10 == 0: accuracy_ = sess.run(accuracy, feed_dict={x: batch_x, y: batch_y}) print(accuracy_) step += 1
2.使用双向RNN
双向RNN
输出层
import tensorflow as tfimport input_datamnist = input_data.read_data_sets("MNIST_data/", one_hot=True)learning_rate = 0.01max_samples = 40000batch_size = 128n_steps = 28n_inputs = 28n_hidden = 256n_classes = 10x = tf.placeholder(tf.float32, [None, n_steps, n_inputs])y = tf.placeholder(tf.float32, [None, n_classes])weights = tf.random_normal([2 * n_hidden, n_classes])biases = tf.random_normal([n_classes])def BiRNN(x, weights, biases): x = tf.transpose(x, [1, 0, 2]) x = tf.reshape(x, [-1, n_inputs]) 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) y_ = tf.matmul(outputs[1], weights["weight_out"]) + biases["biases_out"] return y_prediction = BiRNN(x, weights, biases)cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=prediction, labels=y))optimizer = tf.train.AdamOptimizer(learning_rate).minimize(cost)accuracy = tf.reduce_mean(tf.cast(tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1)), tf.float32))init = tf.global_variables_initializer()with tf.Session() as sess: sess.run(init) step = 1 while step * batch_size < max_samples: batch_x, batch_y = mnist.train.next_batch(batch_size) batch_x = batch_x.reshape((batch_size, n_steps, n_inputs)) sess.run(optimizer, feed_dict={x: batch_x, y: batch_y}) if step % 10 == 0: accuracy = sess.run(accuracy, feed_dict={x: batch_x, y: batch_y}) print(accuracy) step += 1 x_batch = mnist.test.images[:1000].reshape((-1, n_steps, n_inputs)) y_batch = mnist.test.labels[:1000] print("Testing Accuracy:", sess.run(accuracy, feed_dict={x: x_batch, y: y_batch}))
- tensorflow利用RNN和双向RNN实现MNIST分类问题
- Tensorflow-rnn(mnist分类)
- 单向RNN和双向RNN在mnist数据集上的分类实验
- TensorFlow MNIST RNN LSTM
- CNN模型和RNN模型在分类问题中的应用(Tensorflow实现)
- Tensorflow学习: RNN-LSTM应用于MNIST数据分类
- 用RNN做MNIST分类
- RNN实践一:LSTM实现MNIST数字分类
- tensorflow 实现rnn
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
- TensorFlow (RNN)深度学习 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 序列标注问题 源码下载
- tensorflow构建RNN识别mnist手写数字
- cnn、rnn实现中文文本分类(基于tensorflow)
- TensorFlow (RNN)深度学习下 双向LSTM(BiLSTM)+CRF 实现 sequence labeling 双向LSTM+CRF跑序列标注问题
- tensorflow Examples:<4>实现RNN
- tensorflow学习笔记(三十九):双向rnn
- TensorFlow RNN 教程和代码
- TensorFlow系列(3)——基于MNIST数据集的RNN实现
- layer is not defined
- 远程服务器器获取session 信息失败,该如何应对
- c语言中结构(struct)知识点
- StringTie
- 欢迎使用CSDN-markdown编辑器
- tensorflow利用RNN和双向RNN实现MNIST分类问题
- java设计模式之单例模式
- java基础(3)- 程序流程控制
- c++学习笔记之指针
- java 计算两个时间相差几天,获取某天当月的第一天,最后一天
- Java Head First 第九章 构造器与垃圾收集器
- 乌镇互联网大会部分嘉宾分享要点实录
- 《主动学习在未标记数据中的应用》心得体会
- Lua第二课