1. 程式人生 > >mxnet多層感知機訓練MNIST資料集詳解【轉】

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

來自:http://www.cnblogs.com/Mu001999/p/6221093.html

#匯入需要的模組
import numpy as np #numpy只儲存數值,用於數值運算,解決Python標準庫中的list只能儲存物件的指標的問題
import os #本例子中沒有使用到
import gzip #使用zlib來壓縮和解壓縮資料檔案,讀寫gzip檔案
import struct #通過引入struct模組來處理圖片中的二進位制資料
import mxnet as mx #引入MXNet包
import logging #引入logging包記錄日誌

#利用MNIST資料集進行訓練

def read_data(label_url,image_url): #定義讀取資料的函式
    with gzip.open(label_url) as flbl: #解壓標籤包
        magic, num = struct.unpack(">II",flbl.read(8)) #採用Big Endian的方式讀取兩個int型別的資料,且參考MNIST官方格式介紹,magic即為magic number (MSB first) 用於表示檔案格式,num即為資料夾內包含的資料的數量
        label = np.fromstring(flbl.read(),dtype=np.int8) #將標籤包中的每一個二進位制資料轉化成其對應的十進位制資料,且轉換後的資料格式為int8(-128 to 127)格式,返回一個數組
    with gzip.open(image_url,'rb') as fimg: #已只讀形式解壓影象包
        magic, num, rows, cols = struct.unpack(">IIII",fimg.read(16)) #採用Big Endian的方式讀取四個int型別資料,且參考MNIST官方格式介紹,magic和num上同,rows和cols即表示圖片的行數和列數
        image = np.fromstring(fimg.read(),dtype=np.uint8).reshape(len(label),rows,cols) #將圖片包中的二進位制資料讀取後轉換成無符號的int8格式的陣列,並且以標籤總個數,行數,列數重塑成一個新的多維陣列
    return (label,image) #返回讀取成功的label陣列和image陣列
#且fileobject.read(size)的時候是按照流的方式讀取(可test)

(train_lbl, train_img) = read_data('mnist/train-labels-idx1-ubyte.gz','mnist/train-images-idx3-ubyte.gz') #構建訓練資料
(val_lbl, val_img) = read_data('mnist/t10k-labels-idx1-ubyte.gz','mnist/t10k-images-idx3-ubyte.gz') #構建測試資料

def to4d(img): #定義一個函式用於生成四維矩陣
    return img.reshape(img.shape[0],1,28,28).astype(np.float32)/255 #將影象包中的陣列以標籤總個數,影象通道數(MNIST資料集為黑白資料集故只為1),行數,列數重塑後複製為一個數據型別為float32的新的四維矩陣,且其中的元素值都除以255後轉化為0-1的浮點值

batch_size = 100 #定義每次處理資料的數量為100
train_iter = mx.io.NDArrayIter(to4d(train_img),train_lbl,batch_size,shuffle=True) #構建訓練資料迭代器,且其中shuffle表示採用可拖動的方式,意味著可以將在早期已經訓練過的資料在後面再次訓練
val_iter = mx.io.NDArrayIter(to4d(val_img),val_lbl,batch_size) #構建測試資料迭代器

#建立多層網路模型
data = mx.sym.Variable('data') #建立一個用於輸入資料的PlaceHolder變數(佔位符)
data = mx.sym.Flatten(data=data) #將data中的四維資料轉化為二維資料且其中一維為每次處理資料的數量,第二維即為每張圖片的影象通道數×長×寬(即為其畫素點個數×影象通道數)
fc1 = mx.sym.FullyConnected(data=data,name='fc1',num_hidden=128) #建立第一層全連線層,輸入資料為data,num_hidden表示該隱藏層有128個用於輸出的節點
act1 = mx.sym.Activation(data=fc1,name='relu1',act_type='relu') #為第一層全連線層設定一個Relu啟用函式,輸入資料為fc1
fc2 = mx.sym.FullyConnected(data=act1,name='fc2',num_hidden=64) #建立第二層全連線層,輸入資料為act1,num_hidden表示該隱藏層有64個用於輸出的節點
act2 = mx.sym.Activation(data=fc2,name='relu2',act_type='relu') #為第一層全連線層設定一個Relu啟用函式,輸入資料為fc2
fc3 = mx.sym.FullyConnected(data=act2,Name='fc3',num_hidden=10) #建立第三層全連線層,輸入資料為act2,num_hidden表示該隱藏層有10個用於輸出的節點
mlp = mx.sym.SoftmaxOutput(data=fc3,name='softmax') #對輸入的資料執行softmax變換,並且通過利用logloss執行BP演算法

