其中模型和训练集需要提前下好的
from keras.application.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
vgg16_model = VGG16(weight='imagenet',include_top=False,input_shape(150,150,3))
#搭建全连接层
top_model=Sequential()
#Flatten数据的扁平化,变成一个一维的,其中,输出形状的output_shape1:是从开始取到结尾
top_model.add(Flatten(input_shape=vgg16_model.output_shape[1:]))
#接下来进行全连接,用dense这个函数,顺带着用relu进行激活
top_model.add(Dropout(0.5))
#老师讲到的softmax激活函数
top_model.add(Dense(2,activation='softmax'))
#最终成型的模型要加入vgg_model和top_model,整合成一个模型
model=Sequential()
model.add(vgg16_model)
model.add(top_model)
train_datagen=ImageDataGenerator(
rotation_range=40,#随机选择度
width_shift_range=0.2,#随机水平平移
height_shift_range=0.2,#随机竖直平移
rescale=1/255,#数据归一化
shear_range=20,#随机错切变换
zoom_range=0.2,#随机放大
horizontal_flip=True,#水平翻转
fill_model='nearest',#填充方式
)
test_datagen=ImageDataGenerator(
rescale=1/255,#训练集中需要数据归一化
)
############
#接下来开始定义训练集的数据
train_generator=train_datagen.flow_from_directory(
'image/test'
target_size=(150,150),#定义训练集的图片大小
batch_size=batch_size,#定义训练集的batch大小
)
train_generator.class_indices#查看label
#定义优化器,代价函数,训练过程中计算准确率
model.compile(optimizer=SGD(lr=le-4,momentum=0.9),loss='categorical_crossentropy',metrics=['accuracy'])
model.fit_generator(train_generator,epochs=20,validation_data=test_generator)
一共需要20个周期
所以,现在,我们学会两种激活函数了
- Relu
- softmax
结果如下: