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 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
多層感知機MLP的gluon版分類minist
MLP_Gluon
【機器學習】基於sklearn-MLP多層感知機例項
在之前的【【深度學習】DNN神經網路模型】一文中弄清楚MLP基礎由來,本次進一步基於sklearn機器學習庫來實現該過程。 首先看一下簡單的MLP例項: 下面同樣基於手寫MNIST資料集來進行MLP例項: MLP引數眾多,以下一一說明: hidden_layer_sizes :元祖格式,長度