欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Pytorch實現(xiàn)的手寫數(shù)字mnist識別功能完整示例

 更新時間:2019年12月13日 10:47:02   作者:nudt_qxx  
這篇文章主要介紹了Pytorch實現(xiàn)的手寫數(shù)字mnist識別功能,結合完整實例形式分析了Pytorch模塊手寫字識別具體步驟與相關實現(xiàn)技巧,需要的朋友可以參考下

本文實例講述了Pytorch實現(xiàn)的手寫數(shù)字mnist識別功能。分享給大家供大家參考,具體如下:

import torch
import torchvision as tv
import torchvision.transforms as transforms
import torch.nn as nn
import torch.optim as optim
import argparse
# 定義是否使用GPU
device = torch.device("cuda" if torch.cuda.is_available() else "cpu")
# 定義網(wǎng)絡結構
class LeNet(nn.Module):
  def __init__(self):
    super(LeNet, self).__init__()
    self.conv1 = nn.Sequential(   #input_size=(1*28*28)
      nn.Conv2d(1, 6, 5, 1, 2), #padding=2保證輸入輸出尺寸相同
      nn.ReLU(),   #input_size=(6*28*28)
      nn.MaxPool2d(kernel_size=2, stride=2),#output_size=(6*14*14)
    )
    self.conv2 = nn.Sequential(
      nn.Conv2d(6, 16, 5),
      nn.ReLU(),   #input_size=(16*10*10)
      nn.MaxPool2d(2, 2) #output_size=(16*5*5)
    )
    self.fc1 = nn.Sequential(
      nn.Linear(16 * 5 * 5, 120),
      nn.ReLU()
    )
    self.fc2 = nn.Sequential(
      nn.Linear(120, 84),
      nn.ReLU()
    )
    self.fc3 = nn.Linear(84, 10)
  # 定義前向傳播過程,輸入為x
  def forward(self, x):
    x = self.conv1(x)
    x = self.conv2(x)
    # nn.Linear()的輸入輸出都是維度為一的值,所以要把多維度的tensor展平成一維
    x = x.view(x.size()[0], -1)
    x = self.fc1(x)
    x = self.fc2(x)
    x = self.fc3(x)
    return x
#使得我們能夠手動輸入命令行參數(shù),就是讓風格變得和Linux命令行差不多
parser = argparse.ArgumentParser()
parser.add_argument('--outf', default='./model/', help='folder to output images and model checkpoints') #模型保存路徑
parser.add_argument('--net', default='./model/net.pth', help="path to netG (to continue training)") #模型加載路徑
opt = parser.parse_args()
# 超參數(shù)設置
EPOCH = 8  #遍歷數(shù)據(jù)集次數(shù)
BATCH_SIZE = 64   #批處理尺寸(batch_size)
LR = 0.001    #學習率
# 定義數(shù)據(jù)預處理方式
transform = transforms.ToTensor()
# 定義訓練數(shù)據(jù)集
trainset = tv.datasets.MNIST(
  root='./data/',
  train=True,
  download=True,
  transform=transform)
# 定義訓練批處理數(shù)據(jù)
trainloader = torch.utils.data.DataLoader(
  trainset,
  batch_size=BATCH_SIZE,
  shuffle=True,
  )
# 定義測試數(shù)據(jù)集
testset = tv.datasets.MNIST(
  root='./data/',
  train=False,
  download=True,
  transform=transform)
# 定義測試批處理數(shù)據(jù)
testloader = torch.utils.data.DataLoader(
  testset,
  batch_size=BATCH_SIZE,
  shuffle=False,
  )
