【Keras】30 秒上手 Keras+實例對mnist手寫數字進行識別準確率達99%以上

本文我們將學習使用Keras一步一步搭建一個卷積神經網絡。具體來說,我們將使用卷積神經網絡對手寫數字(MNIST數據集)進行識別,并達到99%以上的正確率。

@為什么選擇Keras呢?

主要是因為簡單方便。更多細節請看:https://keras.io/

@什么卷積神經網絡?

簡單地說,卷積神經網絡(CNNs)是一種多層神經網絡,它可以有效地減少全連接神經網絡參數量太大的問題。

下面就直接進入主題吧!

import keras 
keras.__version__

‘2.1.5’

from keras.models import Sequential
# 序貫模型
model = Sequential() 
from keras.layers import Dense 
import numpy as np 
import tensorflow as tf

配置keras模型

# units 矩陣運算輸出的特征維度,input_dim 輸入數據特征維度
model.add(Dense(units=64, activation='relu', input_dim=100))
model.add(Dense(units=10, activation='softmax')) 
model.add(Dense(units = 1024,activation='tanh')) 
model.output_shape

(None, 10)

model.output_shape

(None, 1024)

在完成了模型的構建后, 可以使用 .compile() 來配置學習過程

model.compile(loss='categorical_crossentropy',optimizer='sgd',metrics=['accuracy'])

訓練

不需要寫for循環

model.fit(x_train, y_train, epochs=5, batch_size=32)

一批批交給模型,需要自己寫for循環

model.train_on_batch(x_batch, y_batch)

模型評估

loss_and_metrics = model.evaluate(x_test, y_test, batch_size=128)

模型預測

classes = model.predict(x_test, batch_size=128)



實例 mnist 手寫數字進行識別

(外網下載數據可能很慢或者timeouts)

導包、定義變量

import keras
# 數據集
from keras.datasets import mnist
# 序貫模型
from keras.models import Sequential
# Dense:矩陣運算
# Dropout:防止過擬合
# Flatten:reshape(None,-1)
from keras.layers import Dense, Dropout, Flatten
# Conv2D:卷積運算
# MaxPooling2D:池化
from keras.layers import Conv2D, MaxPooling2D# 后端,后臺
# 默認Tensorflow
from keras import backend as Kbatch_size = 128
num_classes = 10
epochs = 12# input image dimensions
img_rows, img_cols = 28, 28

數據操作,轉換

