最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例

 更新時間:2020年01月10日 10:43:23   作者:xckkcxxck  
今天小編就為大家分享一篇pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧

代碼如下,U我認(rèn)為對于新手來說最重要的是學(xué)會rnn讀取數(shù)據(jù)的格式。

# -*- coding: utf-8 -*-
"""
Created on Tue Oct 9 08:53:25 2018
@author: www
"""
 
import sys
sys.path.append('..')
 
import torch
import datetime
from torch.autograd import Variable
from torch import nn
from torch.utils.data import DataLoader
 
from torchvision import transforms as tfs
from torchvision.datasets import MNIST
 
#定義數(shù)據(jù)
data_tf = tfs.Compose([
   tfs.ToTensor(),
   tfs.Normalize([0.5], [0.5])
])
train_set = MNIST('E:/data', train=True, transform=data_tf, download=True)
test_set = MNIST('E:/data', train=False, transform=data_tf, download=True)
 
train_data = DataLoader(train_set, 64, True, num_workers=4)
test_data = DataLoader(test_set, 128, False, num_workers=4)
 
#定義模型
class rnn_classify(nn.Module):
   def __init__(self, in_feature=28, hidden_feature=100, num_class=10, num_layers=2):
     super(rnn_classify, self).__init__()
     self.rnn = nn.LSTM(in_feature, hidden_feature, num_layers)#使用兩層lstm
     self.classifier = nn.Linear(hidden_feature, num_class)#將最后一個的rnn使用全連接的到最后的輸出結(jié)果
     
   def forward(self, x):
     #x的大小為(batch,1,28,28),所以我們需要將其轉(zhuǎn)化為rnn的輸入格式(28,batch,28)
     x = x.squeeze() #去掉(batch,1,28,28)中的1,變成(batch, 28,28)
     x = x.permute(2, 0, 1)#將最后一維放到第一維,變成(batch,28,28)
     out, _ = self.rnn(x) #使用默認(rèn)的隱藏狀態(tài),得到的out是(28, batch, hidden_feature)
     out = out[-1,:,:]#取序列中的最后一個,大小是(batch, hidden_feature)
     out = self.classifier(out) #得到分類結(jié)果
     return out
     
net = rnn_classify()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adadelta(net.parameters(), 1e-1)
 
#定義訓(xùn)練過程
def get_acc(output, label):
  total = output.shape[0]
  _, pred_label = output.max(1)
  num_correct = (pred_label == label).sum().item()
  return num_correct / total
  
  
def train(net, train_data, valid_data, num_epochs, optimizer, criterion):
  if torch.cuda.is_available():
    net = net.cuda()
  prev_time = datetime.datetime.now()
  for epoch in range(num_epochs):
    train_loss = 0
    train_acc = 0
    net = net.train()
    for im, label in train_data:
      if torch.cuda.is_available():
        im = Variable(im.cuda()) # (bs, 3, h, w)
        label = Variable(label.cuda()) # (bs, h, w)
      else:
        im = Variable(im)
        label = Variable(label)
      # forward
      output = net(im)
      loss = criterion(output, label)
      # backward
      optimizer.zero_grad()
      loss.backward()
      optimizer.step()
 
      train_loss += loss.item()
      train_acc += get_acc(output, label)
 
    cur_time = datetime.datetime.now()
    h, remainder = divmod((cur_time - prev_time).seconds, 3600)
    m, s = divmod(remainder, 60)
    time_str = "Time %02d:%02d:%02d" % (h, m, s)
    if valid_data is not None:
      valid_loss = 0
      valid_acc = 0
      net = net.eval()
      for im, label in valid_data:
        if torch.cuda.is_available():
          im = Variable(im.cuda())
          label = Variable(label.cuda())
        else:
          im = Variable(im)
          label = Variable(label)
        output = net(im)
        loss = criterion(output, label)
        valid_loss += loss.item()
        valid_acc += get_acc(output, label)
      epoch_str = (
        "Epoch %d. Train Loss: %f, Train Acc: %f, Valid Loss: %f, Valid Acc: %f, "
        % (epoch, train_loss / len(train_data),
          train_acc / len(train_data), valid_loss / len(valid_data),
          valid_acc / len(valid_data)))
    else:
      epoch_str = ("Epoch %d. Train Loss: %f, Train Acc: %f, " %
             (epoch, train_loss / len(train_data),
             train_acc / len(train_data)))
    prev_time = cur_time
    print(epoch_str + time_str)
    
