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

pytorch 利用lstm做mnist手寫(xiě)數(shù)字識(shí)別分類(lèi)的實(shí)例

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

代碼如下,U我認(rèn)為對(duì)于新手來(lái)說(shuō)最重要的是學(xué)會(huì)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)#將最后一個(gè)的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,:,:]#取序列中的最后一個(gè),大小是(batch, hidden_feature)
     out = self.classifier(out) #得到分類(lèi)結(jié)果
     return out
     
net = rnn_classify()
criterion = nn.CrossEntropyLoss()
optimizer = torch.optim.Adadelta(net.parameters(), 1e-1)
 
#定義訓(xùn)練過(guò)程
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手寫(xiě)數(shù)字識(shí)別分類(lèi)的實(shí)例就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。

相關(guān)文章

  • 對(duì)numpy中軸與維度的理解

    對(duì)numpy中軸與維度的理解

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

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

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

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

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

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

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

    pycharm使用anaconda全過(guò)程

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

    python3爬取各類(lèi)天氣信息

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

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

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

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

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

    Python 實(shí)現(xiàn)自動(dòng)化Excel報(bào)表的步驟

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

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

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

最新評(píng)論

武平县| 卢龙县| 中卫市| 虞城县| 洞口县| 昌宁县| 乌什县| 吉林省| 溧水县| 洪洞县| 清河县| 伊吾县| 昌吉市| 县级市| 黄石市| 如东县| 岐山县| 博湖县| 句容市| 宜宾市| 昌吉市| 阳曲县| 红桥区| 万年县| 彭泽县| 荣昌县| 新田县| 星座| 射洪县| 华亭县| 沙湾县| 宣威市| 唐山市| 杭锦旗| 甘南县| 醴陵市| 北海市| 息烽县| 阳山县| 磐安县| 盐山县|