iT邦幫忙

2018 iT 邦幫忙鐵人賽
DAY 27
0
AI & Machine Learning

tensorflow python系列 第 27

DAY27 基於Keras使用CNN進行數字辨識(1)

前言:

我們今天就先從建立CNN模型開始進行手寫數字辨識。

程式開始:

(1)準備

from keras.utils import np_utils
import numpy as np
from keras.datasets import mnist
from keras.layers import Dense,Dropout,Flatten,Conv2D,MaxPooling2D
import matplotlib.pyplot as plt
from keras.models import Sequential
np.random.seed(10)

(x_train , y_train),(x_test,y_test)=mnist.load_data()

x_train4=x_train.reshape(x_train.shape[0],28,28,1).astype('float32')
x_test4=x_test.reshape(x_test.shape[0],28,28,1).astype('float32')

x_train4_nor = x_train4 /255
x_test_nor=x_test4 / 255

y_train_one=np_utils.to_categorical(y_train)
y_test_one=np_utils.to_categorical(y_test)

說明:

第1~7行:宣告要使用到的函式庫。

第9行:讀入Mnist資料。

第11~12行:將28*28的圖片矩陣轉為784個數字。

第14~15行:將資料正規化。

第17~18行:使用one-hot來進行轉換。

(2)建立模型

model = Sequential()

model.add(Conv2D(filters=16,
                 kernel_size=(5,5),
                 padding='same',
                 input_shape=(28,28,1),
                 activation='relu'
                ))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Conv2D(filters=36,
                 kernel_size=(5,5),
                 padding='same',
                 activation='relu'))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Dropout(0.25))
model.add(Flatten())
model.add(Dense(128,activation='relu'))
model.add(Dropout(0.25))
model.add(Dense(10,activation='softmax'))

說明:

第1行:建立一個線性堆疊的模型。

第3~8行:建立卷積層1。

=>filters:濾鏡的層數

=>kernel_size(a,b):濾鏡的大小為axb

=>padding='same':使影像經過卷積計算後大小不變

=>input_shape(a,b,c):a,b為輸入影像的大小,c為單色或彩色

=>activation:設定激勵函數

第9行:建立池化層1。

第10~13行:建立卷積層2。

=>filters:濾鏡的層數

=>kernel_size(a,b):濾鏡的大小為axb

=>padding='same':使影像經過卷積計算後大小不變

=>input_shape(a,b,c):a,b為輸入影像的大小,c為單色或彩色

第14行:建立池化層2

第15行:避免overfitting

第16行:建立平坦層

第17~18行:建立隱藏層,且避免overfitting

第19行:建立輸出層

結語:

到了這邊,我們就完成了keras的CNN模型的組建了,下一章開始進行訓練。


上一篇
DAY26 基於Keras進行數字辨識(2)
下一篇
DAY28 基於Keras使用CNN進行數字辨識(2)
系列文
tensorflow python30

尚未有邦友留言

立即登入留言