Keras框架:VGG网络代码实现

VGG概念:

VGG之所以经典,在于它首次将深度学习做得非常“深”,达 到了16-19层,同时,它用了非常“小”的卷积核(3X3)。

网络框架:

在这里插入图片描述

VGG的结构:

1、一张原始图片被resize到(224,224,3)。
2、conv1两次[3,3]卷积网络,输出的特征层为64,输出为(224,224,64),再2X2最大池化,输出net为 (112,112,64)。
3、conv2两次[3,3]卷积网络,输出的特征层为128,输出net为(112,112,128),再2X2最大池化,输出 net为(56,56,128)。
4、conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(56,56,256),再2X2最大池化,输出net 为(28,28,256)。
5、conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(28,28,512),再2X2最大池化,输出net 为(14,14,512)。
6、conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(14,14,512),再2X2最大池化,输出net 为(7,7,512)。
7、利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,4096)。共进行两次。
8、利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,1000)。 最后输出的就是每个类的预测。

VGG16代码实现:

网络主体部分:(vgg16.py)

#-------------------------------------------------------------#
#   vgg16的网络部分
#-------------------------------------------------------------#
import tensorflow as tf# 创建slim对象
slim = tf.contrib.slimdef vgg_16(inputs,num_classes=1000,is_training=True,dropout_keep_prob=0.5,spatial_squeeze=True,scope='vgg_16'):with tf.variable_scope(scope, 'vgg_16', [inputs]):# 建立vgg_16的网络# conv1两次[3,3]卷积网络,输出的特征层为64,输出为(224,224,64)net = slim.repeat(inputs, 2, slim.conv2d, 64, [3, 3], scope='conv1')# 2X2最大池化,输出net为(112,112,64)net = slim.max_pool2d(net, [2, 2], scope='pool1')# conv2两次[3,3]卷积网络,输出的特征层为128,输出net为(112,112,128)net = slim.repeat(net, 2, slim.conv2d, 128, [3, 3], scope='conv2')# 2X2最大池化,输出net为(56,56,128)net = slim.max_pool2d(net, [2, 2], scope='pool2')# conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(56,56,256)net = slim.repeat(net, 3, slim.conv2d, 256, [3, 3], scope='conv3')# 2X2最大池化,输出net为(28,28,256)net = slim.max_pool2d(net, [2, 2], scope='pool3')# conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(28,28,512)net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv4')# 2X2最大池化,输出net为(14,14,512)net = slim.max_pool2d(net, [2, 2], scope='pool4')# conv3三次[3,3]卷积网络,输出的特征层为256,输出net为(14,14,512)net = slim.repeat(net, 3, slim.conv2d, 512, [3, 3], scope='conv5')# 2X2最大池化,输出net为(7,7,512)net = slim.max_pool2d(net, [2, 2], scope='pool5')# 利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,4096)net = slim.conv2d(net, 4096, [7, 7], padding='VALID', scope='fc6')net = slim.dropout(net, dropout_keep_prob, is_training=is_training,scope='dropout6')# 利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,4096)net = slim.conv2d(net, 4096, [1, 1], scope='fc7')net = slim.dropout(net, dropout_keep_prob, is_training=is_training,scope='dropout7')# 利用卷积的方式模拟全连接层,效果等同,输出net为(1,1,1000)net = slim.conv2d(net, num_classes, [1, 1],activation_fn=None,normalizer_fn=None,scope='fc8')# 由于用卷积的方式模拟全连接层,所以输出需要平铺if spatial_squeeze:net = tf.squeeze(net, [1, 2], name='fc8/squeezed')return net

图像预处理部分:(utils.py)