logging.getLogger().setLevel(logging.DEBUG) #返回作為層次結構根記錄器的記錄器,且記錄等級作為DEBUG

#構建前饋神經網路模型
model = mx.model.FeedForward(
    symbol = mlp, #使網路結構為構建好的mlp
    num_epoch = 20, #資料的訓練次數為20
    learning_rate = 0.1 #使模型按照學習率為0.1進行訓練
)
#資料擬合,訓練模型
model.fit(
    X = train_iter, #設定訓練迭代器
    eval_data = val_iter, #設定測試迭代器
    batch_end_callback = mx.callback.Speedometer(batch_size,200) #在每一批epoches結尾時呼叫,列印logging資訊(每經過200個batch_size列印logging)
)

結果:

[email protected]:~/test_mxnet$ python mnist.py 
mnist.py:44: DeprecationWarning: mxnet.model.FeedForward has been deprecated. Please use mxnet.mod.Module instead.
  learning_rate = 0.1
/home/chenqy/anaconda3/lib/python3.6/site-packages/mxnet/model.py:526: DeprecationWarning: Calling initializer with init(str, NDArray) has been deprecated.please use init(mx.init.InitDesc(...), NDArray) instead.
  self.initializer(k, v)
INFO:root:Start training with [cpu(0)]
INFO:root:Epoch[0] Batch [200]  Speed: 28654.44 samples/sec     accuracy=0.110850
INFO:root:Epoch[0] Batch [400]  Speed: 28355.02 samples/sec     accuracy=0.111300
INFO:root:Epoch[0] Batch [600]  Speed: 28450.97 samples/sec     accuracy=0.225650
INFO:root:Epoch[0] Resetting Data Iterator
INFO:root:Epoch[0] Time cost=2.136
INFO:root:Epoch[0] Validation-accuracy=0.462500
INFO:root:Epoch[1] Batch [200]  Speed: 28150.14 samples/sec     accuracy=0.617100
INFO:root:Epoch[1] Batch [400]  Speed: 28452.33 samples/sec     accuracy=0.797150
INFO:root:Epoch[1] Batch [600]  Speed: 27642.93 samples/sec     accuracy=0.840200
INFO:root:Epoch[1] Resetting Data Iterator
INFO:root:Epoch[1] Time cost=2.142
INFO:root:Epoch[1] Validation-accuracy=0.863000
INFO:root:Epoch[2] Batch [200]  Speed: 28472.69 samples/sec     accuracy=0.870900
INFO:root:Epoch[2] Batch [400]  Speed: 28021.98 samples/sec     accuracy=0.895400
INFO:root:Epoch[2] Batch [600]  Speed: 29820.60 samples/sec     accuracy=0.912850
INFO:root:Epoch[2] Resetting Data Iterator
INFO:root:Epoch[2] Time cost=2.091
INFO:root:Epoch[2] Validation-accuracy=0.913300
INFO:root:Epoch[3] Batch [200]  Speed: 28586.32 samples/sec     accuracy=0.921850
INFO:root:Epoch[3] Batch [400]  Speed: 26254.28 samples/sec     accuracy=0.931350
INFO:root:Epoch[3] Batch [600]  Speed: 28702.82 samples/sec     accuracy=0.939500
INFO:root:Epoch[3] Resetting Data Iterator
INFO:root:Epoch[3] Time cost=2.163
INFO:root:Epoch[3] Validation-accuracy=0.939200
INFO:root:Epoch[4] Batch [200]  Speed: 28974.95 samples/sec     accuracy=0.944500
INFO:root:Epoch[4] Batch [400]  Speed: 26773.51 samples/sec     accuracy=0.948150
INFO:root:Epoch[4] Batch [600]  Speed: 30578.17 samples/sec     accuracy=0.953950
INFO:root:Epoch[4] Resetting Data Iterator
INFO:root:Epoch[4] Time cost=2.098
INFO:root:Epoch[4] Validation-accuracy=0.949100
INFO:root:Epoch[5] Batch [200]  Speed: 28481.22 samples/sec     accuracy=0.956750
INFO:root:Epoch[5] Batch [400]  Speed: 26666.94 samples/sec     accuracy=0.958000
INFO:root:Epoch[5] Batch [600]  Speed: 27876.00 samples/sec     accuracy=0.961450
INFO:root:Epoch[5] Resetting Data Iterator
INFO:root:Epoch[5] Time cost=2.179
INFO:root:Epoch[5] Validation-accuracy=0.955500
INFO:root:Epoch[6] Batch [200]  Speed: 30656.54 samples/sec     accuracy=0.963450
INFO:root:Epoch[6] Batch [400]  Speed: 28489.96 samples/sec     accuracy=0.965100
INFO:root:Epoch[6] Batch [600]  Speed: 20908.39 samples/sec     accuracy=0.967750
INFO:root:Epoch[6] Resetting Data Iterator
INFO:root:Epoch[6] Time cost=2.316
INFO:root:Epoch[6] Validation-accuracy=0.962900
INFO:root:Epoch[7] Batch [200]  Speed: 28951.96 samples/sec     accuracy=0.968050
INFO:root:Epoch[7] Batch [400]  Speed: 30919.49 samples/sec     accuracy=0.970350
INFO:root:Epoch[7] Batch [600]  Speed: 28214.94 samples/sec     accuracy=0.971500
INFO:root:Epoch[7] Resetting Data Iterator
INFO:root:Epoch[7] Time cost=2.051
INFO:root:Epoch[7] Validation-accuracy=0.965700
INFO:root:Epoch[8] Batch [200]  Speed: 30160.24 samples/sec     accuracy=0.973700
INFO:root:Epoch[8] Batch [400]  Speed: 28007.56 samples/sec     accuracy=0.974350
INFO:root:Epoch[8] Batch [600]  Speed: 28068.66 samples/sec     accuracy=0.974650
INFO:root:Epoch[8] Resetting Data Iterator
INFO:root:Epoch[8] Time cost=2.094
INFO:root:Epoch[8] Validation-accuracy=0.967800
INFO:root:Epoch[9] Batch [200]  Speed: 28675.15 samples/sec     accuracy=0.976800
INFO:root:Epoch[9] Batch [400]  Speed: 28443.64 samples/sec     accuracy=0.978250
INFO:root:Epoch[9] Batch [600]  Speed: 27833.02 samples/sec     accuracy=0.977750
INFO:root:Epoch[9] Resetting Data Iterator
INFO:root:Epoch[9] Time cost=2.124
INFO:root:Epoch[9] Validation-accuracy=0.969700
INFO:root:Epoch[10] Batch [200] Speed: 27748.34 samples/sec     accuracy=0.979850
INFO:root:Epoch[10] Batch [400] Speed: 28045.86 samples/sec     accuracy=0.981200
INFO:root:Epoch[10] Batch [600] Speed: 27743.39 samples/sec     accuracy=0.981150
INFO:root:Epoch[10] Resetting Data Iterator
INFO:root:Epoch[10] Time cost=2.159
INFO:root:Epoch[10] Validation-accuracy=0.971300
INFO:root:Epoch[11] Batch [200] Speed: 28185.11 samples/sec     accuracy=0.982350
INFO:root:Epoch[11] Batch [400] Speed: 28095.23 samples/sec     accuracy=0.983050
INFO:root:Epoch[11] Batch [600] Speed: 27157.69 samples/sec     accuracy=0.983950
INFO:root:Epoch[11] Resetting Data Iterator
INFO:root:Epoch[11] Time cost=2.162
INFO:root:Epoch[11] Validation-accuracy=0.971400
INFO:root:Epoch[12] Batch [200] Speed: 28228.54 samples/sec     accuracy=0.984450
INFO:root:Epoch[12] Batch [400] Speed: 27552.26 samples/sec     accuracy=0.985000
INFO:root:Epoch[12] Batch [600] Speed: 28388.36 samples/sec     accuracy=0.985550
INFO:root:Epoch[12] Resetting Data Iterator
INFO:root:Epoch[12] Time cost=2.144
INFO:root:Epoch[12] Validation-accuracy=0.972100
INFO:root:Epoch[13] Batch [200] Speed: 28875.11 samples/sec     accuracy=0.987250
INFO:root:Epoch[13] Batch [400] Speed: 26348.66 samples/sec     accuracy=0.986850
INFO:root:Epoch[13] Batch [600] Speed: 28737.18 samples/sec     accuracy=0.987150
INFO:root:Epoch[13] Resetting Data Iterator
INFO:root:Epoch[13] Time cost=2.152
INFO:root:Epoch[13] Validation-accuracy=0.972000
INFO:root:Epoch[14] Batch [200] Speed: 27254.97 samples/sec     accuracy=0.988750
INFO:root:Epoch[14] Batch [400] Speed: 28949.99 samples/sec     accuracy=0.988300
INFO:root:Epoch[14] Batch [600] Speed: 28010.31 samples/sec     accuracy=0.989200
INFO:root:Epoch[14] Resetting Data Iterator
INFO:root:Epoch[14] Time cost=2.143
INFO:root:Epoch[14] Validation-accuracy=0.971800
INFO:root:Epoch[15] Batch [200] Speed: 27872.34 samples/sec     accuracy=0.990150
INFO:root:Epoch[15] Batch [400] Speed: 27604.11 samples/sec     accuracy=0.989900
INFO:root:Epoch[15] Batch [600] Speed: 27109.95 samples/sec     accuracy=0.990900
INFO:root:Epoch[15] Resetting Data Iterator
INFO:root:Epoch[15] Time cost=2.185
INFO:root:Epoch[15] Validation-accuracy=0.972400
INFO:root:Epoch[16] Batch [200] Speed: 27911.90 samples/sec     accuracy=0.991800
INFO:root:Epoch[16] Batch [400] Speed: 28186.87 samples/sec     accuracy=0.991300
INFO:root:Epoch[16] Batch [600] Speed: 29020.00 samples/sec     accuracy=0.992050
INFO:root:Epoch[16] Resetting Data Iterator
INFO:root:Epoch[16] Time cost=2.120
INFO:root:Epoch[16] Validation-accuracy=0.972900
INFO:root:Epoch[17] Batch [200] Speed: 24626.20 samples/sec     accuracy=0.992850
INFO:root:Epoch[17] Batch [400] Speed: 25938.36 samples/sec     accuracy=0.992200
INFO:root:Epoch[17] Batch [600] Speed: 25045.08 samples/sec     accuracy=0.992900
INFO:root:Epoch[17] Resetting Data Iterator
INFO:root:Epoch[17] Time cost=2.386
INFO:root:Epoch[17] Validation-accuracy=0.973300
INFO:root:Epoch[18] Batch [200] Speed: 25552.00 samples/sec     accuracy=0.994200
INFO:root:Epoch[18] Batch [400] Speed: 25847.90 samples/sec     accuracy=0.993250
INFO:root:Epoch[18] Batch [600] Speed: 26043.37 samples/sec     accuracy=0.993550
INFO:root:Epoch[18] Resetting Data Iterator
INFO:root:Epoch[18] Time cost=2.330
INFO:root:Epoch[18] Validation-accuracy=0.974400
INFO:root:Epoch[19] Batch [200] Speed: 26778.91 samples/sec     accuracy=0.994900
INFO:root:Epoch[19] Batch [400] Speed: 25334.35 samples/sec     accuracy=0.994250
INFO:root:Epoch[19] Batch [600] Speed: 26160.49 samples/sec     accuracy=0.994500
INFO:root:Epoch[19] Resetting Data Iterator
INFO:root:Epoch[19] Time cost=2.305
INFO:root:Epoch[19] Validation-accuracy=0.975000



