天天看點

深度學習|Keras識别CIFAR-10圖像(CNN)

深度學習|Keras識别CIFAR-10圖像(CNN)

資料和方法

CIFAR-10資料集有6000個32×32個彩色圖檔,50000個訓練圖檔和10000個測試圖檔。有10個類别:飛機、汽車、鳥、貓、鹿、狗、青蛙、馬、船、卡車。

深度學習|Keras識别CIFAR-10圖像(CNN)

資料下載下傳和處理

資料下載下傳

Keras已經提供了子產品用于下載下傳資料,通過一下代碼即可完成下載下傳。

from keras.datasets import cifar10
import numpy as np
np.random.seed(10)

(x_img_train,y_label_train),(x_img_test,y_label_test)=cifar10.load_data()           

複制

資料處理
  • 标準化
  • label的one-hot編碼
x_img_train_normalize = x_img_train.astype('float32') / 255.0
x_img_test_normalize = x_img_test.astype('float32') / 255.0

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)           

複制

CNN模組化

模型結構
深度學習|Keras識别CIFAR-10圖像(CNN)
建立模型
from keras.models import Sequential
from keras.layers import Conv2D,MaxPooling2D,Dense,Dropout,Flatten

model = Sequential()
model.add(Conv2D(filters=32,kernel_size=(3,3),
                 input_shape=(32, 32,3), 
                 activation='relu', 
                 padding='same'))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(filters=64, kernel_size=(3, 3), 
                 activation='relu', padding='same'))
model.add(Dropout(0.25))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dropout(rate=0.25))
model.add(Dense(1024, activation='relu'))
model.add(Dropout(rate=0.25))
model.add(Dense(10, activation='softmax'))           

複制

深度學習|Keras識别CIFAR-10圖像(CNN)
訓練模型
model.compile(loss='categorical_crossentropy',
              optimizer='adam', metrics=['accuracy'])
train_history = model.fit(x_img_train_normalize, y_label_train_OneHot,
                        validation_split=0.2,
                        epochs=10, batch_size=128, verbose=1)            

複制

深度學習|Keras識别CIFAR-10圖像(CNN)
模型預測

精度不是特别高,可以多做幾層卷積和池化。

深度學習|Keras識别CIFAR-10圖像(CNN)