keras分类猫狗数据(下)finetune

keras分类猫狗数据(上)数据预处理
keras分类猫狗数据(中)使用CNN分类模型
keras分类猫狗数据(下)迁移学习
keras分类猫狗数据(番外篇)深度学习CNN连接SVM分类

1 .使用keras.applications中的vgg16网络模型进行特征提取,并自定义两个全连接层输出分类。

from keras.applications import VGG16
from keras import models,layers,optimizers
from keras.callbacks import TensorBoard

conv_base=VGG16(weights='imagenet',include_top=False,input_shape=(128,128,3))

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

conv_base.trainable=False

model.summary()

model.compile(optimizer='adam',loss='binary_crossentropy',metrics=['acc'])

import catvsdogs.morph as mp

model.fit_generator(
      mp.train_flow,
      steps_per_epoch=32,
      epochs=50,
      validation_data=mp.test_flow,
      validation_steps=32,callbacks=[TensorBoard(log_dir='logs/3')])
model.save_weights('outputs/weights_vgg16_use.h5')

这里写图片描述
这里写图片描述
在30多轮迭代后,测试正确率达到88%。

2 . 微调,使vgg16模型的最后一个卷积层也参与训练,本次使用上文保存的训练权重集weights_vgg16_use.h5加速训练过程,并使用较小的学习率。

from keras.applications import VGG16
from keras import models,layers,optimizers
from keras.callbacks import TensorBoard

conv_base=VGG16(weights='imagenet',include_top=False,input_shape=(128,128,3))

model = models.Sequential()
model.add(conv_base)
model.add(layers.Flatten())
model.add(layers.Dense(256, activation='relu'))
model.add(layers.Dense(1, activation='sigmoid'))

model.load_weights('outputs/weights_vgg16_use.h5')

conv_base.trainable=True
trainable=False
for layer in conv_base.layers:
    if layer.name=='block5_conv1':
        trainable=True
    layer.trainable=trainable
model.summary()

model.compile(optimizer=optimizers.adam(lr=1e-5),loss='binary_crossentropy',metrics=['acc'])

import catvsdogs.morph as mp

history = model.fit_generator(
      mp.train_flow,
      steps_per_epoch=32,
      epochs=50,
      validation_data=mp.test_flow,
      validation_steps=32,callbacks=[TensorBoard(log_dir='logs/4')])

这里写图片描述
这里写图片描述
上图蓝色为本文过程1的,红色为过程2的,正确率到达90%。本文只使用了2000+1000的数据,迭代次数较少,如果想打算更高的识别率,可以简单修改。

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值