pytorch如何實現(xiàn)MNIST手寫體識別-創(chuàng)新互聯(lián)

小編給大家分享一下pytorch如何實現(xiàn)MNIST手寫體識別,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

專業(yè)成都網(wǎng)站建設公司,做排名好的好網(wǎng)站,排在同行前面,為您帶來客戶和效益!創(chuàng)新互聯(lián)公司為您提供成都網(wǎng)站建設,五站合一網(wǎng)站設計制作,服務好的網(wǎng)站設計公司,成都網(wǎng)站制作、網(wǎng)站設計負責任的成都網(wǎng)站制作公司!

實驗環(huán)境

pytorch 1.4
Windows 10
python 3.7
cuda 10.1(我筆記本上沒有可以使用cuda的顯卡)

實驗過程

1. 確定我們要加載的庫

import torch
import torch.nn as nn
import torchvision #這里面直接加載MNIST數(shù)據(jù)的方法
import torchvision.transforms as transforms # 將數(shù)據(jù)轉(zhuǎn)為Tensor
import torch.optim as optim 
import torch.utils.data.dataloader as dataloader

2. 加載數(shù)據(jù)

這里使用所有數(shù)據(jù)進行訓練,再使用所有數(shù)據(jù)進行測試

train_set = torchvision.datasets.MNIST(
 root='./data', # 文件存儲位置
 train=True,
 transform=transforms.ToTensor(),
 download=True
)

train_dataloader = dataloader.DataLoader(dataset=train_set,shuffle=False,batch_size=100)# dataset可以省

'''
dataloader返回(images,labels)
其中,
images維度:[batch_size,1,28,28]
labels:[batch_size],即圖片對應的
'''

test_set = torchvision.datasets.MNIST(
 root='./data',
 train=False,
 transform=transforms.ToTensor(),
 download=True
)

test_dataloader = dataloader.DataLoader(test_set,batch_size=100,shuffle=False) # dataset可以省

3. 定義神經(jīng)網(wǎng)絡模型

這里使用全神經(jīng)網(wǎng)絡作為模型

class NeuralNet(nn.Module):
 def __init__(self,in_num,h_num,out_num):
 super(NeuralNet,self).__init__()
 self.ln1 = nn.Linear(in_num,h_num)
 self.ln2 = nn.Linear(h_num,out_num)
 self.relu = nn.ReLU()
 
 def forward(self,x):
 return self.ln2(self.relu(self.ln1(x)))

4. 模型訓練

in_num = 784 # 輸入維度
h_num = 500 # 隱藏層維度
out_num = 10 # 輸出維度
epochs = 30 # 迭代次數(shù)
learning_rate = 0.001
USE_CUDA = torch.cuda.is_available() # 定義是否可以使用cuda

model = NeuralNet(in_num,h_num,out_num) # 初始化模型
optimizer = optim.Adam(model.parameters(),lr=learning_rate) # 使用Adam
loss_fn = nn.CrossEntropyLoss() # 損失函數(shù)

for e in range(epochs):
 for i,data in enumerate(train_dataloader):
 (images,labels) = data
 images = images.reshape(-1,28*28) # [batch_size,784]
 if USE_CUDA:
  images = images.cuda() # 使用cuda
  labels = labels.cuda() # 使用cuda
  
 y_pred = model(images) # 預測
 loss = loss_fn(y_pred,labels) # 計算損失
 
 optimizer.zero_grad()
 loss.backward()
 optimizer.step()
 
 n = e * i +1
 if n % 100 == 0:
  print(n,'loss:',loss.item())

訓練模型的loss部分截圖如下:

pytorch如何實現(xiàn)MNIST手寫體識別

5. 測試模型

with torch.no_grad():
 total = 0
 correct = 0
 for (images,labels) in test_dataloader:
 images = images.reshape(-1,28*28)
 if USE_CUDA:
  images = images.cuda()
  labels = labels.cuda()
  
 result = model(images)
 prediction = torch.max(result, 1)[1] # 這里需要有[1],因為它返回了概率還有標簽
 total += labels.size(0)
 correct += (prediction == labels).sum().item()
 
 print("The accuracy of total {} images: {}%".format(total, 100 * correct/total))

實驗結(jié)果

最終實驗的正確率達到:98.22%

pytorch如何實現(xiàn)MNIST手寫體識別

pytorch的優(yōu)點

1.PyTorch是相當簡潔且高效快速的框架;2.設計追求最少的封裝;3.設計符合人類思維,它讓用戶盡可能地專注于實現(xiàn)自己的想法;4.與google的Tensorflow類似,F(xiàn)AIR的支持足以確保PyTorch獲得持續(xù)的開發(fā)更新;5.PyTorch作者親自維護的論壇 供用戶交流和求教問題6.入門簡單

以上是“pytorch如何實現(xiàn)MNIST手寫體識別”這篇文章的所有內(nèi)容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內(nèi)容對大家有所幫助,如果還想學習更多知識,歡迎關注創(chuàng)新互聯(lián)成都網(wǎng)站設計公司行業(yè)資訊頻道!

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

本文題目:pytorch如何實現(xiàn)MNIST手寫體識別-創(chuàng)新互聯(lián)
文章分享:http://muchs.cn/article42/iccec.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供商城網(wǎng)站、網(wǎng)頁設計公司網(wǎng)站建設、面包屑導航做網(wǎng)站、微信小程序

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

外貿(mào)網(wǎng)站制作