如何用RNN进行分类
发表于:2025-12-02 作者:千家信息网编辑
千家信息网最后更新 2025年12月02日,本篇文章给大家分享的是有关如何用RNN进行分类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天我们介绍的是RNN是如何玩分类的。MNI
千家信息网最后更新 2025年12月02日如何用RNN进行分类
本篇文章给大家分享的是有关如何用RNN进行分类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。
今天我们介绍的是RNN是如何玩分类的。
MNIST数据集,我们都已经很熟悉了,是一个手写数字的数据集,之前我们用它来实战CNN分类器和机器学习的方法(在公众号中回复"MNIST",即可免费下载)。今天我们就用RNN来对MNIST数据集进行一个预测。
这个时候,我们需要将每一张数据图像当成一个28x28的序列信号(图像的大小为28x28pixels)。对于整个网络框架,我们使用一个150个循环神经元外加一个有10个神经元的全连接层(每个类对应一个),最后接一个softmax层。如下:
整个模型的构建阶段,也很直接,跟我们前几期学的dnn构建方法非常类似,这里只是用了没有展开的RNN代替了之前的隐藏层,需要注意的是最后的全连接层连接的是RNN的状态tensor,该状态tensor仅仅包含了RNN的最后一个状态,并且y是目标类别。
from tensorflow.contrib.layers import fully_connected
n_steps = 28
n_inputs = 28
n_neurons = 150
n_outputs = 10
learning_rate = 0.001
X = tf.placeholder(tf.float32, [None, n_steps, n_inputs])
y = tf.placeholder(tf.int32, [None])
basic_cell = tf.contrib.rnn.BasicRNNCell(num_units=n_neurons)
outputs, states = tf.nn.dynamic_rnn(basic_cell, X, dtype=tf.float32)
logits = fully_connected(states, n_outputs, activation_fn=None)
xentropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
labels=y, logits=logits)
loss = tf.reduce_mean(xentropy)
optimizer = tf.train.AdamOptimizer(learning_rate=learning_rate)
training_op = optimizer.minimize(loss)
correct = tf.nn.in_top_k(logits, y, 1)
accuracy = tf.reduce_mean(tf.cast(correct, tf.float32))
init = tf.global_variables_initializer()
接下来,我们加载数据集,并对数据集进行reshape,如下:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/")
X_test = mnist.test.images.reshape((-1, n_steps, n_inputs))
y_test = mnist.test.labels
现在,我们将对上面的RNN进行training,在执行阶段跟之前的dnn也是非常类似的,如下:
n_epochs = 100
batch_size = 150
with tf.Session() as sess:
init.run()
for epoch in range(n_epochs):
for iteration in range(mnist.train.num_examples // batch_size):
X_batch, y_batch = mnist.train.next_batch(batch_size)
X_batch = X_batch.reshape((-1, n_steps, n_inputs))
sess.run(training_op, feed_dict={X: X_batch, y: y_batch})
acc_train = accuracy.eval(feed_dict={X: X_batch, y: y_batch})
acc_test = accuracy.eval(feed_dict={X: X_test, y: y_test})
print(epoch, "Train accuracy:", acc_train, "Test accuracy:", acc_test)
输出的结果如下:
0 Train accuracy: 0.713333 Test accuracy: 0.7299
1 Train accuracy: 0.766667 Test accuracy: 0.7977
...
98 Train accuracy: 0.986667 Test accuracy: 0.9777
99 Train accuracy: 0.986667 Test accuracy: 0.9809
最终得到了98%的准确率,还挺不错的,如果我们调整下超参数或者RNN权重初始化的方式,训练的更久一些,或者加一些正则化的方法,结果应该还会更好。
以上就是如何用RNN进行分类,小编相信有部分知识点可能是我们日常工作会见到或用到的。希望你能通过这篇文章学到更多知识。更多详情敬请关注行业资讯频道。
数据
分类
方法
状态
全连
图像
更多
知识
神经
神经元
篇文章
结果
阶段
学习
不错
实用
接下来
信号
公众
准确率
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
数据库系统是怎么完成任务的
零基础还建议学软件开发么
单片机存储数据库
网络安全工程线怎么接续
局域网客户服务器
存储服务器怎么关管理
我的数据库技术
糖豆人怎么开服务器
同邻互联网科技
普通服务器的牌子
软件开发到销售的账务处理
中国电信网络技术二面会提问什么
网络技术维修学徒
服务器节点url
客户端与服务器通讯源码
接龙服务器培训需求征集
文本框怎么显示表格数据库
qq上百万网络技术
饥荒联机版换电脑服务器
801网络安全就业实训
it游戏软件开发工作时间
什么是数据库中的测试表
网络安全工程线怎么接续
网络技术总监薪资
服务器开机后一直滴的响
闻泰服务器怎么样
重庆什么是分布式存储服务器
换数据库后启动不了怎么回事
男孩学网络安全工程师
河南放心软件开发