相關推薦

mxnet感知訓練MNIST資料

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

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

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

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

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

tensorflow 感知 分類mnist

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

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

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

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

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

mxnet卷積神經網路訓練MNIST資料測試

import numpy as np import mxnet as mx import logging logging.getLogger().setLevel(logging.DEBUG) batch_size = 100 mnist = mx.test_utils

python for 資料型別列表

 range # 範圍  print(range(5))  print(list(range(10,0,-1))) [起始位置:終止位置:步長] range(起始位置,終止位置,步長) #顧頭不顧尾  1. 使用for迴圈和range列印50 - 0

刨根問底 | Elasticsearch 5.X叢集節點角色配置深入

轉自:https://blog.csdn.net/laoyang360/article/details/78290484 1、問題引出 ES5.X節點型別多了ingest節點型別。 針對3個節點、5個節點或更多節點的叢集,如何配置節點角色才能使得系統性能最優呢?  2、ES2.X及之前版本節點角色概述 3、

用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

MXNet實戰之感知

這是來自MXNet官網裡面的一個例子,利用module包[1]來構建一個多層感知機,並在UCI letter recognition[2]中進行訓練。利用module包來訓練網路,可以採用兩種介面:中層介面和高層介面。高層介面可以看做是對中層介面的一種封裝。 其

