1. 程式人生 > >Pytorch入門例項:mnist分類訓練

Pytorch入門例項:mnist分類訓練

#!/usr/bin/env python
# -*- coding: utf-8 -*-
__author__ = 'denny'
__time__ = '2017-9-9 9:03'

import torch
import torchvision
from torch.autograd import Variable
import torch.utils.data.dataloader as Data

train_data = torchvision.datasets.MNIST(
    './mnist', train=True, transform=torchvision.transforms.ToTensor(), download=True
)
test_data 
= torchvision.datasets.MNIST( './mnist', train=False, transform=torchvision.transforms.ToTensor() ) print("train_data:", train_data.train_data.size()) print("train_labels:", train_data.train_labels.size()) print("test_data:", test_data.test_data.size()) train_loader = Data.DataLoader(dataset=train_data, batch_size=64, shuffle=True) test_loader
= Data.DataLoader(dataset=test_data, batch_size=64) class Net(torch.nn.Module): def __init__(self): super(Net, self).__init__() self.conv1 = torch.nn.Sequential( torch.nn.Conv2d(1, 32, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2)) self.conv2
= torch.nn.Sequential( torch.nn.Conv2d(32, 64, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2) ) self.conv3 = torch.nn.Sequential( torch.nn.Conv2d(64, 64, 3, 1, 1), torch.nn.ReLU(), torch.nn.MaxPool2d(2) ) self.dense = torch.nn.Sequential( torch.nn.Linear(64 * 3 * 3, 128), torch.nn.ReLU(), torch.nn.Linear(128, 10) ) def forward(self, x): conv1_out = self.conv1(x) conv2_out = self.conv2(conv1_out) conv3_out = self.conv3(conv2_out) res = conv3_out.view(conv3_out.size(0), -1) out = self.dense(res) return out model = Net() print(model) optimizer = torch.optim.Adam(model.parameters()) loss_func = torch.nn.CrossEntropyLoss() for epoch in range(10): print('epoch {}'.format(epoch + 1)) # training----------------------------- train_loss = 0. train_acc = 0. for batch_x, batch_y in train_loader: batch_x, batch_y = Variable(batch_x), Variable(batch_y) out = model(batch_x) loss = loss_func(out, batch_y) train_loss += loss.data[0] pred = torch.max(out, 1)[1] train_correct = (pred == batch_y).sum() train_acc += train_correct.data[0] optimizer.zero_grad() loss.backward() optimizer.step() print('Train Loss: {:.6f}, Acc: {:.6f}'.format(train_loss / (len( train_data)), train_acc / (len(train_data)))) # evaluation-------------------------------- model.eval() eval_loss = 0. eval_acc = 0. for batch_x, batch_y in test_loader: batch_x, batch_y = Variable(batch_x, volatile=True), Variable(batch_y, volatile=True) out = model(batch_x) loss = loss_func(out, batch_y) eval_loss += loss.data[0] pred = torch.max(out, 1)[1] num_correct = (pred == batch_y).sum() eval_acc += num_correct.data[0] print('Test Loss: {:.6f}, Acc: {:.6f}'.format(eval_loss / (len( test_data)), eval_acc / (len(test_data))))

相關推薦

Pytorch入門例項mnist分類訓練

#!/usr/bin/env python # -*- coding: utf-8 -*- __author__ = 'denny' __time__ = '2017-9-9 9:03' import torch import torchvision from torch.autograd

javaMapReduce原理及入門例項wordcount

MapReduce原理 MapperTask -> Shuffle(分割槽排序分組) -> ReducerTask MapReduce執行步驟 Map處理任務 讀取檔案每一行,解析成<key、value>,呼叫

tensorflow學習系列六mnist訓練儲存模型再到載入模型測試

    通過前面幾個系列的學習對tensorflow有了一個漸漸親切的感覺,本文主要是從tensorflow模型訓練與驗證的模型進行實踐一遍,以至於我們能夠通過tensorflow的訓練有一個整體的概念。下面主要是從訓練到儲存模型,然後載入模型進行預測。# -*- codin

分類例項鳶尾花分類-基於keras的python學習筆記(五)

版權宣告:本文為博主原創文章,未經博主允許不得轉載。 https://blog.csdn.net/weixin_44474718/article/details/86420803 資料集可以從UCI機器學習倉庫下載(http://archive.ics.uci.edu/ml/datasets

Android開發入門例項四則混合運算計算器

        開發Android應用主要使用的語言是Java,佈局檔案和介面則一般用XML來描述。整個應用的GUI開發與Java SWT、QT等其實區別不是特別大。如果有任何一種GUI程式開發經驗,學習Android應用開發就是一件非常容易的事。這篇文章裡我們來開發一個支

pytorch入門學習torchvision.transforms

torchvision.transforms是pytorch中的影象預處理包 一般用Compose把多個步驟整合到一起: transforms.Compose([ transforms.CenterC

Pytorch入門——Autograd自動分化

在上一篇部落格已經對Pytorch的Tensor進行了快速介紹,本章將繼續學習autograd包。autograd包是PyTorch所有神經網路的核心,為Tensors上的所有操作提供了自動區分。同時,它也是一個逐個執行的框架,意味著backprop由程式碼執行

神經網路加速器應用例項影象分類

深度學習飛速發展過程中,人們發現原有的處理器無法滿足神經網路這種特定的大量計算,大量的開始針對這一應用進行專用晶片的設計。谷歌的張量處理單元(Tensor Processing Unit,後文簡稱TPU)是完成較早,具有代表性的一類設計,基於脈動陣列設計的矩陣計算加速單元,可以很好的加速神經網路的計算。本

Keras入門實戰(1)MNIST手寫數字分類

前面的部落格中已經介紹瞭如何在Ubuntu下安裝Keras深度學習框架。 現在我們使用 Keras 庫來學習手寫數字分類。 我們這裡要解決的問題是:將手寫數字的灰度影象(28 畫素×28 畫素)劃分到 10 個類別 中(0~9)。我們將使用 MNIST 資料集,它是機器學

PyTorch基礎入門PyTorch搭建卷積神經網路實現MNIST手寫數字識別

1)卷積神經網路(CNN)簡介 關於什麼是卷積神經網路(CNN),請自行查閱資料進行學習。如果是初學者,這裡推薦一下臺灣的李巨集毅的深度學習課程。連結就不給了,這些資料網站上隨處可見。 值得一提的是,CNN雖然在影象處理的領域具有不可阻擋的勢頭,但是它絕對不僅僅只能用來影

Caffe簡明教程5訓練你的第一個Caffe模型-MNIST分類

如果你已經根據前面幾篇文章成功地編譯了Caffe,那麼現在是時候訓練你的第一個模型了。我準備借用Caffe官網的LeNet例子來寫這篇文章,您也可以訪問原始的文件:Training LeNet on MNIST with Caffe Caffe在

基於PyTorch的深度學習入門教程(五)——訓練神經網路分類

前言本文參考PyTorch官網的教程,分為五個基本模組來介紹PyTorch。為了避免文章過長,這五個模組分別在五篇博文中介紹。本文是關於Part4的內容。Part4:訓練一個神經網路分類器前面已經介紹了

keras學習例項(二)mnist 手寫體分類

承接上次筆記,這次進行mnist 的手寫體目標識別例項,先說明一下出現的問題。 如上圖,源程式類似keras的mnist_example例項,資料來源是通過 url = https://s3.amazonaws.com/img-datasets/mnist.npz 進行

Caffe學習筆記(六)mnist手寫數字識別訓練例項

一、前言    深度學習的一個簡單例項就是mnist手寫數字識別,只要這個例子弄明白,其它的內容就可以舉一反三了。之前的內容如有遺忘,可以進行回顧。 二、準備資料    資料集可以直接從我的github下載,包括資料集和程式碼,使用如下指令:

tensorflow 1.0 學習用別人訓練好的模型來進行圖像分類

ima ppi gin 什麽 dir targe spl flow blog 谷歌在大型圖像數據庫ImageNet上訓練好了一個Inception-v3模型,這個模型我們可以直接用來進來圖像分類。 下載地址:https://storage.googleapis.com/d

Keras多分類例項鳶尾花

鳶尾花資料集具有4個數值型輸入專案,並且數值具有相同的尺度,輸出專案是鳶尾花的三個子類。 這裡使用的是Scikit-Learn中提供的資料集,省略了資料預處理的過程,如果在UCI上面下載的話要使用Pandas中的read_csv()函式匯入資料,並使用Scikit-Learn的LabelEnco

Pytorch求索(3)使用訓練好的詞向量

nn.Embedding Pytorch自帶Embedding模組,可以方便使用 self.embed = nn.Embedding(vocab_size, embedding_dim) 那麼,如何使用已經訓練好的詞向量呢? 詞向量其實是模型的embedding層的權重,所

【AI實戰】訓練第一個AI模型MNIST手寫數字識別模型

在上篇文章中,我們已經把AI的基礎環境搭建好了(見文章:Ubuntu + conda + tensorflow + GPU + pycharm搭建AI基礎環境),接下來將基於tensorflow訓練第一個AI模型:MNIST手寫數字識別模型。 MNIST是一個經典的手寫數字資料集,來自美國國家

pytorchEDSR 生成訓練資料的方法

Pytorch:EDSR 生成訓練資料的方法 引言 Winter is coming 正文 pytorch提供的DataLoader 是用來包裝你的資料的工具. 所以你要將自己的 (numpy array 或其他) 資料形式裝換成 Tensor, 然後再放進這個包裝器中. 使用 DataL

Pytorch進行MNIST分類總結

Pytorch進行分類任務總結 作為Pytorch初學者,利用MNIST資料集作為基本資料集,使用Pytorch進行搭建模型訓練,本文件目的在記錄Pytorch進行深度學習系統搭建流程,使用時能隨時查閱。 文章目錄 Pytorch進行分類任務總結