Tensorflow Finetuning VGG16——猫狗大战

本文介绍了如何利用预训练的VGG16模型对猫狗大战数据集进行微调,通过修改最后三层全连接层以适应二分类任务,最后展示模型在训练后的良好分类效果。

现在已经有很很多优秀的神经网络模型,这些模型大部分都是使用ImageNet数据集1000类训练得到的。然而我们在实际应用中1000类的模型并不完全适用我们自己的数据集,而使用自己的数据集训练需要花费大量的计算时间,而且有可能数据不够无法得到理想的模型。这时候我们可以保留训练好的模型的大部分参数,而仅仅对网络的最后几层全连接层进行Finetuning。这里我们将适用猫狗大战数据集中的1500张图对VGG16网络网络的最后三层全连接层进行训练,因为我们最后输出只有两类,所有将最后一层全连接层输出维度改为2。

猫狗大战数据集地址:

(1)下载并分类处理猫狗大战训练集和VGG16权重

猫狗大战数据集下载链接如下

 https://pan.baidu.com/s/13hw4LK8ihR6-6-8mpjLKDA

密码:dmp4

VGG16权重链接如下

链接: https://pan.baidu.com/s/123VBgiXNikGTRkDv57lj5Q

密码: nih7

下载后得到数据的训练集和测试集

在这里我们只需要训练集,训练集中包括猫狗图像25000张,数据太多了而且猫狗的图像都在一个文件夹中,只于图像的名字区分,很不利于我们制作训练集啊,因此我们写了一个简单的程序从训练集中取1000张图像,并将猫狗分别保存到文件夹内,对了为了方便大家单独新建个文件夹用于保存分类后的图像,可以参考下面代码中的路径。

import os
import shutil
 
#下载得到的训练集图像
image_path='/home/cyy/python_code/tensorflow/kaggle/train'
#将猫狗分类保存的路径
train_path='/home/cyy/python_code/tensorflow/dog_cat_classification/data'
 
image_list=os.listdir(image_path)
#读取1000张猫狗图像,按照图像名字分别保存
for image_name in image_list[0:1000]:
    class_name=image_name[0:3]
    save_path=os.path.join(train_path,class_name)
    if not(os.path.exists(save_path)):
        os.mkdir(save_path)
    file_name=os.path.join(image_path,image_name)
    save_name=os.path.join(save_path,image_name)
    shutil.copyfile(file_name,save_name)

这样就将1000张猫狗图像分别保存到了两个文件夹中,如下图所示

(2)搭建VGG16神经网络

VGG16 网络由ImageNet数据集训练1000类得到,所有最后一层全连接层输出为1000类,为了实现对猫狗的识别我们将最后一层输出改为2,并对最后的三层全连接层进行训练,所有在下面的VGG16_model.py文件中可以看到,只有最后三层全连接层我们选择了trainable=True。

import numpy as np
import tensorflow as tf


class vgg16:
    def __init__(self, imgs):
        self.parameters = []
        self.imgs = imgs
        self.convlayers()
        self.fc_layers()
        self.probs = self.fc8

    def saver(self):
        return tf.train.Saver()

    def maxpool(self,name,input_data, trainable):
        out = tf.nn.max_pool(input_data,[1
评论 14
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值