train(net, train_data, test_data, 10, optimizer, criterion)    

以上這篇pytorch 利用lstm做mnist手寫數(shù)字識別分類的實例就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對numpy中軸與維度的理解

    對numpy中軸與維度的理解

    下面小編就為大家分享一篇對numpy中軸與維度的理解,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-04-04
  • Python實現(xiàn)圖像和辦公文檔處理的方法和技巧

    Python實現(xiàn)圖像和辦公文檔處理的方法和技巧

    本文介紹了Python實現(xiàn)圖像和辦公文檔處理的方法和技巧,包括使用Pillow庫處理圖像、使用OpenCV庫進行圖像識別和處理、使用PyPDF2庫處理PDF文檔、使用docx和xlwt庫處理Word和Excel文檔等,幫助讀者更好地掌握Python在圖像和辦公文檔處理方面的應(yīng)用
    2023-05-05
  • 使用Python在Excel工作表中創(chuàng)建圖表的實現(xiàn)步驟

    使用Python在Excel工作表中創(chuàng)建圖表的實現(xiàn)步驟

    在現(xiàn)代企業(yè)中,數(shù)據(jù)驅(qū)動的決策變得越來越重要,Excel作為企業(yè)中最常用的數(shù)據(jù)分析工具,其強大的表格和圖表功能在日常工作中不可或缺,然而,當(dāng)面對成百上千條數(shù)據(jù)或需要生成定期報告時,手動制作圖表不僅耗時,還容易出錯,所以本文介紹了如何實現(xiàn)Excel圖表自動化生成
    2025-12-12
  • 使用Python 統(tǒng)計文件夾內(nèi)所有pdf頁數(shù)的小工具

    使用Python 統(tǒng)計文件夾內(nèi)所有pdf頁數(shù)的小工具

    這篇文章主要介紹了Python 統(tǒng)計文件夾內(nèi)所有pdf頁數(shù)的小工具,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-03-03
  • pycharm使用anaconda全過程

    pycharm使用anaconda全過程

    這篇文章主要介紹了pycharm使用anaconda全過程,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-02-02
  • python3爬取各類天氣信息

    python3爬取各類天氣信息

    這篇文章主要為大家詳細(xì)介紹了python3爬取各類天氣信息,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2018-02-02
  • 使用Python的Twisted框架編寫非阻塞程序的代碼示例

    使用Python的Twisted框架編寫非阻塞程序的代碼示例

    Twisted是基于異步模式的開發(fā)框架,因而利用Twisted進行非阻塞編程自然也是必會的用法,下面我們就來一起看一下使用Python的Twisted框架編寫非阻塞程序的代碼示例:
    2016-05-05
  • TensorFlow2.1.0最新版本安裝詳細(xì)教程

    TensorFlow2.1.0最新版本安裝詳細(xì)教程

    TensorFlow是一款優(yōu)秀的深度學(xué)習(xí)框架,支持多種常見的操作系統(tǒng),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,這篇文章主要介紹了TensorFlow2.1.0最新版本安裝詳細(xì)教程,需要的朋友可以參考下
    2020-04-04
  • Python 實現(xiàn)自動化Excel報表的步驟

    Python 實現(xiàn)自動化Excel報表的步驟

    這篇文章主要介紹了Python 實現(xiàn)自動化Excel報表的步驟,幫助大家更好的理解和學(xué)習(xí)使用python,感興趣的朋友可以了解下
    2021-04-04
  • torch.optim優(yōu)化算法理解之optim.Adam()解讀

    torch.optim優(yōu)化算法理解之optim.Adam()解讀

    這篇文章主要介紹了torch.optim優(yōu)化算法理解之optim.Adam()解讀,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-11-11

最新評論

宜黄县| 昌宁县| 和政县| 绥江县| 富阳市| 永昌县| 安图县| 蕲春县| 潜山县| 禄劝| 牡丹江市| 新津县| 兰州市| 台湾省| 扎赉特旗| 工布江达县| 随州市| 维西| 定兴县| 西昌市| 万盛区| 巴楚县| 吉安市| 鄢陵县| 达孜县| 万源市| 南投县| 潞西市| 黔江区| 绩溪县| 辽源市| 宁阳县| 化州市| 北票市| 连云港市| 双鸭山市| 和顺县| 芒康县| 炎陵县| 宜州市| 和龙市|