import matplotlib.image as mpimg
import numpy as np
import tensorflow as tf
from tensorflow.python.ops import array_opsdef load_image(path):# 读取图片,rgbimg = mpimg.imread(path)# 将图片修剪成中心的正方形short_edge = min(img.shape[:2])yy = int((img.shape[0] - short_edge) / 2)xx = int((img.shape[1] - short_edge) / 2)crop_img = img[yy: yy + short_edge, xx: xx + short_edge]return crop_imgdef resize_image(image, size,method=tf.image.ResizeMethod.BILINEAR,align_corners=False):with tf.name_scope('resize_image'):image = tf.expand_dims(image, 0)image = tf.image.resize_images(image, size,method, align_corners)image = tf.reshape(image, tf.stack([-1,size[0], size[1], 3]))return imagedef print_prob(prob, file_path):synset = [l.strip() for l in open(file_path).readlines()]# 将概率从大到小排列的结果的序号存入predpred = np.argsort(prob)[::-1]# 取最大的1个、5个。top1 = synset[pred[0]]print(("Top1: ", top1, prob[pred[0]]))top5 = [(synset[pred[i]], prob[pred[i]]) for i in range(5)]print(("Top5: ", top5))return top1

预测主体部分:(demo.py)

from nets import vgg16
import tensorflow as tf
import numpy as np
import utils# 读取图片
img1 = utils.load_image("./test_data/table.jpg")# 对输入的图片进行resize,使其shape满足(-1,224,224,3)
inputs = tf.placeholder(tf.float32,[None,None,3])
resized_img = utils.resize_image(inputs, (224, 224))# 建立网络结构
prediction = vgg16.vgg_16(resized_img)# 载入模型
sess = tf.Session()
ckpt_filename = './model/vgg_16.ckpt'
sess.run(tf.global_variables_initializer())
saver = tf.train.Saver()
saver.restore(sess, ckpt_filename)# 最后结果进行softmax预测
pro = tf.nn.softmax(prediction)
pre = sess.run(pro,feed_dict={inputs:img1})# 打印预测结果
print("result: ")
utils.print_prob(pre[0], './synset.txt')

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/389480.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Django笔记1

内容整理1.创建django工程django-admin startproject 工程名2.创建APPcd 工程名python manage.py startapp cmdb3.静态文件project.settings.pySTATICFILES_dirs {os.path.join(BASE_DIR, static),}4.模板路径DIRS > [os.path.join(BASE_DIR, templates),]5.settings中mid…

BZOJ 2003 [Hnoi2010]Matrix 矩阵

题目链接 https://www.lydsy.com/JudgeOnline/problem.php?id2003 题解 考虑搜索。 确定了第一行和第一列,那么就确定了整个矩阵,因此搜索的范围可以降到399个位置。 首先搜索第一行,显然每个不是第一行第一列的位置都可以由三个位置唯一确定…

Keras框架:resent50代码实现

Residual net概念 概念: Residual net(残差网络):将靠前若干层的某一层数据输出直接跳过多层引入到后面数据层的输入 部分。 残差神经单元:假定某段神经网络的输入是x,期望输出是H(x),如果我们直接将输入x传到输出作…

MySQL数据库的回滚失败(JAVA)

这几天在学习MySQL数据的知识,有一个小测试,用来测试数据库的提交和回滚。 刚开始的时候真的没把这个当回事,按照正常的步骤来讲的话,如下所示,加载驱动,获取数据库的连接,并且把数据库的自动提…

条件概率分布_条件概率

条件概率分布If you’re currently in the job market or looking to switch careers, you’ve probably noticed an increase in popularity of Data Science jobs. In 2019, LinkedIn ranked “data scientist” the №1 most promising job in the U.S. based on job openin…

MP实战系列(十七)之乐观锁插件

声明,目前只是仅仅针对3.0以下版本,2.0以上版本。 意图: 当要更新一条记录的时候,希望这条记录没有被别人更新 乐观锁实现方式: 取出记录时,获取当前version 更新时,带上这个version 执行更新时…

二叉树删除节点,(查找二叉树最大值节点)

从根节点往下分别查找左子树和右子树的最大节点,再比较左子树,右子树,根节点的大小得到结果,在得到左子树和右子树最大节点的过程相似,因此可以采用递归的 //树节点结构 public class TreeNode { TreeNode left;…

Tensorflow框架:InceptionV3网络概念及实现