# 定義損失函數(shù)loss function 和優(yōu)化方式(采用SGD)
net = LeNet().to(device)
criterion = nn.CrossEntropyLoss() # 交叉熵損失函數(shù),通常用于多分類問題上
optimizer = optim.SGD(net.parameters(), lr=LR, momentum=0.9)
# 訓練
if __name__ == "__main__":
  for epoch in range(EPOCH):
    sum_loss = 0.0
    # 數(shù)據(jù)讀取
    for i, data in enumerate(trainloader):
      inputs, labels = data
      inputs, labels = inputs.to(device), labels.to(device)
      # 梯度清零
      optimizer.zero_grad()
      # forward + backward
      outputs = net(inputs)
      loss = criterion(outputs, labels)
      loss.backward()
      optimizer.step()
      # 每訓練100個batch打印一次平均loss
      sum_loss += loss.item()
      if i % 100 == 99:
        print('[%d, %d] loss: %.03f'
           % (epoch + 1, i + 1, sum_loss / 100))
        sum_loss = 0.0
    # 每跑完一次epoch測試一下準確率
    with torch.no_grad():
      correct = 0
      total = 0
      for data in testloader:
        images, labels = data
        images, labels = images.to(device), labels.to(device)
        outputs = net(images)
        # 取得分最高的那個類
        _, predicted = torch.max(outputs.data, 1)
        total += labels.size(0)
        correct += (predicted == labels).sum()
      print('第%d個epoch的識別準確率為:%d%%' % (epoch + 1, (100 * correct / total)))
  #torch.save(net.state_dict(), '%s/net_%03d.pth' % (opt.outf, epoch + 1))

更多關于Python相關內容可查看本站專題:《Python數(shù)學運算技巧總結》、《Python圖片操作技巧總結》、《Python數(shù)據(jù)結構與算法教程》、《Python函數(shù)使用技巧總結》、《Python字符串操作技巧匯總》及《Python入門與進階經(jīng)典教程

希望本文所述對大家Python程序設計有所幫助。

相關文章

  • python模擬鼠標拖動操作的方法

    python模擬鼠標拖動操作的方法

    這篇文章主要介紹了python模擬鼠標拖動操作的方法,實例分析了Python鼠標操作及鍵位操作的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • python中的多線程實例教程

    python中的多線程實例教程

    這篇文章主要介紹了python中的多線程用法,包括線程的創(chuàng)建、同步等核心問題,具有很好的參考借鑒價值,需要的朋友可以參考下
    2014-08-08
  • Python中實現(xiàn)輸入一個整數(shù)的案例

    Python中實現(xiàn)輸入一個整數(shù)的案例

    這篇文章主要介紹了Python中實現(xiàn)輸入一個整數(shù)的案例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-05-05
  • Python進階之如何快速將變量插入有序數(shù)組

    Python進階之如何快速將變量插入有序數(shù)組

    在我們學習python的過程中,學習序列是一門必修課。本文我們就來一起看一看Python是如何快速將變量插入有序數(shù)組的,感興趣的可以了解一下
    2023-04-04
  • 利用Python繪制端午節(jié)祝福動畫

    利用Python繪制端午節(jié)祝福動畫

    這篇文章主要介紹了如何利用Python繪制一個端午節(jié)的祝福動畫,文中的示例代碼講解詳細,對我們學習Python有一定的幫助,需要的可以參考一下
    2023-06-06
  • Python發(fā)送Email方法實例

    Python發(fā)送Email方法實例

    這篇文章主要介紹了Python發(fā)送Email的方法,有不錯的實用價值,代碼備有一定的注釋便于讀者理解,需要的朋友可以參考下
    2014-08-08
  • python的rllib庫你了解嗎

    python的rllib庫你了解嗎

    這篇文章主要介紹了python urllib庫的使用,幫助大家更好的利用python學習爬蟲,感興趣的朋友可以了解下,希望能夠給你帶來幫助
    2021-11-11
  • Python  Django 母版和繼承解析

    Python Django 母版和繼承解析

    這篇文章主要介紹了Python Django 母版和繼承解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2019-08-08
  • 使用python快速獲取PDF文件頁數(shù)的辦法

    使用python快速獲取PDF文件頁數(shù)的辦法

    有時在處理或打印一個PDF文檔之前,你可能需要先知道該文檔包含多少頁,對于程序員來說,編寫腳本來完成這項工作會更加高效,本文就介紹一個使用Python快速獲取PDF文件頁數(shù)的辦法,需要的朋友可以參考下
    2024-03-03
  • 使用 Python ssh 遠程登陸服務器的最佳方案

    使用 Python ssh 遠程登陸服務器的最佳方案

    這篇文章主要介紹了使用 Python ssh 遠程登陸服務器的最佳方案,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-03-03

最新評論