tensorflow入门实战----VGG16完成猫狗分类

其中模型和训练集需要提前下好的

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个周期
tensorflow入门实战----VGG16完成猫狗分类_第1张图片
所以,现在,我们学会两种激活函数了

  • Relu
  • softmax
    结果如下:
    tensorflow入门实战----VGG16完成猫狗分类_第2张图片
    tensorflow入门实战----VGG16完成猫狗分类_第3张图片

你可能感兴趣的:(机器学习,编程,python)