
以Cifer-10為資料來源(dataset)進行CNN 演算法分析
我們使用Google提供的Colab (colaboratory)工具來進行開發說明
Python代碼如下
from keras.datasets import cifar10
import numpy as np
np.random.seed(10) #因為keras會從numpy獲取random值, 在固定seed值, 讓每次
重跑的random值能一致
(x_img_train,y_label_train),(x_img_test,y_label_test)=cifar10.load_data() # 下載訓
練資料和測試資料, 此dataset包含50000筆32*32 size的訓練圖片(training data), 和
10000筆32*32 size的測試圖片(testing data)
x_img_train_normalize = x_img_train.astype('float32') / 255.0 #做Normalization
x_img_test_normalize = x_img_test.astype('float32') / 255.0 #做Normalization
from keras.utils import np_utils
y_label_train_OneHot = np_utils.to_categorical(y_label_train)
y_label_test_OneHot = np_utils.to_categorical(y_label_test)
#在Cifer-10的dataset有10種圖片分類, 我們將答案(y_label)進行分類, 每一張圖片
只有一個答案, 以矩陣格式表示, 例如array[0., 0., 0., 1., 0., 0., 0., 0., 0.,
0.]
#開始Keras的模型建立
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D, ZeroPadding2D
model = Sequential()
#建立CNN的第一層, 這裡指定用32個feature maps (filters=32)來scan一張圖
(convolution way), 圖形輸入格式是32*32*3 (size 32*32, RGB), activation function使用
relu, 當然你也可以選其他的activation function, sigmod
model.add(Conv2D(filters=32,kernel_size=(3,3),input_shape=(32, 32,3),activation='relu',padding='same'))
model.add(Dropout(rate=0.25))
model.add(MaxPooling2D(pool_size=(2, 2)))