mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)
》》歡迎 點(diǎn)贊,留言,收藏加關(guān)注《《
1. 模型構(gòu)建的步驟:
在構(gòu)建AI模型時(shí),一般有以下主要步驟:準(zhǔn)備數(shù)據(jù)、數(shù)據(jù)預(yù)處理、劃分?jǐn)?shù)據(jù)集、配置模型、訓(xùn)練模型、評(píng)估優(yōu)化、模型應(yīng)用,如下圖所示:
【注意】由于MNIST數(shù)據(jù)集太經(jīng)典了,很多深度學(xué)習(xí)書籍在介紹該入門模型案例時(shí),基本上就是直接下載獲取數(shù)據(jù),然后就進(jìn)行模型訓(xùn)練,最后得出一個(gè)準(zhǔn)確率出來(lái)。但這樣的入門案例學(xué)習(xí)后,當(dāng)要拿自己的數(shù)據(jù)來(lái)訓(xùn)練模型,卻往往不知該如何處理數(shù)據(jù)、如何訓(xùn)練、如何應(yīng)用。在本文,將分兩種情況進(jìn)行介紹:(1)使用MNIST數(shù)據(jù)(本案例),(2)使用自己的數(shù)據(jù)。
2. 庫(kù)文件的導(dǎo)入
2.1 使用現(xiàn)成的mnist數(shù)據(jù)
import tensorflow as tf
# 從tensorflow.examples.tutorials.mnist 導(dǎo)入模塊
# 這是TensorFlow 為了教學(xué)MNIST而提前編制的程序
from tensorflow.examples.tutorials.mnist import input_data
import matplotlib.pyplot as plt
mnist = input_data.read_data_sets('/home/anaconda2/桌面/mnist_practice/MNIST_data',one_hot=True)
# MNIST_data指的是存放數(shù)據(jù)的文件夾路徑,one_hot=True 為采用one_hot的編碼方式編碼標(biāo)簽
# 從MNIST_data/中讀取MNIST數(shù)據(jù),這條語(yǔ)句在數(shù)據(jù)不存在時(shí),會(huì)自動(dòng)執(zhí)行下載
2.2 使用自己做的數(shù)據(jù)
如果是使用自己的數(shù)據(jù)集,在準(zhǔn)備數(shù)據(jù)時(shí)的重要工作是“標(biāo)注數(shù)據(jù)”,也就是對(duì)數(shù)據(jù)進(jìn)行打標(biāo)簽,主要的標(biāo)注方式有:
① 整個(gè)文件打標(biāo)簽。例如MNIST數(shù)據(jù)集,每個(gè)圖像只有1個(gè)數(shù)字,可以從0至9建10個(gè)文件夾,里面放相應(yīng)數(shù)字的圖像;也可以定義一個(gè)規(guī)則對(duì)圖像進(jìn)行命名,如按標(biāo)簽+序號(hào)命名;還可以在數(shù)據(jù)庫(kù)里面創(chuàng)建一張對(duì)應(yīng)表,存儲(chǔ)文件名與標(biāo)簽之間的關(guān)聯(lián)關(guān)系。如下圖:
② 圈定區(qū)域打標(biāo)簽。例如ImageNet的物體識(shí)別數(shù)據(jù)集,由于每張圖片上有各種物體,這些物體位于不同位置,因此需要圈定某個(gè)區(qū)域進(jìn)行標(biāo)注,目前比較流行的是VOC2007、VOC2012數(shù)據(jù)格式,這是使用xml文件保存圖片中某個(gè)物體的名稱(name)和位置信息(xmin,ymin,xmax,ymax)。
如果圖片很多,一張一張去計(jì)算位置信息,然后編寫xml文件,實(shí)在是太耗時(shí)耗力了。所幸,有一位大神開(kāi)源了一個(gè)數(shù)據(jù)標(biāo)注工具labelImg(https://github.com/tzutalin/labelImg),只要在界面上畫框標(biāo)注,就能自動(dòng)生成VOC格式的xml文件了,非常方便,如下圖所示:
③ 數(shù)據(jù)截段打標(biāo)簽。針對(duì)語(yǔ)音識(shí)別、文字識(shí)別等,有些是將數(shù)據(jù)截成一段一段的語(yǔ)音或句子,然后在另外的文件中記錄對(duì)應(yīng)的標(biāo)簽信息。
3. 數(shù)據(jù)預(yù)處理
在準(zhǔn)備好基礎(chǔ)數(shù)據(jù)之后,需要根據(jù)模型需要對(duì)基礎(chǔ)數(shù)據(jù)進(jìn)行相應(yīng)的預(yù)處理。
(1)使用MNIST數(shù)據(jù)(本案例)
由于MNIST數(shù)據(jù)集的尺寸統(tǒng)一,只有黑白兩種像素,無(wú)須再進(jìn)行額外的預(yù)處理,直接拿來(lái)建模型就行。
(2)使用自己的數(shù)據(jù)
而如果是要訓(xùn)練自己的數(shù)據(jù),根據(jù)模型需要一般要進(jìn)行以下預(yù)處理:
a. 統(tǒng)一格式:即統(tǒng)一基礎(chǔ)數(shù)據(jù)的格式,例如圖像數(shù)據(jù)集,則全部統(tǒng)一為jpg格式;語(yǔ)音數(shù)據(jù)集,則全部統(tǒng)一為wav格式;文字?jǐn)?shù)據(jù)集,則全部統(tǒng)一為UTF-8的純文本格式等,方便模型的處理;
b. 調(diào)整尺寸:根據(jù)模型的輸入要求,將樣本數(shù)據(jù)全部調(diào)整為統(tǒng)一尺寸。例如LeNet模型是32x32,AlexNet是224x224,VGG是224x224等;
c. 灰度化:根據(jù)模型需要,有些要求輸入灰度圖像,有些要求輸入RGB彩色圖像;
d. 去噪平滑:為提升輸入圖像的質(zhì)量,對(duì)圖像進(jìn)行去噪平滑處理,可使用中值濾波器、高斯濾波器等進(jìn)行圖像的去噪處理。如果訓(xùn)練數(shù)據(jù)集的圖像質(zhì)量很好了,則無(wú)須作去噪處理;
e. 其它處理:根據(jù)模型需要進(jìn)行直方圖均衡化、二值化、腐蝕、膨脹等相關(guān)的處理;
f. 樣本增強(qiáng):有一種觀點(diǎn)認(rèn)為神經(jīng)網(wǎng)絡(luò)是靠數(shù)據(jù)喂出來(lái)的,如果能夠增加訓(xùn)練數(shù)據(jù)的樣本量,提供海量數(shù)據(jù)進(jìn)行訓(xùn)練,則能夠有效提升算法的質(zhì)量。常見(jiàn)的樣本增強(qiáng)方式有:水平翻轉(zhuǎn)圖像、隨機(jī)裁剪、平移變換,顏色、光照變換等。
4. 劃分?jǐn)?shù)據(jù)集
在訓(xùn)練模型之前,需要將樣本數(shù)據(jù)劃分為訓(xùn)練集、測(cè)試集,有些情況下還會(huì)劃分為訓(xùn)練集、測(cè)試集、驗(yàn)證集。
(1)使用MNIST數(shù)據(jù)
本案例要訓(xùn)練模型的MNIST數(shù)據(jù)集,已經(jīng)提供了訓(xùn)練集、測(cè)試集,代碼如下:
#load data(提取訓(xùn)練集、測(cè)試集)
train_xdata = mnist.train.images #訓(xùn)練集樣本
validation_xdata = mnist.validation.images #驗(yàn)證集樣本
test_xdata = mnist.test.images #測(cè)試集樣本
#labels(提取標(biāo)簽數(shù)據(jù))
train_labels = mnist.train.labels #訓(xùn)練集標(biāo)簽
validation_labels = mnist.validation.labels #驗(yàn)證集標(biāo)簽
test_labels = mnist.test.labels #測(cè)試集標(biāo)簽
print(train_xdata.shape,train_labels.shape) #輸出訓(xùn)練集樣本和標(biāo)簽的大小
(2)使用自己的數(shù)據(jù)
如果是要?jiǎng)澐肿约旱臄?shù)據(jù)集,可使用scikit-learn工具進(jìn)行劃分,代碼如下:
fromsklearn.cross_validationimporttrain_test_split
# 隨機(jī)選取75%的數(shù)據(jù)作為訓(xùn)練樣本,其余25%的數(shù)據(jù)作為測(cè)試樣本
# X_data:數(shù)據(jù)集
# y_labels:數(shù)據(jù)集對(duì)應(yīng)的標(biāo)簽X_train,X_test,y_train,y_test=train_test_split(X_data,y_labels,test_size=0.25,random_state=33)
5. 查看數(shù)據(jù)與可視化樣本
#查看數(shù)據(jù),例如訓(xùn)練集中第一個(gè)樣本的內(nèi)容和標(biāo)簽
print(train_xdata[0]) #是一個(gè)包含784個(gè)元素且值在[0,1]之間的向量
print(train_labrels[0])
#可視化樣本,下面是輸出了訓(xùn)練集中前20個(gè)樣本
fig, ax = plt.subplots(nrows=4,ncols=5,sharex='all',sharey='all')
ax = ax.flatten()
for i in range(20):
。。img = train_xdata[i].reshape(28, 28)
。。ax[i].imshow(img,cmap='Greys')
ax[0].set_xticks([])
ax[0].set_yticks([])
plt.tight_layout()
plt.show()
6. 輸出效果
......................省略省略
總結(jié)
以上是生活随笔為你收集整理的mnist手写数字数据集_mnist手写数据集(1. 加载与可视化)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: python爬取js动态网页_Pytho
- 下一篇: 计算机工作对身体有害吗,在电脑前长时间工