如何用RNN进行分类
发表于:2025-01-27 作者:千家信息网编辑
千家信息网最后更新 2025年01月27日,本篇文章给大家分享的是有关如何用RNN进行分类,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。今天我们介绍的是RNN是如何玩分类的。MNI
千家信息网最后更新 2025年01月27日如何用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安全错误
数据库的锁怎样保障安全
数据库和php
网络安全工程师成长路径
第五人格第三方服务器收费吗
远程管理web服务器
本地服务器配置代理
用手机登录连尚网络安全吗
db2数据库 大于小于
java数据库连接的技术
关系数据库主要特点的叙述
工业软件开发社区
网络技术期末知识点总结
趣秒荟互联网科技有限公司
武汉优美网络技术公司
软件开发上海公司24薪靠谱吗
湖湘杯网络安全大赛内容
能用服务器当主机吗
社交软件租服务器多少钱
小学 网络安全 反思
吴伟 杭州 网络安全
dhl软件开发
西安网络安全宣传周开幕式门票
东营瓷砖库存软件开发
宁畅服务器介绍
软件开发后
数据库高级操作个人总结
深圳美联网络技术有限公司
网上机票订阅系统数据库部分
ovid数据库开始时间
云服务器数据库密码忘记
如何在国外架设服务器