深度學(xué)習(xí)tensorflow基礎(chǔ)mnist
軟件架構(gòu)
mnist數(shù)據(jù)集的識(shí)別使用了兩個(gè)非常小的網(wǎng)絡(luò)來(lái)實(shí)現(xiàn),第一個(gè)是最簡(jiǎn)單的全連接網(wǎng)絡(luò),第二個(gè)是卷積網(wǎng)絡(luò),mnist數(shù)據(jù)集是入門數(shù)據(jù)集,所以不需要進(jìn)行圖像增強(qiáng),或者用生成器讀入內(nèi)存,直接使用簡(jiǎn)單的fit()命令就可以一次性訓(xùn)練
安裝教程
- 使用到的主要第三方庫(kù)有tensorflow1.x,基于TensorFlow的Keras,基礎(chǔ)的庫(kù)包括numpy,matplotlib
- 安裝方式也很簡(jiǎn)答,例如:pip install numpy -i https://pypi.tuna.tsinghua.edu.cn/simple
- 注意tensorflow版本不能是2.x
使用說(shuō)明
- 首先,我們預(yù)覽數(shù)據(jù)集,運(yùn)行mnistplt.py,繪制了4張訓(xùn)練用到的圖像
- 訓(xùn)練全連接網(wǎng)絡(luò)則運(yùn)行Densemnist.py,得到權(quán)重Dense.h5,加載模型并預(yù)測(cè)運(yùn)行Denseload.py
- 訓(xùn)練卷積網(wǎng)絡(luò)則運(yùn)行CNNmnist.py,得到權(quán)重CNN.h5,加載模型并預(yù)測(cè)運(yùn)行CNNload.py
結(jié)果圖
訓(xùn)練過(guò)程注釋
全連接網(wǎng)絡(luò)訓(xùn)練:
"""多層感知機(jī)訓(xùn)練""" from tensorflow.examples.tutorials.mnist import input_data from keras.models import Sequential from keras.layers import Dense #模擬原始灰度數(shù)據(jù)讀入 img_size=28 num=10 mnist=input_data.read_data_sets("./data",one_hot=True) X_train,y_train,X_test,y_test=mnist.train.images,mnist.train.labels,mnist.test.images,mnist.test.labels X_train=X_train.reshape(-1,img_size,img_size) X_test=X_test.reshape(-1,img_size,img_size) X_train=X_train*255 X_test=X_test*255 y_train=y_train.reshape(-1,num) y_test=y_test.reshape(-1,num) print(X_train.shape) print(y_train.shape) #全連接層只能輸入一維 num_pixels = X_train.shape[1] * X_train.shape[2] X_train = X_train.reshape(X_train.shape[0],num_pixels).astype('float32') X_test = X_test.reshape(X_test.shape[0],num_pixels).astype('float32') #歸一化 X_train=X_train/255 X_test=X_test/255 # one hot編碼,這里編好了,省略 #y_train = np_utils.to_categorical(y_train) #y_test = np_utils.to_categorical(y_test) #搭建網(wǎng)絡(luò) def baseline(): """ optimizer:優(yōu)化器,如Adam loss:計(jì)算損失,當(dāng)使用categorical_crossentropy損失函數(shù)時(shí),標(biāo)簽應(yīng)為多類模式,例如如果你有10個(gè)類別, 每一個(gè)樣本的標(biāo)簽應(yīng)該是一個(gè)10維的向量,該向量在對(duì)應(yīng)有值的索引位置為1其余為0 metrics: 列表,包含評(píng)估模型在訓(xùn)練和測(cè)試時(shí)的性能的指標(biāo) """ model=Sequential() #第一步是確定輸入層的數(shù)目:在創(chuàng)建模型時(shí)用input_dim參數(shù)確定,例如,有784個(gè)個(gè)輸入變量,就設(shè)成num_pixels。 #全連接層用Dense類定義:第一個(gè)參數(shù)是本層神經(jīng)元個(gè)數(shù),然后是初始化方式和激活函數(shù),初始化方法有0到0.05的連續(xù)型均勻分布(uniform #Keras的默認(rèn)方法也是這個(gè),也可以用高斯分布進(jìn)行初始化normal,初始化實(shí)際就是該層連接上權(quán)重與偏置的初始化 model.add(Dense(num_pixels,input_dim=num_pixels,kernel_initializer='normal',activation='relu')) #softmax是一種用到該層所有神經(jīng)元的激活函數(shù) model.add(Dense(num,kernel_initializer='normal',activation='softmax')) #categorical_crossentropy適用于多分類問(wèn)題,并使用softmax作為輸出層的激活函數(shù)的情況 model.compile(loss='categorical_crossentropy',optimizer='adam',metrics=['accuracy']) return model #訓(xùn)練模型 model = baseline() """ batch_size 整數(shù) 每次梯度更新的樣本數(shù)。 未指定,默認(rèn)為32 epochs 整數(shù) 訓(xùn)練模型迭代次數(shù) verbose 日志展示,整數(shù) 0:為不在標(biāo)準(zhǔn)輸出流輸出日志信息 1:顯示進(jìn)度條 2:每個(gè)epoch輸出一行記錄 對(duì)于一個(gè)有 2000 個(gè)訓(xùn)練樣本的數(shù)據(jù)集,將 2000 個(gè)樣本分成大小為 500 的 batch,那么完成一個(gè) epoch 需要 4 個(gè) iteration """ model.fit(X_train,y_train,validation_data=(X_test,y_test),epochs=10,batch_size=200,verbose=2) #模型概括打印 model.summary() #model.evaluate()返回的是 損失值和你選定的指標(biāo)值(例如,精度accuracy) """ verbose:控制日志顯示的方式 verbose = 0 不在標(biāo)準(zhǔn)輸出流輸出日志信息 verbose = 1 輸出進(jìn)度條記錄 """ scores = model.evaluate(X_test,y_test,verbose=0) print(scores) #模型保存 model_dir="./Dense.h5" model.save(model_dir)
CNN訓(xùn)練:
""" 模型構(gòu)建與訓(xùn)練 Sequential 模型結(jié)構(gòu): 層(layers)的線性堆棧,它是一個(gè)簡(jiǎn)單的線性結(jié)構(gòu),沒(méi)有多余分支,是多個(gè)網(wǎng)絡(luò)層的堆疊 多少個(gè)濾波器就輸出多少個(gè)特征圖,即卷積核(濾波器)的深度 3通道RGB圖片,一個(gè)濾波器有3個(gè)通道的小卷積核,但還是只算1個(gè)濾波器 """ import numpy as np from tensorflow.examples.tutorials.mnist import input_data from keras.models import Sequential from keras.layers import Dense from keras.layers import Dropout #Flatten層用來(lái)將輸入“壓平”,即把多維的輸入一維化, #常用在從卷積層到全連接層的過(guò)渡 from keras.layers import Flatten from keras.layers.convolutional import Conv2D from keras.layers.convolutional import MaxPooling2D #模擬原始灰度數(shù)據(jù)讀入 img_size=28 num=10 mnist=input_data.read_data_sets("./data",one_hot=True) X_train,y_train,X_test,y_test=mnist.train.images,mnist.train.labels,mnist.test.images,mnist.test.labels X_train=X_train.reshape(-1,img_size,img_size) X_test=X_test.reshape(-1,img_size,img_size) X_train=X_train*255 X_test=X_test*255 y_train=y_train.reshape(-1,num) y_test=y_test.reshape(-1,num) print(X_train.shape) #(55000, 28, 28) print(y_train.shape) #(55000, 10) #此處卷積輸入的形狀要與模型中的input_shape匹配 X_train = X_train.reshape(X_train.shape[0],28,28,1).astype('float32') X_test = X_test.reshape(X_test.shape[0],28,28,1).astype('float32') print(X_train.shape)#(55000,28,28,1) #歸一化 X_train=X_train/255 X_test=X_test/255 # one hot編碼,這里編好了,省略 #y_train = np_utils.to_categorical(y_train) #y_test = np_utils.to_categorical(y_test) #搭建CNN網(wǎng)絡(luò) def CNN(): """ 第一層是卷積層。該層有32個(gè)feature map,作為模型的輸入層,接受[pixels][width][height]大小的輸入數(shù)據(jù)。feature map的大小是1*5*5,其輸出接一個(gè)‘relu'激活函數(shù) 下一層是pooling層,使用了MaxPooling,大小為2*2 Flatten壓縮一維后作為全連接層的輸入層 接下來(lái)是全連接層,有128個(gè)神經(jīng)元,激活函數(shù)采用‘relu' 最后一層是輸出層,有10個(gè)神經(jīng)元,每個(gè)神經(jīng)元對(duì)應(yīng)一個(gè)類別,輸出值表示樣本屬于該類別的概率大小 """ model = Sequential() model.add(Conv2D(32, (5, 5), input_shape=(img_size,img_size,1), activation='relu')) model.add(MaxPooling2D(pool_size=(2, 2))) model.add(Flatten()) model.add(Dense(128, activation='relu')) model.add(Dense(num, activation='softmax')) #編譯 model.compile(loss='categorical_crossentropy', optimizer='adam', metrics=['accuracy']) return model #模型訓(xùn)練 model=CNN() model.fit(X_train, y_train, validation_data=(X_test, y_test), epochs=5, batch_size=200, verbose=1) model.summary() scores = model.evaluate(X_test,y_test,verbose=1) print(scores) #模型保存 model_dir="./CNN.h5" model.save(model_dir)
到此這篇關(guān)于mnist的文章就介紹到這了,希望可以幫到你們,更多相關(guān)深度學(xué)習(xí)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
在tensorflow中設(shè)置使用某一塊GPU、多GPU、CPU的操作
今天小編就為大家分享一篇在tensorflow中設(shè)置使用某一塊GPU、多GPU、CPU的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2020-02-02Python-flask調(diào)用接口返回中文數(shù)據(jù)問(wèn)題
這篇文章主要介紹了Python-flask調(diào)用接口返回中文數(shù)據(jù)問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03Python對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警
xray 是從長(zhǎng)亭洞鑒核心引擎中提取出的社區(qū)版漏洞掃描神器,支持主動(dòng)、被動(dòng)多種掃描方式,自備盲打平臺(tái)、可以靈活定義 POC,功能豐富,這篇文章主要介紹了對(duì)接 xray 和微信實(shí)現(xiàn)自動(dòng)告警,需要的朋友可以參考下2019-09-09python獲取網(wǎng)頁(yè)狀態(tài)碼示例
這篇文章主要介紹了python獲取網(wǎng)頁(yè)狀態(tài)碼示例,只需要2行代碼就可實(shí)現(xiàn)想要的功能,需要的朋友可以參考下2014-03-03Python 讀取某個(gè)目錄下所有的文件實(shí)例
今天小編就為大家分享一篇Python 讀取某個(gè)目錄下所有的文件實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-06-06Python通過(guò)OpenPyXL處理Excel的完整教程
OpenPyXL是一個(gè)強(qiáng)大的Python庫(kù),用于處理Excel文件,允許讀取、編輯和創(chuàng)建Excel工作簿和工作表,本文將詳細(xì)介紹OpenPyXL的各種功能,希望對(duì)大家有所幫助2023-11-11python 根據(jù)列表批量下載網(wǎng)易云音樂(lè)的免費(fèi)音樂(lè)
這篇文章主要介紹了python 根據(jù)列表下載網(wǎng)易云音樂(lè)的免費(fèi)音樂(lè),幫助大家更好的理解和學(xué)習(xí)python,感興趣的朋友可以了解下2020-12-12詳解python異步編程之a(chǎn)syncio(百萬(wàn)并發(fā))
這篇文章主要介紹了詳解python異步編程之a(chǎn)syncio(百萬(wàn)并發(fā)),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2018-07-07