# 循环神经网络模型 (many-to-one)classRNN(nn.Module):def__init__(self,input_size,hidden_size,num_layers,num_classes):super(RNN,self).__init__()
self.hidden_size = hidden_size
self.num_layers = num_layers
self.lstm = nn.LSTM(input_size,hidden_size,num_layers,batch_first=True)
self.fc = nn.Linear(hidden_size,num_classes)defforward(self,x):# Set initial hidden and cell states
h0 = torch.zeros(self.num_layers,x.size(0),self.hidden_size).to(device)
c0 = torch.zeros(self.num_layers,x.size(0),self.hidden_size).to(device)# Forward propagate LSTM
out,_ = self.lstm(x,(h0,c0))# Decode the hidden state of the last time step
out = self.fc(out[:,-1,:])return out
model = RNN(input_size,hidden_size,num_layers,num_classes).to(device)# 损失函数和优化器
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adam(model.parameters(),lr=learning_rate)
# 测试模型
model.eval()with torch.no_grad():
correct =0
total =0for images,labels in test_loader:
images = images.reshape(-1,sequence_length,input_size).to(device)
labels = labels.to(device)
outputs = model(images)
_,predicted = torch.max(outputs.data,1)
total += labels.size(0)
correct +=(predicted == labels).sum().item()print('Test Accuracy of the model on the 10000 test images:{}%.'.format(100*correct/total))
Test Accuracy of the model on the 10000 test images:97.78%.