import tensorflow as tf 
# the data, split between train and test sets
(x_train, y_train), (x_test, y_test) = mnist.load_data()# 四維的NHWC---->卷積運算需要
x_train = x_train.reshape(x_train.shape[0], img_rows, img_cols, 1)
x_test = x_test.reshape(x_test.shape[0], img_rows, img_cols, 1)
input_shape = (img_rows, img_cols, 1)# 類型轉換
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')# 歸一化 0 ~1
x_train /= 255
x_test /= 255
print('x_train shape:', x_train.shape)
print(x_train.shape[0], 'train samples')
print(x_test.shape[0], 'test samples')print(y_train.shape)
# convert class vectors to binary class matrices
# one-hot
y_train = keras.utils.to_categorical(y_train, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

模型構建

# 聲明序貫模型
model = Sequential()
# 第一層卷積
model.add(Conv2D(32, kernel_size=(3, 3),activation='relu',input_shape=input_shape))
# 第二層卷積
model.add(Conv2D(64, (3, 3), activation='relu'))
# 池化層
model.add(MaxPooling2D(pool_size=(2, 2)))
# dropout層
model.add(Dropout(0.25))
# reshape
model.add(Flatten())
# 全連接層,矩陣運算
model.add(Dense(1024, activation='relu'))
# dropout層
model.add(Dropout(0.5))
# 輸出層
model.add(Dense(num_classes, activation='softmax'))

編譯,最優化

model.compile(loss=keras.losses.categorical_crossentropy,optimizer=keras.optimizers.Adadelta(),metrics=['accuracy'])

訓練

x_train.shape

(60000, 28, 28, 1)

model.fit(x_train, y_train,batch_size=batch_size,epochs=epochs,verbose=1,validation_data=(x_test, y_test))

Train on 60000 samples, validate on 10000 samples
Epoch 1/12
26752/60000 [============>…] - ETA: 1:38 - loss: 0.3388 - acc: 0.8965

score = model.evaluate(x_test, y_test, verbose=0)
print('Test loss:', score[0])
print('Test accuracy:', score[1])

參考:
https://elitedatascience.com/keras-tutorial-deep-learning-in-python
http://adventuresinmachinelearning.com/keras-tutorial-cnn-11-lines/
https://keras.io/zh/#30-keras

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/456002.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/456002.shtml
英文地址,請注明出處:http://en.pswp.cn/news/456002.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

分布式資本沈波:未來區塊鏈殺手級應用將出現在“+區塊鏈”

雷鋒網5月22日報道,日前“區塊鏈技術和應用峰會”在杭州國際博覽中心舉行。會上,分布式資本創始管理人沈波作了《區塊鏈的投資現狀與發展趨勢》演講。 沈波表示,由于區塊鏈的共識機制和無法篡改兩大特點,它在各行各業皆有應用潛力…

幀間預測小記

幀間預測后,在比特流中會有相應的信息:殘差信息,運動矢量信息,所選的模式。 宏塊的色度分量分辨率是亮度分辨率的一半(Cr和Cb),水平和垂直均一半。色度塊采用和亮度塊一致的分割模式&#xff0…

ImageJ Nikon_科研論文作圖之ImageJ

各位讀者朋友們又見面了,今天給大家介紹一款圖片處理軟件——ImageJ,這是一款免費的科學圖像分析工具,廣泛應用于生物學研究領域。ImageJ軟件能夠對圖像進行縮放、旋轉、扭曲、模糊等處理,也可計算選定區域內分析對象的一系列幾何…

python中面向對象

面向對象 Object Oriented 面向對象的學習: 面向對象的語法(簡單,記憶就可以搞定)面向對象的思想(稍難,需要一定的理解) 面向過程和面向對象的區別 面向過程開發,以函數作為基本結構…

【urllib】url編碼問題簡述

對url編解碼總結 需要用到urllib庫中的parse模塊 import urllib.parse # Python3 url編碼 print(urllib.parse.quote("天天")) # Python3 url解碼 print(urllib.parse.unquote("%E5%A4%E5%A4%")) urlparse() # urllib.parse.urlparse(urlstring,scheme,…

冷知識 —— 地理

西安1980坐標系: 1978 年 4 月在西安召開全國天文大地網平差會議,確定重新定位,建立我國新的坐標系。為此有了 1980 國家大地坐標系。1980 國家大地坐標系采用地球橢球基本參數為 1975 年國際大地測量與地球物理聯合會第十六屆大會推薦的數據…

獨家| ChinaLedger白碩:區塊鏈中的隱私保護

隱私問題一直是區塊鏈應用落地的障礙問題之一,如何既能滿足監管,又能不侵害數據隱私,是行業都在攻克的問題。那么,到底隱私問題為何難?有什么解決思路,以及實踐創新呢?零知識證明、同態加密等技…

手機處理器排行榜2019_手機處理器AI性能排行榜出爐,高通驍龍第一,華為排在第十名...

↑↑↑擊上方"藍字"關注,每天推送最新科技新聞安兔兔在近日公布了今年四月份Android手機處理器AI性能排行榜,榜單顯示高通驍龍865處理器的AI性能在Android陣營中排在第一名——該處理器的AI性能得分接近46萬分,今年的小米10、三星G…

芯片支持的且會被用到的H.264特性 預測編碼基本原理

視頻壓縮: 1.H.264基本檔次和主要檔次;2.CAVLC熵編碼,即基于上下文的自適應變長編碼;(不支持CABAC,即基于上下文的自適應算術編碼)分辨率:僅用到1080p60,即分辨率為1920*…

MongoDB 數據庫 【總結筆記】

一、MongoDB 概念解析 什么是MongoDB? ? 1、MongoDB是有C語言編寫的,是一個基于分布式文件存儲的開源數據庫系統,在高負載的情況下,添加更多節點,可以保證服務器的性能 ? 2、MongoDB為web應用提供了高性能的數據存儲…

PHP 函數截圖 哈哈哈

轉載于:https://www.cnblogs.com/bootoo/p/6714676.html

python中的魔術方法

魔術方法 魔術方法就是一個類/對象中的方法,和普通方法唯一的不同時,普通方法需要調用!而魔術方法是在特定時刻自動觸發。 1.__init__ 初始化魔術方法 觸發時機:初始化對象時觸發(不是實例化觸發,但是和實…

2016年光伏電站交易和融資的十大猜想

1領跑者計劃備受關注,競價上網或從試點開始 領跑者計劃規模大,上網條件好,又有政府背書,雖說價格也不便宜,但省去很多隱性成本,對于致力于規模化發展的大型企業來說仍是首要選擇。同時,從能源管…

loading gif 透明_搞笑GIF:有這樣的女朋友下班哪里都不想去

原標題:搞笑GIF:有這樣的女朋友下班哪里都不想去這樣的廣場舞看著不涼快嗎?大哥慢點,機器經受不住你這樣的速度求孩子的心里陰影面積生孩子就是用來玩的。有這樣的媳婦做飯,下班哪里也不想去1.領導在門外用門夾核桃&am…

Redis數據庫 【總結筆記】

一、NoSql(非關系型數據庫) NoSQL:NoSQL Not Only SQL 非關系型數據庫 ? NoSQL,泛指非關系型的數據庫。隨著互聯網web2.0網站的興起,傳統的關系數據庫在應付web2.0網站,特別是超大規模和高并發的SNS類型…

基于IP的H.264關鍵技術

一、 引言 H.264是ITU-T最新的視頻編碼標準,被稱作ISO/IEC14496-10或MPEG-4 AVC,是由運動圖像專家組(MPEG)和ITU的視頻編碼專家組共同開發的新產品。H.264分兩層結構,包括視頻編碼層和網絡適配層。視頻編碼層處理的是塊、宏塊和片的數據&…

“光伏進社區” 應及早謀劃布局

所謂“光伏進社區”就是全國城鄉居民家庭大批量的利用家庭光伏系統,甚至出現光伏的社區化聯網交換、合作等更深入的活動。雖然“光伏進社區”還有很長的路要走,但“光伏進社區”的各種經濟、技術、社會條件正越來越向有利方向發展。 城鄉居民集聚社區是光…

python中的裝飾器和抽象類

裝飾器和抽象類 裝飾器就是對函數或者方法或者類進行修飾 #第一步:創建一個普通函數 def laxi():print(噗哧噗哧噗哧噗哧~~~)#調用函數 laxi() laxi()#第二步:擴展函數的功能(不是裝飾器) #聲明一個擴展函數 def deco…

eigen庫安裝_OpenCV+Eigen上位機程序移植(七十一)

1、給硬盤分區現在小伙伴們對于給電腦硬盤分區想必比較頭疼,給電腦硬盤分區分為兩種情況,一是在安裝系統之前給系統硬盤分區,二是在安裝系統之后給硬盤分區,我們現在購買的品牌機和筆記本的用戶比較多,而且筆記本和品牌…

【實戰操作】使用FFmpeg將一個視頻文件中音頻合成到另一個視頻中 只需三秒

直接進入主題 主要參數: -i——設置輸入文件名。-f——設置輸出格式。-y——若輸出文件已存在時則覆蓋文件。-fs——超過指定的文件大小時則結束轉換。-t——指定輸出文件的持續時間,以秒為單位。-ss——從指定時間開始轉換,以秒為單位。-t從…