keras中使用MLP(感知)神經網路來實現MNIST手寫體識別

    Keras是一個基於python的的深度學習框架,比tensorflow更簡單易用,適合入門學習,本篇文章主要介紹使用keras實現手寫體識別任務。環境為python3+,Keras2.1,神經網路基礎知識在此不做過多介紹。    1.    載入MNIST資料。方式

MXnet程式碼實戰之感知

多層感知機介紹 多層感知器(MLP,Multilayer Perceptron)是一種前饋人工神經網路模型。與上文提到的多類邏輯迴歸非常相似,主要區別在:輸入層和輸出層之間插入了一個到多個隱含層。 如下圖,黃色的點為輸入層,中間為隱含層,綠色的點為輸出層:

Hulu機器學習問題與解答系列 | 十五:感知與布爾函數

功能 目標 機器學習 分享圖片 研究 vue gic per 發展 今天沒有別的話,好好學習,多多轉發! 本期內容是 【多層感知機與布爾函數】 場景描述 神經網絡概念的誕生很大程度上受到了神經科學的啟發。生物學研究表明,大腦皮層的感知與計算功能是通過分多層實現的

TensorFlow-感知(MLP)

訓練 感知 set equal () closed batch BE lac TensorFlow訓練神經網絡的4個步驟: 1、定義算法公式,即訓練神經網絡的forward時的計算 2、定義損失函數和選擇優化器來優化loss 3、訓練步驟 4、對模型進行準確率評測 附Mul

感知面臨的問題

適應 感知機 傳播 梯度下降 oid dag 反饋 網絡 節點數 多層感知機 隨著層數越多,所需的節點數目下降,但是隨著層數的增多又會出現其他的問題: 過擬合 解決辦法: DropOut 參數難以調試 尤其是梯度下降的參數使用Adagrad、Adam、Adadelta等自

深度學習第三課 感知

        多層感知機針對於中間有隱藏層的神經網路結構,對於資料的每一層傳遞都會相應的多一層[w,b],這中間使用的傳參函式稱之為啟用函式,如果啟用函式是線性的話,那麼就沒什麼意義,無論中間有多少層,其實和沒有隱藏層是一樣的,所以需要非線性的函式作為啟用函

DeepLearning tutorial(3)MLP感知原理簡介+程式碼

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

機器學習基於sklearn-MLP感知例項

在之前的【【深度學習】DNN神經網路模型】一文中弄清楚MLP基礎由來,本次進一步基於sklearn機器學習庫來實現該過程。 首先看一下簡單的MLP例項: 下面同樣基於手寫MNIST資料集來進行MLP例項: MLP引數眾多,以下一一說明: hidden_layer_sizes :元祖格式,長度