Tensorflow学习实战之VGG16猫狗大战迁移训练

Tensorflow学习实战之VGG16猫狗大战迁移训练


继续跑深度学习Tensorflow的实战,今天的是VGG16的猫狗大战,整体结构框架由13层卷积和3层全连接层组成,对于对pthon不熟悉的我来说,整个搭建调试过程在于数据的写入处理,维度的变换,以及不同函数的灵活使用。
整个过程,在两个地方卡住,第一个是训练时中途进程中断,修改了不少参数,均没有效果,最终找到的问题是数据集出现了问题,最开始用的是微软官网下载的一个猫狗数据集,后来换数据集之后没有问题。第二个是最后测试的时候出现的问题,载入图片后,总提示维度有问题。
所谓迁移训练呢就是说,在别人训练好的权重基础上呢,进行自己的训练,从而获得适应自己所需任务的模型,结果如下:

在这里插入图片描述在这里插入图片描述
整体的框架是这样的:
在这里插入图片描述
model.py是用来装载搭建的卷积层框架,test.py用来最终结果的预测,猫狗大战用来跑训练,首先来看看16层卷积的搭建吧:
定义卷积、池化、全连接层,然后是搭建一个13层的卷积,和一个三层的全连接层,微调训练过程中,因为最终结果,只需要预测猫狗,class为2,所以只修改了最终一层全连接层,trainable=Ture

import tensorflow as tf
import numpy as np
import os 
#模型定义
class vgg16:
    def __init__(self, imgs):
        #加入全局列表,把所需参数加载进类里
        self.parameters=[]
        #初始化
        self.imgs=imgs
        self.convlayers()
        self.fc_layers()
        #输出类别的概率
        self.probs=tf.nn.softmax(self.fc8)
    def saver(self):
        return tf.train.Saver()
        #定义卷积层
    def conv(self,name,input_data,out_channel,trainable=False):
        #获取通道数
        in_channel=input_data.get_shape()[-1]
        with tf.variable_scope(name):
            #初始化
            kernel=tf.get_variable('weights',[3,3,in_channel,out_channel],dtype=tf.float32,trainable=False)
            biases=tf.get_variable('baises',[out_channel],dtype=tf.float32,trainable=False)
            conv_res=tf.nn.conv2d(input_data,kernel,[1,1,1,1],padding='SAME')
            res=tf.nn.bias_add(conv_res,biases)
            out=tf.nn.relu(res,name=name)
        self.parameters+=[kernel,biases]
        return out
    #定义全连接层
    def fc(self,name,input_data,out_channel,trainable=True):
        #获取维度
        shape=input_data.get_shape().as_list()
        if len(shape)==4:
            size=shape[-1]*shape[-2]*shape[-3]
        else :size=shape[1]
        #数据展开
        input_data_flat=tf.reshape(input_data,[-1,size])
        with tf.variable_scope(name):
            #初始化
            weights=tf.get_variable('weights',shape=[size,out_channel],dtype=tf.float32,trainable=trainable)
            biases=tf.get_variable('baises',shape=[out_channel],dtype=tf.float32,trainable
  • 4
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值