keras 極簡搭建VGG16 手寫數字識別


使用VGG16網絡 完成遷移學習案例

from keras.applications.vgg16 import VGG16
from keras.models import Sequential
from keras.layers import Conv2D, MaxPooling2D, Activation, Dropout, Flatten, Dense
from keras.optimizers import SGD
from keras.preprocessing.image import ImageDataGenerator, img_to_array, load_img
import numpy as np
from keras.utils import  np_utils
import cv2
import pickle
import matplotlib.pyplot as plt
from keras.datasets import mnist

# 得到適合網絡的數據
(X_train_data, Y_train), (X_test_data, Y_test) = mnist.load_data()  # 下載數據
X_train_data = X_train_data.astype('float32')  # uint8-->float32
X_test_data = X_test_data.astype('float32')
X_train_data /= 255  # 歸一化到0~1區間
X_test_data /= 255
# (60000, 48, 48, 3)
X_train = []
# (10000, 48, 48, 3)
X_test = []
# 把(27, 27, 1)維的數據轉化成(48, 48, 3)維的數據
for i in range(X_train_data.shape[0]):
    X_train.append(cv2.cvtColor(cv2.resize(X_train_data[i], (48, 48)), cv2.COLOR_GRAY2RGB))
for i in range(X_test_data.shape[0]):
    X_test.append(cv2.cvtColor(cv2.resize(X_test_data[i], (48, 48)), cv2.COLOR_GRAY2RGB))

X_train = np.array(X_train)
X_test = np.array(X_test)
# 獨熱編碼
y_train = np_utils.to_categorical(Y_train, num_classes=10)
y_test = np_utils.to_categorical(Y_test, num_classes=10)

# 構建網絡
vgg16_model = VGG16(weights='imagenet', include_top=False, input_shape=(48, 48, 3))
for layer in vgg16_model.layers:
    layer.trainable = False # 別去調整之前的卷積層的參數

top_model = Sequential()
top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
top_model.add(Dense(512, activation='relu'))
top_model.add(Dropout(0.4))
top_model.add(Dense(10, activation='softmax'))

model = Sequential()
model.add(vgg16_model)
model.add(top_model)
sgd = SGD(learning_rate=0.05, decay=1e-5)
model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['acc'])
model.fit(X_train, y_train, batch_size=128, epochs=15)
model.evaluate(X_test, y_test)

我跑了30輪數據,測試集上准確率在0.9833左右


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM