1. 程式人生 > >pytorch實戰(二)-多層感知機識別MNIST數字

pytorch實戰(二)-多層感知機識別MNIST數字

import torch
from  torch.autograd import *
from  torch import nn,optim
from  torch.utils.data import DataLoader
from  torchvision import datasets,transforms

class simpleNet(nn.Module):
    def __init__(self,in_dim,n_hidden_1,n_hidden_2,out_dim):
        super(simpleNet,self).__init__()
        self.layer1=nn.Linear(in_dim,n_hidden_1)
        self.layer2=nn.Linear(n_hidden_1,n_hidden_2)
        self.layer3=nn.Linear(n_hidden_2,out_dim)

    def forward(self, x):
        x=self.layer1(x)
        x=self.layer2(x)
        x=self.layer3(x)
        return x


class Activation_Net(nn.Module):
    def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
        super().__init__()
        self.layer1 = nn.Sequential(nn.Linear(in_dim, n_hidden_1),nn.ReLU(True))
        self.layer2 = nn.Sequential(nn.Linear(n_hidden_1, n_hidden_2),nn.ReLU(True))
        self.layer3 = nn.Sequential(nn.Linear(n_hidden_2, out_dim))

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x

class Batch_Net(nn.Module):
    def __init__(self, in_dim, n_hidden_1, n_hidden_2, out_dim):
        super().__init__()
        self.layer1 = nn.Sequential(nn.Linear(in_dim, n_hidden_1),nn.BatchNorm1d(n_hidden_1),nn.ReLU(True))
        self.layer2 = nn.Sequential(nn.Linear(n_hidden_1, n_hidden_2),nn.BatchNorm1d(n_hidden_2),nn.ReLU(True))
        self.layer3 = nn.Sequential(nn.Linear(n_hidden_2, out_dim))

    def forward(self, x):
        x = self.layer1(x)
        x = self.layer2(x)
        x = self.layer3(x)
        return x

batch_size=64
learning_rate=1e-2
num_epoches=20

data_tf=transforms.Compose([transforms.ToTensor(),transforms.Normalize([0.5],[0.5])])
train_dataset=datasets.MNIST(root='./data',train=True,transform=data_tf,download=True)
test_dataset=datasets.MNIST(root="./data",train=False,transform=data_tf)
train_loader=DataLoader(train_dataset,batch_size=batch_size,shuffle=True)
test_loader=DataLoader(test_dataset,batch_size=batch_size,shuffle=False)

model=Batch_Net(28*28,300,100,10)
if torch.cuda.is_available():
    model=model.cuda()
criterion=nn.CrossEntropyLoss()
optimizer=optim.SGD(model.parameters(),lr=learning_rate)

for epoch in range(num_epoches):
    loss_sum, cort_num_sum,acc = 0.0, 0,0
    for data in train_loader:
        img,label=data
        img=img.view(img.size(0),-1)
        if torch.cuda.is_available():
            inputs = Variable(img).cuda()
            target = Variable(label).cuda()
        else:
            inputs = Variable(img)
            target = Variable(label)
        output =model(inputs)
        loss = criterion(output, target)
        optimizer.zero_grad()
        loss.backward()
        optimizer.step()
        loss_sum += loss.data
        _, pred = output.data.max(1)
        num_correct = pred.eq(target).sum()
        cort_num_sum += num_correct
    acc=cort_num_sum.float()/len(train_dataset)
    print( "After %d epoch , training loss is %.2f , correct_number is %d  accuracy is %.6f. "%(epoch,loss_sum,cort_num_sum,acc))


model.eval()
eval_loss=0
eval_acc=0
for data in test_loader:
    img ,label =data
    img=img.view(img.size(0),-1)
    if torch.cuda.is_available():
        img=Variable(img,volatile=True)
        label=Variable(label,volatile=True)
    else:
        img = Variable(img, volatile=True)
        label = Variable(label, volatile=True)
    out=model(img)
    loss=criterion(out,label)
    eval_loss+=loss.data*label.size(0)
    _,pred=out.data.max(1)
    num_correct=pred.eq(label).sum()
    eval_acc+=num_correct.data
print('Test loss: {:.6f},ACC: {:.6f}'.format(eval_loss.float()/(len(test_dataset)),eval_acc.float()/(len(test_dataset))))

相關推薦

pytorch實戰-感知識別MNIST數字

import torch from torch.autograd import * from torch import nn,optim from torch.utils.data import DataLoader from torchvision import d

TensorFlow筆記---感知識別手寫數字

Softmax Regression無隱含層,在MNIST資料集上取得了大約92%的正確率,提高準確度,要給神經網路加上隱含層,並使用能減輕過擬合的Dropout,自適應學習速率的Adagrad以及可以解決梯度彌散的啟用函式ReLU. 定義演算法公式即神經網路

Deep learning with Theano 官方中文教程翻譯——感知MLP

供大家相互交流和學習,本人水平有限,若有各種大小錯誤,還請巨牛大牛小牛微牛們立馬拍磚,這樣才能共同進步!若引用譯文請註明出處http://www.cnblogs.com/charleshuang/。 下面。http://deeplearning.net/tutorial/mlp.html#mlp  的中

Deeplearning4j 實戰5:基於感知Mnist壓縮以及在Spark實現