卷积神经网络迁移学习-Inception • 有论文依据表明可以保留训练好的inception模型中所有卷积层的参数,只替换最后一层全连接层。在最后 这一层全连接层之前的网络称为瓶颈层。 • 原理:在训练好的inception模型中,因为将瓶颈层的输出再通过…

View详解(4)

在上文中我们简单介绍了Canvas#drawCircle()的使用方式,以及Paint#setStyle(),Paint#setStrokeWidth(),Paint#setColor()等相关函数,不知道小伙伴们了解了多少?那么是不是所有的图形都能通过圆来描述呢?当然不行,那么熟…

成为一名真正的数据科学家有多困难

Data Science and Machine Learning are hard sports to play. It’s difficult enough to motivate yourself to sit down and learn some maths, let alone to becoming an expert on the matter.数据科学和机器学习是一项艰巨的运动。 激励自己坐下来学习一些数学知识是非常…

Ubuntu 装机软件

Ubuntu16.04 软件商店闪退打不开 sudo apt-get updatesudo apt-get dist-upgrade# 应该执行一下更新就好,不需要重新安装软件中心 sudo apt-get install –reinstall software-center Ubuntu16.04 深度美化 https://www.jianshu.com/p/4bd2d9b1af41 Ubuntu18.04 美化…

数据分析中的统计概率_了解统计和概率:成为专家数据科学家

数据分析中的统计概率Data Science is a hot topic nowadays. Organizations consider data scientists to be the Crme de la crme. Everyone in the industry is talking about the potential of data science and what data scientists can bring in their BigTech and FinT…

Keras框架:Mobilenet网络代码实现

Mobilenet概念: MobileNet模型是Google针对手机等嵌入式设备提出的一种轻量级的深层神经网络,其使用的核心思想便是depthwise separable convolution。 Mobilenet思想: 通俗地理解就是3x3的卷积核厚度只有一层,然后在输入张量上…

clipboard 在 vue 中的使用

简介 页面中用 clipboard 可以进行复制粘贴&#xff0c;clipboard能将内容直接写入剪切板 安装 npm install --save clipboard 使用方法一 <template><span>{{ code }}</span><iclass"el-icon-document"title"点击复制"click"co…

数据驱动开发_开发数据驱动的股票市场投资方法

数据驱动开发Data driven means that your decision are driven by data and not by emotions. This approach can be very useful in stock market investment. Here is a summary of a data driven approach which I have been taking recently数据驱动意味着您的决定是由数据…

前端之sublime text配置

接下来我们来了解如何调整sublime text的配置&#xff0c;可能很多同学下载sublime text的时候就是把它当成记事本来使用&#xff0c;也就是没有做任何自定义的配置&#xff0c;做一些自定义的配置可以让sublime text更适合我们的开发习惯。 那么在利用刚才的命令面板我们怎么打…

python 时间序列预测_使用Python进行动手时间序列预测

python 时间序列预测Time series analysis is the endeavor of extracting meaningful summary and statistical information from data points that are in chronological order. They are widely used in applied science and engineering which involves temporal measureme…

keras框架:目标检测Faster-RCNN思想及代码

Faster-RCNN&#xff08;RPN CNN ROI&#xff09;概念 Faster RCNN可以分为4个主要内容&#xff1a; Conv layers&#xff1a;作为一种CNN网络目标检测方法&#xff0c;Faster RCNN首先使用一组基础的convrelupooling层提取 image的feature maps。该feature maps被共享用于…

算法偏见是什么_算法可能会使任何人(包括您)有偏见

算法偏见是什么在上一篇文章中&#xff0c;我们展示了当数据将情绪从动作中剥离时会发生什么 (In the last article, we showed what happens when data strip emotions out of an action) In Part 1 of this series, we argued that data can turn anyone into a psychopath, …

大数据笔记-0907

2019独角兽企业重金招聘Python工程师标准>>> 复习: 1.clear清屏 2.vi vi xxx.log i-->edit esc-->command shift:-->end 输入 wq 3.cat xxx.log 查看 --------------------------- 1.pwd 查看当前光标所在的path 2.家目录 /boot swap / 根目录 起始位置 家…