日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

PyTorch基础-使用LSTM神经网络实现手写数据集识别-08

發布時間:2024/9/15 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 PyTorch基础-使用LSTM神经网络实现手写数据集识别-08 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
import numpy as np import torch from torch import nn,optim from torch.autograd import Variable from torchvision import datasets,transforms from torch.utils.data import DataLoader # 訓練集 train_data = datasets.MNIST(root="./", # 存放位置train = True, # 載入訓練集transform=transforms.ToTensor(), # 把數據變成tensor類型download = True # 下載) # 測試集 test_data = datasets.MNIST(root="./",train = False,transform=transforms.ToTensor(),download = True) # 批次大小 batch_size = 64 # 裝載訓練集 train_loader = DataLoader(dataset=train_data,batch_size=batch_size,shuffle=True) # 裝載測試集 test_loader = DataLoader(dataset=test_data,batch_size=batch_size,shuffle=True) for i,data in enumerate(train_loader):inputs,labels = dataprint(inputs.shape)print(labels.shape)break # 定義網絡結構 class LSTM(nn.Module):def __init__(self):super(LSTM,self).__init__()# 初始化self.lstm = torch.nn.LSTM(input_size = 28, # 表示輸入特征的大小hidden_size = 64, # 表示lstm模塊的數量num_layers = 1, # 表示lstm隱藏層的層數batch_first = True # lstm默認格式input(seq_len,batch,feature)等于True表示input和output變成(batch,seq_len,feature))self.out = torch.nn.Linear(in_features=64,out_features=10)self.softmax = torch.nn.Softmax(dim=1)def forward(self,x):# (batch,seq_len,feature)x = x.view(-1,28,28)# output:(batch,seq_len,hidden_size)包含每個序列的輸出結果# 雖然lstm的batch_first為True,但是h_n,c_n的第0個維度還是num_layers# h_n :[num_layers,batch,hidden_size]只包含最后一個序列的輸出結果# c_n:[num_layers,batch,hidden_size]只包含最后一個序列的輸出結果output,(h_n,c_n) = self.lstm(x)output_in_last_timestep = h_n[-1,:,:]x = self.out(output_in_last_timestep)x = self.softmax(x)return x # 定義模型 model = LSTM() # 定義代價函數 mse_loss = nn.CrossEntropyLoss()# 交叉熵 # 定義優化器 optimizer = optim.Adam(model.parameters(),lr=0.001)# 隨機梯度下降 # 定義模型訓練和測試的方法 def train():# 模型的訓練狀態model.train()for i,data in enumerate(train_loader):# 獲得一個批次的數據和標簽inputs,labels = data# 獲得模型預測結果(64,10)out = model(inputs)# 交叉熵代價函數out(batch,C:類別的數量),labels(batch)loss = mse_loss(out,labels)# 梯度清零optimizer.zero_grad()# 計算梯度loss.backward()# 修改權值optimizer.step()def test():# 模型的測試狀態model.eval()correct = 0 # 測試集準確率for i,data in enumerate(test_loader):# 獲得一個批次的數據和標簽inputs,labels = data# 獲得模型預測結果(64,10)out = model(inputs)# 獲得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 預測正確的數量correct += (predicted==labels).sum()print("Test acc:{0}".format(correct.item()/len(test_data)))correct = 0for i,data in enumerate(train_loader): # 訓練集準確率# 獲得一個批次的數據和標簽inputs,labels = data# 獲得模型預測結果(64,10)out = model(inputs)# 獲得最大值,以及最大值所在的位置_,predicted = torch.max(out,1)# 預測正確的數量correct += (predicted==labels).sum()print("Train acc:{0}".format(correct.item()/len(train_data))) # 訓練 for epoch in range(10):print("epoch:",epoch)train()test()

總結

以上是生活随笔為你收集整理的PyTorch基础-使用LSTM神经网络实现手写数据集识别-08的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。