在上一篇部落格中,我們用基於RBM的的Deep AutoEncoder對Mnist資料集進行壓縮,應該說取得了不錯的效果。這裡,我們將神經網路這塊替換成傳統的全連線的前饋神經網路對Mnist資料集進行壓縮,看看兩者的效果有什麼異同。整個程式碼依然是利用Deeplearning4j進行實現,並且為了方

深度學習筆記感知MLP與神經網路結構

為了儘量能形成系統的體系,作為最基本的入門的知識,請參考一下之前的兩篇部落格: 神經網路(一):概念 神經網路(二):感知機 上面的兩篇部落格讓你形成對於神經網路最感性的理解。有些看不懂的直接忽略就行,最基本的符號的記法應該要會。後面會用到一這兩篇部落格中

深度學習Deeplearning4j 入門實戰5:基於感知Mnist壓縮以及在Spark實現

在上一篇部落格中,我們用基於RBM的的Deep AutoEncoder對Mnist資料集進行壓縮,應該說取得了不錯的效果。這裡,我們將神經網路這塊替換成傳統的全連線的前饋神經網路對Mnist資料集進行壓縮,看看兩者的效果有什麼異同。整個程式碼依然是利用Deeplearnin

深度學習實踐——神經網路

#一、準備 為了更深入的理解神經網路,筆者基本採用純C++的手寫方式實現,其中矩陣方面的運算則呼叫opencv,資料集則來自公開資料集a1a。 實驗環境: Visual studio 2017 opencv3.2.0 a1a資料集 本文緊跟上篇文章深度

Dubbo實戰協議配置

本文將展示如何在Dubbo中使用多協議來暴露服務。 1、不同服務不同協議 例如:不同服務在效能上適用不同協議進行傳輸,比如大資料用短連線協議,小資料大併發用長連線協議。配置如下: provider-multi-protocol.xml <?xml

Maven實戰---模組開發---缺少Jar包

Maven裡面的Jar包經常出現Missing的情況,無外乎幾種情況: 1、私服裡面沒有相應的版本號的Jar包或者Jar包沒寫版本號 2、Jar包引錯了,相應的依賴關係也就錯了 3、引入了依賴的Jar

tensorflow 感知 分類mnist

from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets("/root/data/", one_hot=True) import tensorf

mxnet感知訓練MNIST資料集詳解【轉】

來自:http://www.cnblogs.com/Mu001999/p/6221093.html #匯入需要的模組 import numpy as np #numpy只儲存數值,用於數值運算,解決Python標準庫中的list只能儲存物件的指標的問題 import os

pytorch實現感知MLP)全連線神經網路FC分類MNIST手寫數字體的識別

1.匯入必備的包 1 import torch 2 import numpy as np 3 from torchvision.datasets import mnist 4 from torch import nn 5 from torch.autograd import Variable 6

深度學習基礎—— 從感知MLP到卷積神經網路CNN

經典的多層感知機(Multi-Layer Perceptron)形式上是全連線(fully-connected)的鄰接網路(adjacent network)。 That is, every neuron in the network is connec

TensorFlow實戰- 使用TensorFlow實現感知

一,多層感知機簡介 多層感知機也叫 深度前饋網路 或 前饋神經網路。 “多層”本質上指的是多層隱含層,神經網路的非線性也主要體現在隱含層非線性的啟用函式上,理論上只要隱含節點足夠多,只要有一層隱含層就可以擬合任意函式,但隱含層越多,就越容易擬合複雜函式,並且

DeepLearning tutorial3MLP感知原理簡介+程式碼詳解

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

基於神經網路感知識別手寫數字

資料集是經典的MNIST,來自美國國家標準與技術研究所,是人工書寫的0~9數字圖片,圖片的畫素為28*28,圖片為灰度圖。MNIST分別為訓練集和測試集,訓練資料包含6萬個樣本,測試資料集包含1萬個樣本。使用Tensorflow框架載入資料集。 載入資料集的程式碼如下: import ten

TensorFlow HOWTO 4.2 感知迴歸時間序列

4.2 多層感知機迴歸(時間序列) 這篇教程中,我們使用多層感知機來預測時間序列,這是迴歸問題。 操作步驟 匯入所需的包。 import tensorflow as tf import numpy as np import pandas as pd import matp

TensorFlow HOWTO 4.1 感知分類

4.1 多層感知機(分類) 這篇文章開始就是深度學習了。多層感知機的架構是這樣: 輸入層除了提供資料之外,不幹任何事情。隱層和輸出層的每個節點都計算一次線性變換,並應用非線性啟用函式。隱層的啟用函式是壓縮性質的函式。輸出層的啟用函式取決於標籤的取值範圍。 其本質上相當於

感知MLP演算法原理及Spark MLlib呼叫例項Scala/Java/Python

多層感知機 演算法簡介:         多層感知機是基於反向人工神經網路(feedforwardartificial neural network)。多層感知機含有多層節點,每層節點與網路的下一層節點完全連線。輸入層的節點代表輸入資料,其他層的節點通過將輸入資料與層上節點

TensorFlow學習筆記4--實現感知MNIST資料集

前面使用TensorFlow實現一個完整的Softmax Regression,並在MNIST資料及上取得了約92%的正確率。現在建含一個隱層的神經網路模型(多層感知機)。 import tensorflow as tf import numpy as np