利用VGG16做花数据集的识别

前言

刚完成机器视觉的作业(利用预训练好的模型,对花的数据集进行识别),所以就记录一下。本次实验中,我使用的是keras的vgg16模型,然后再添加了三层全连接层对花进行识别,50个epoch后在验证集中的准确率为87.63,不算很好,但有由于确实太耗费时间了,就不太想去重新调参然后训练了,就只能勉强接受了。
我的实验数据是直接在kaggle上下的,链接:Flowers Recognition

VGG16

VGG是Oxford的Visual Geometry Group的组提出的。该网络是在ILSVRC 2014上的相关工作,主要工作是证明了增加网络的深度能够在一定程度上影响网络最终的性能。VGG16共包含16个卷积层(Convolutional Layer),3个全连接层(Fully connected Layer),以及5个池化层(Pool layer),其中,卷积层和全连接层具有权重系数,因此也被称为权重层,总数目为13+3=16,这即是VGG16中16的来源。
VGG16的突出特点是:
1.卷积层均采用相同的卷积核参数。卷积层均表示为conv3-XXX,其中conv3说明该卷积层采用的卷积核的尺寸(kernel size)是3,即宽(width)和高(height)均为3,3*3是很小的卷积核尺寸,结合其它参数(步幅stride=1,填充方式padding=same),这样就能够使得每一个卷积层(张量)与前一层(张量)保持相同的宽和高。XXX代表卷积层的通道数。
2.池化层均采用相同的池化核参数。池化层的参数均为2×。
3.模型是由若干卷积层和池化层堆叠(stack)的方式构成,比较容易形成较深的网络结构(在2014年,16层已经被认为很深了)。
VGG16网络结构:
在这里插入图片描述

实验源码及结果展示

源码

其实也很简单,就是直接在keras上调取VGG16模型就行了,不过模型比较大,可能需要下载一会。

import os
import cv2
import random
from tensorflow.python.keras.applications import VGG16, VGG19
from tensorflow.python.keras import Sequential
from tensorflow.python.keras import layers
from tensorflow.python.keras.optimizers import SGD
from tensorflow.python.keras.models import Model
import matplotlib.pyplot as plt
import numpy as np

def get_data():
    data = []
    labels = []
    types = os.listdir('./flowers')
    for name in types:
        flowers = os.listdir('./flowers' + '/' + name)
        for flower in flowers:
            img = cv2.imread('./flowers' + '/' + name + '/' + flower)
            img = cv2.
  • 3
    点赞
  • 32
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值