Python Flask校友录管理系统开发:从数据库设计到部署实战
2026/9/28 12:31:14
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
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)