Use VGG16 complete classification of cats and dogs

from keras.applications.vgg16 import VGG16
from keras.models import Sequential
from keras.layers import Conv2D,MaxPool2D,Activation,Dropout,Flatten,Dense
from keras.optimizers import SGD
from keras.preprocessing.image import ImageDataGenerator,img_to_array,load_img
import numpy as np
1 vgg16_model = VGG16(weights='imagenet',include_top=False, input_shape=(150,150,3))
 1 # 搭建全连接层
 2 top_model = Sequential()
 3 top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
 4 top_model.add(Dense(256,activation='relu'))
 5 top_model.add(Dropout(0.5))
 6 top_model.add(Dense(2,activation='softmax'))
 7 
 8 model = Sequential()
 9 model.add(vgg16_model)
10 model.add(top_model)
= train_datagen ImageDataGenerator ( 
    rotation_range = 40,      # random degree of rotation 
    width_shift_range = 0.2, # random horizontal translation 
    height_shift_range = 0.2, # random vertical translation 
    Rescale = 1/255,          # data normalization 
    shear_range = 20 is,        # random shearing transformation 
    zoom_range = 0.2,         # random amplified 
    horizontal_flip = True,   # horizontal flip 
    fill_mode = ' Nearest ' ,    # fill mode 
) 
test_datagen = ImageDataGenerator ( 
    Rescale= 1/255,          # data normalization 
)
batch_size = 32

# 生成训练数据
train_generator = train_datagen.flow_from_directory(
    'image/train',
    target_size=(150,150),
    batch_size=batch_size,
    )

# 测试数据
test_generator = test_datagen.flow_from_directory(
    'image/test',
    target_size=(150,150),
    batch_size=batch_size,
    )
train_generator.class_indices
{'cat': 0, 'dog': 1}
1  # define optimizer, cost function calculation accuracy of the training process 
2 model.compile (Optimizer the SGD = (= 1E-LR. 4, Momentum = 0.9), Loss = ' categorical_crossentropy ' , metrics = [ ' Accuracy ' ])
 . 3  
. 4 model.fit_generator (train_generator, steps_per_epoch = len (train_generator), 20 is = epochs, validation_data = test_generator, validation_steps = len (test_generator))

# pip install h5py
model.save('model_vgg16.h5')

test

from keras.models Import load_model
 Import numpy AS NP 

label = np.array ([ ' CAT ' , ' Dog ' ])
 # Loading Model 
Model = load_model ( ' model_vgg16.h5 ' ) 

# Import Image 
Image load_img = ( ' Image / Test / CAT / cat.1003.jpg ' ) 
Image

image = image.resize((150,150))
image = img_to_array(image)
image = image/255
image = np.expand_dims(image,0)
image.shape
(1, 150, 150, 3)
print(label[model.predict_classes(image)]
['cat']
 

Guess you like

Origin www.cnblogs.com/liuwenhua/p/11569615.html