☰
循环神经网络详解(RNN)
2026/9/28 11:46:24 网站建设 项目流程

循环神经网络是一类专门处理序列数据的神经网络,循环神经网络的每个神经元具有两个输入:一个当前时间步的输入和一个前一时刻的隐藏状态,通过这两个输入产生当前时刻的隐藏状态。RNN的核心优势在于可以处理变长序列,参数共享和具备记忆能力。

1、RNN参数详解

import torch from torch import nn torch.nn.RNN(input_size,hidden_size,num_layers,nonlinerity,bias,batch_first,dropout,didirectional)

1、input_size

每个时间步的输入向量维度,即单个输入大小

2、hidden_size

隐藏状态维度,即RNN中神经元的个数

3、num_layers

RNN堆叠层数

4、nonlineraity

计算隐藏状态的激活函数,tanh或relu

tiona5、bias

是否使用偏置

6、batch_first

输入是否为(batch,time_step,input_size)

7、dropout

是否使用丢弃学习

8、bidirectional

是否使用双向RNN

2、示例代码

import torch from torch import nn from torchvision import transforms,datasets import torch.utils.data as Data torch.cuda.empty_cache() device=torch.device('cuda:0' if torch.cuda.is_available() else 'cpu') BATCH_SIZE=50 TIME_SIZE=50 INPUT_SIZE=50 transform=transforms.Compose([ transforms.Resize((50,50)), transforms.ToTensor(), transforms.Normalize((0.1307,),( 0.3081,)) ]) train_data=datasets.MNIST( root='D:/mypython/MNISTdataset', train=True, download=True, transform=transform ) train_loader=Data.DataLoader(dataset=train_data,batch_size=BATCH_SIZE,shuffle=True) traintest,labeltest=next(iter(train_loader)) #print(traintest.shape) #print(labeltest.shape) test_data=datasets.MNIST( root='D:/mypython/MNISTdataset', train=False, transform=transform ) test_loader=Data.DataLoader(dataset=test_data,batch_size=50,shuffle=False) test_x,test_y=next(iter(test_loader)) #print(test_x.size()) #print(test_y.size()) class RNN(nn.Module): def __init__(self): super(RNN,self).__init__() self.rnn=nn.GRU( input_size=INPUT_SIZE, hidden_size=50, num_layers=1, batch_first=True, bidirectional=True ) self.out=nn.Linear(5000,10) def forward(self,x): r_out,(h_n,h_c)=self.rnn(x,None) r_out=r_out.reshape(r_out.size(0),-1) output=self.out(r_out) return output model=RNN() model=model.to(device=device) optimizer=torch.optim.Adam(model.parameters(),lr=0.01) loss_func=nn.CrossEntropyLoss() for step,(x,y) in enumerate(train_loader): x=x.squeeze(1) b_x=x.to(device=device) b_y=y.to(device=device) output=model(b_x) loss=loss_func(output,b_y) optimizer.zero_grad() loss.backward() optimizer.step() if step%100==0: test_x=test_x.squeeze(1) t_x=test_x.to(device=device) t_y=test_y.to(device=device) test_output=model(t_x) pred_y=torch.max(test_output,1)[1].data.squeeze() accuracy=(pred_y==t_y).sum().item()/float(test_y.size(0)) print('train loss;%.4f' %loss.data,'|test accuracy:%.2f' %accuracy)

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询