#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Created on Sun Sep 30 17:12:12 2018这是用keras搭建的vgg16网络
这是很经典的cnn,在图像和时间序列分析方面有很多的应用
@author: lg
"""
#################import keras
from keras.datasets import cifar10
from keras.preprocessing.image import ImageDataGenerator
from keras.models import Sequential
from keras.layers import Dense, Dropout, Activation, Flatten
from keras.layers import Conv2D, MaxPooling2D, BatchNormalization
from keras import optimizers
import numpy as np
from keras.layers.core import Lambda
from keras import backend as K
from keras.optimizers import SGD
from keras import regularizers
from keras.models import load_model#import data
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
x_train = x_train.astype('float32')
x_test = x_test.astype('float32')
y_train = keras.utils.to_categorical(y_train, 10)
y_test = keras.utils.to_categorical(y_test, 10)#用于正则化时权重降低的速度
weight_decay = 0.0005
nb_epoch=100
batch_size=32#layer1 32*32*3
model = Sequential()
#第一个 卷积层 的卷积核的数目是32 ,卷积核的大小是3*3,stride没写,默认应该是1*1
#对于stride=1*1,并且padding ='same',这种情况卷积后的图像shape与卷积前相同,本层后shape还是32*32
model.add(Conv2D(64, (3, 3), padding='same',
input_shape=(32,32,3),kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
#进行一次归一化
model.add(BatchNormalization())
model.add(Dropout(0.3))
#layer2 32*32*64
model.add(Conv2D(64, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
#下面两行代码是等价的,#keras Pool层有个奇怪的地方,stride,默认是(2*2),
#padding默认是valid,在写代码是这些参数还是最好都加上,这一步之后,输出的shape是16*16*64
#model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(MaxPooling2D(pool_size=(2, 2),strides=(2,2),padding='same')  )
#layer3 16*16*64
model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer4 16*16*128
model.add(Conv2D(128, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
#layer5 8*8*128
model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer6 8*8*256
model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer7 8*8*256
model.add(Conv2D(256, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
#layer8 4*4*256
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer9 4*4*512
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer10 4*4*512
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
#layer11 2*2*512
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer12 2*2*512
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(Dropout(0.4))
#layer13 2*2*512
model.add(Conv2D(512, (3, 3), padding='same',kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Dropout(0.5))
#layer14 1*1*512
model.add(Flatten())
model.add(Dense(512,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
#layer15 512
model.add(Dense(512,kernel_regularizer=regularizers.l2(weight_decay)))
model.add(Activation('relu'))
model.add(BatchNormalization())
#layer16 512
model.add(Dropout(0.5))
model.add(Dense(10))
model.add(Activation('softmax'))
# 10
model.summary()
sgd = SGD(lr=0.01, decay=1e-6, momentum=0.9, nesterov=True)
model.compile(loss='categorical_crossentropy', optimizer=sgd,metrics=['accuracy'])model.fit(x_train,y_train,epochs=nb_epoch, batch_size=batch_size,validation_split=0.1, verbose=1)model.save('my_model_bp.h5')

keras实现 vgg16相关推荐

  1. NS之VGG(Keras):基于Keras的VGG16实现之《复仇者联盟3》灭霸图像风格迁移设计(A Neural Algorithm of Artistic Style)

    NS之VGG(Keras):基于Keras的VGG16实现之<复仇者联盟3>灭霸图像风格迁移设计(A Neural Algorithm of Artistic Style) 导读 通过代码 ...

  2. 从keras看VGG16结构图

    vgg16训练 上面放了一个keras用vgg16训练测试的例子,我也试过用vgg16训练然后测试自己的例子,效果一般,这里我们来分析一下vgg16的网络结果 keras代码如下 def VGG_16 ...

  3. 调用tensorflow2中的tf.keras.applications.VGG16并进行微调

    调用tensorflow2中的tf.keras.applications.VGG16并进行微调 环境配置:tensorflow版本2.3.0:cuda 10.1:python3.8 数据集:cifar ...

  4. Keras使用VGG16模型预测自己的图片

    Keras使用VGG16模型预测自己的图片 环境 Win10 Miniconda3 Pycharm2018.02 代码如下 from keras.applications.vgg16 import V ...

  5. Keras复现VGG16及实现花卉分类

    VGG网络 VGG网络是2014年ILSVRC竞赛的第二名(第一名是GoogleNet,即后来的inception),由牛津大学的计算机视觉实验组提出.原始论文地址https://arxiv.org/ ...

  6. keras导入VGG16下载太慢解决办法

    在这里先下载h5文件(notop版本,也就是不包含全连接层1000类别输出的版本) https://download.csdn.net/download/dongyuxieshen/9972619 如 ...

  7. keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)...

    引自:http://blog.csdn.net/sinat_26917383/article/details/72859145 中文文档:http://keras-cn.readthedocs.io/ ...

  8. keras系列︱Application中五款已训练模型、VGG16框架(Sequential式、Model式)解读(二)

    不得不说,这深度学习框架更新太快了尤其到了Keras2.0版本,快到Keras中文版好多都是错的,快到官方文档也有旧的没更新,前路坑太多. 到发文为止,已经有theano/tensorflow/CNT ...

  9. keras 自带VGG16 net 参数分析

    对VGG16 这类keras自带的网络分析有感,写在这里. 查看VGG16在keras中的说明文档,可以这样: from keras.applications.vgg16 import VGG16 然 ...

最新文章

  1. 在线作图|如何绘制一张山脊图
  2. LeetCode 225. Implement Stack using Queues--用队列实现栈--C++解法
  3. CodeForces Goodbye 2017
  4. chromium之histogram.h
  5. Linux学习之四——磁盘与文件系统管理
  6. asc desc排序_21.数据库排序?左连接 ?右连接?
  7. location.replace与location.href,location.reload的区别
  8. 6-C/C++实现数据结构链表相关操作
  9. Axure高保真智慧校园管理系统/校园管理/人事管理/学籍管理/教学管理/流程审批/备课管理/考务管理/成绩管理/排课管理/选课管理/选课系统/调课申请/教师考评管理/web端管理系统
  10. CodeBlocks配色方案设置(简单易懂)
  11. 快速解决MariaDB无密码就可以登录的问题
  12. 找出最具竞争力的子序列_每日算法系列【LeetCode 376】摆动序列
  13. 如何制作语音聊天程序源码,制作语音社交交友APP
  14. 逆水寒服务器维护中,逆水寒维护到几点今天 逆水寒11.1更新了什么
  15. ap mt7260a 华硕_华硕(ASUS)路由器AP模式设置_华硕路由器当无线AP设置-192路由网
  16. 百度网盘在线不限速下载网站源码
  17. python求多叉树任意两点之间的距离
  18. 4K显示屏Win10下软件字体太小解决方法
  19. Linux0.11 键盘中断处理过程
  20. python tfidf特征变换_Python中的TfidfVectorizer参数解析

热门文章

  1. 都说AIOps是必然趋势,那实践AIOps之前需要做些什么准备?\n
  2. 5分钟快速打造WebRTC视频聊天转
  3. AtCoder Beginner Contest 072
  4. 《iOS 8案例开发大全》——实例006 实现复杂的查找和替代工作
  5. mysql 关于日期时间的字段类型
  6. 在 2016 年学 JavaScript 是一种什么样的体验?
  7. 解决Sublime包管理package control 报错 There are no packages available for installation
  8. 【沟通的艺术】你能勾住你的听众么?
  9. 不想当管理者、甚至连项目经理都也不想当,只想静心写写代码、不做管理
  10. fping的使用方法