循环神经网络RNN用于分类任务

news/2025/3/30 3:00:20/

RNN是一类拥有隐藏状态,允许以前的输出可用于当前输入的神经网络,

 输入一个序列,对于序列中的每个元素与前一个元素的隐藏状态一起作为RNN的输入,通过计算当前的输出和隐藏状态。当前的影藏状态作为下一个单元的输入...

 

 RNN的种类

上图中的红色方块代表输入,蓝色方块代表输出,绿色方块代表

一对一(one to one)

一对一的结构一般指经典的卷积神经网络和全连接神经网络,被誉为香草神经网络,它们处理固定大小的输入,并输出固定大小的输出,主要用于图像分类任务。

下面介绍循环神经网络RNN的几种结构和其应用:

多对一(many to one)

多对一结构用于分类,如情感分类(输入一个句子,判断是积极还是消极的情感)

 一对多(one to many)

一对多可用于生成,如音乐生成,还可以用于图像字幕(输入一张图片,输出一个文本句子)

多对多(many to many)

多对多结构可用于机器翻译(输入一个英文句子,输出一个中文句子)和视频分类(视频中的多个帧作为输入,对视频中的每一帧进行分类)

RNN多对一用于图像分类

下面介绍使用RNN进行分类(图像分类)的方法。RNN用于分类任务的结构是多对一结构。假设图像的尺寸是28x28的黑白图片,将每一个张图片作为RNN的输入,每一行作为一个输入特征,所有的行构成一个序列。

RNN的输出只选择最后一行的输出(使用out[:, -1, :]),这就是多对一的精髓。最后再套一个全连接层,使用交叉熵作为判断准则。

RNN图像分类的示例代码

import torch
import torch.nn as nn
import torchvision
import torchvision.transforms as transforms
import matplotlib.pyplot as plt
from torch.utils.data import DataLoaderimport os
os.environ["KMP_DUPLICATE_LIB_OK"] = "TRUE"# Device configuration
device = torch.device('cuda' if torch.cuda.is_available() else 'cpu')# Hyper-parameters 
# input_size = 784  # 28x28
hidden_size = 128
num_classes = 10
num_epochs = 2
batch_size = 100
learning_rate = 0.001input_size = 28
sequence_length = 28
num_layers = 2# MNIST dataset 
train_dataset = torchvision.datasets.MNIST(root='./data', train=True, transform=transforms.ToTensor(),  download=True)test_dataset = torchvision.datasets.MNIST(root='./data', train=False, transform=transforms.ToTensor())# Data loader
train_loader = DataLoader(dataset=train_dataset,batch_size=batch_size, shuffle=True)test_loader = DataLoader(dataset=test_dataset,batch_size=batch_size, shuffle=False)examples = iter(test_loader)
example_data, example_targets = next(examples)# for i in range(6):
#     plt.subplot(2,3,i+1)
#     plt.imshow(example_data[i][0], cmap='gray')
# plt.show()# Fully connected neural network with one hidden layer
class RNN(nn.Module):def __init__(self, input_size, hidden_size, num_layers, num_classes):super(RNN, self).__init__()self.num_layers = num_layersself.hidden_size = hidden_sizeself.rnn = nn.RNN(input_size, hidden_size, num_layers, batch_first=True)#  x: (batch_size, sequence_len, input_size)self.fc = nn.Linear(hidden_size, num_classes)def forward(self, x):h0 = torch.zeros(self.num_layers, x.size(0), self.hidden_size).to(device)out, _ = self.rnn(x, h0)# out: batch_size, seq_length, hidden_size# out: (N, 28, 128)out = out[:, -1, :]# out (N, 128)out = self.fc(out)return outmodel = RNN(input_size, hidden_size, num_layers,num_classes).to(device)# Loss and optimizer
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(), lr=learning_rate)  # Train the model
n_total_steps = len(train_loader)
for epoch in range(num_epochs):for i, (images, labels) in enumerate(train_loader):  # origin shape: [100, 1, 28, 28]# resized: [100, 28, 28]images = images.reshape(-1, sequence_length, input_size).to(device)labels = labels.to(device)# Forward passoutputs = model(images)loss = criterion(outputs, labels)# Backward and optimizeoptimizer.zero_grad()loss.backward()optimizer.step()if (i+1) % 100 == 0:print (f'Epoch [{epoch+1}/{num_epochs}], Step [{i+1}/{n_total_steps}], Loss: {loss.item():.4f}')# Test the model
# In test phase, we don't need to compute gradients (for memory efficiency)
with torch.no_grad():n_correct = 0n_samples = 0for images, labels in test_loader:images = images.reshape(-1, sequence_length, input_size).to(device)labels = labels.to(device)outputs = model(images)# max returns (value ,index)_, predicted = torch.max(outputs.data, 1)n_samples += labels.size(0)n_correct += (predicted == labels).sum().item()acc = 100.0 * n_correct / n_samplesprint(f'Accuracy of the network on the 10000 test images: {acc} %')


http://www.ppmy.cn/news/414205.html

相关文章

wordpress炫酷主题Salient最新版13.0.5 汉化版免费下载

Salient主题是一款响应式多功能主题,可以适用各种类型网站,比如博客,企业建站,相册站等,此主题在主题森林售价大约420RMB,销量排行榜非常靠前,这款主题最大的特色是过渡动画非常多,动…

Stardock Curtains v1.19.1 Windows主题美化软件中文直装版

前言 Stardock Curtains是一款适用于Windows系统的主题美化软件,软件由Windows工具开发商StarDock开发,可以帮助用户对系统的主题进行美化,可以修改系统的配色、背景等等内容,另外软件对高分屏也有很好的提升。 Stardock Curtai…

WordPress主题-一款基于软件下载站定制的主题

响应式设计 基于该主题搭建的博客可以在移动端和桌面端正常友好地展示。友好界面设计,针对软件下载设计的界面,包括清晰的软件列表、专业的软件详情及软件下载交互设计,均考虑到用户的易用性。 强大的后台配置功能 提供基本设置、广告管理、…

WordPress主题分享:Flatsome主题v3.15.7免费下载 2022年最新版

https://download.csdn.net/download/tysonchiu/86236919https://download.csdn.net/download/tysonchiu/86236919 Multi-Purpose Responsive WordPress & WooCommerce Theme with incredible User Experience

WordPress主题分享:Avada主题v7.8.0免费下载 2022年最新版

Avada主题V7.8.02022年最新版WordPress主题多用途外贸独立站主题.zip-行业报告文档类资源-CSDN下载Avada主题V7.8.02022年最新版WordPress主题多用途外贸独立站主题.zip更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/tysonchiu/86236916

wordpress主题下载,wp主题模板下载

wordpress主题下载,是可以快速、完全可定制且美观的 WordPress 主题,适用于博客、个人作品集、企业网站和WooCommerce店面。wordpress主题下载非常轻量级(前端小于 50KB)并提供无与伦比的速度。wordpress主题下载在构建时考虑到了…

wordpress主题免费- wordpress插件以及主题下载

wordpress主题免费下载,很多人对wordpress建站都有点摸不清方向,今天我给大家分享一款一键批量wordpress主题建站。只需要输入域名选择好对应的主题一个网站就能成功建立。随着互联网的发展,建立网站只需要几秒钟就能搞定。重要的是SEO优化。每个网站的建…

wordpress主题The7汉化版支持在线更新免费下载

The7 The7是一款很牛的WordPress主题,在themeforest销量排名第二,支持很多布局,而且每个部分的颜色可以随意改变,你想搞渐变色也可以,布局风格上支持全宽、常规风格,不管是博客还是企业建站,the…