Tensorflow实现卷积神经网络

Tensorflow实现卷积神经网络

  • Tensorflow实现卷积神经网络
    • 卷积层
    • 池化层
    • 归一化层
    • 实现简单的卷积神经网络

Tensorflow实现卷积神经网络

卷积层

卷积核,步福,填充,多通道卷积,激活函数,卷积函数。
主要函数使用:
1.conv2d函数
tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None)

对一个四维的输入数据和四维的卷积核进行操作,然后对输入数据进行一个二维的卷积操作,最后得到卷积之后的结果。
主要参数说明:
·input:需要做卷积的输入图像数据,是一个张量,要求具有[batch,in_height,in_width,in_channels]的shape,数据类型必须是float32或者float64。batch表示运算时一个batch的张量数量,in_height和in_width为图像高度和宽度,in_channels标识图像通道数。
·filter:过滤器,也称卷积核(kernel),是一个张量,要求具有[filter_height,filter_width,in_channels,out_channels]的shape,数据类型必须是与input输入的数据类型相同。
·strides:一个长度是4的一维整数类型数组[image_batch_size_stride,image_height_stride,image_width_stride,image_channels_stride],每一维度对应的是input中每一维的对应移动步数。
·padding:定义当过滤器落在边界外时,如何做边界填充,值为字符串,取值为SAME或者VALID;SAME表示卷积核可以从图像的边缘开始处理。
·use_cudnn_on_gpu:一个可选布尔值,默认情况下是True。
·name:为操作取一个名字,结果返回一个Tensor,这个输出就是feature map。
2.tf.layers.conv2d
tf.layers.conv2d(inputs,filters,kernel_size,strides=(1, 1),padding=‘valid’,
data_format=‘channels_last’,dilation_rate=(1, 1),activation=None,use_bias=True,
kernel_initializer=None,bias_initializer=tf.zeros_initializer(),kernel_regularizer=None,bias_regularizer=None,activity_regularizer=None,kernel_constraint=None,bias_constraint=None,trainable=True,name=None,reuse=None)

layers模块是TensorFlow1.5之后用于深度学习的更高层次封装的API,利用它我们可以轻松地构建模型。主要参数说明:
·inputs:必需,即需要进行操作的输入数据。
·filters:必需,是一个数字,代表了输出通道的个数,即output_channels。
·kernel_size:必需,卷积核大小,必须是一个数字(高和宽都是此数字)或者长度为2的列表(分别代表高、宽)。
·strides:可选,默认为(1,1),卷积步长,必须是一个数字(高和宽都是此数字)或者长度为2的列表(分别代表高、宽)。
·padding:可选,默认为valid,padding的模式有valid和same两种,大小写不区分。
·activation:可选,默认为None,如果为None则是线性激活。
·activity_regularizer:可选,默认为None,施加在输出上的正则项。
·name:可选,默认为None,卷积层的名称。
·reuse:可选,默认为None,布尔类型,如果为True,那么name相同时,会重复利用。
·返回值:卷积后的Tensor。

池化层

在TensorFlow中,最大池化使用tf.nn.max_pool,平均池化使用tf.nn.avg_pool。实际应用中,最大池化比其他池化方法更常用。它们的具体格式如下:

tf.nn.avg_pool(value, ksize, strides, padding, data_format='NHWC', name=None)

·value:需要池化的输入,一般池化层接在卷积层后面,所以输入通常是feature map,依然是[batch,height,width,channels]这样的shape。
·ksize:池化窗口的大小,取一个四维向量,一般是[1,height,width,1],因为不想在batch和channels上做池化,所以这两个维度设为了1。
·strides:和卷积类似,窗口在每一个维度上滑动的步长,一般也是[1,stride,stride,1]。
·padding:和卷积类似,可以取VALID或者’SAME’。
·data_format:有两个选项,NHWC(默认)和NCHW。指明输入数据和输出数据的格式,对于NHWC,数据存储的格式为[batch,in_height,in_width,in_channels];对于NCHW,数据存储顺序为[batch,in_channels,in_height,in_width]。
·name:为操作取一个名字。结果返回一个Tensor类型不变,shape仍然是[batch,height,width,channels]这种形式。

归一化层

在卷积神经网络ImageNet中采用另一种归一化方法,这种方法用TensorFlow来表示就是:tf.nn.local_response_normalization。ImageNet卷积神经网络利用该层对来自tf.nn.relu的输出进行归一化,因激活函数ReLU是无界函数,对其输出进行归一化有利于更有效识别那些高频特征。

实现简单的卷积神经网络

import tensorflow.compat.v1 as tf
tf.disable_v2_behavior()

#以3*3单通道的图像为例
#用1*1的卷积核
#步常为1
#最后得到3*3的feature map
input = tf.Variable(tf.random_normal([1,3,3,5]))
filter = tf.Variable(tf.random_normal([1,1,5,1]))
conv2d_1 = tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='VALID')
#5*5图像
#3*3卷积核
#1步长
#3*3的输出
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,1]))
conv2d_2 = tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='VALID')
#padding的值为'SAME'表示卷积核可以停留在图像边缘
#输出5*5的feature map
conv2d_3 = tf.nn.conv2d(input,filter,strides=[1,1,1,1],padding='SAME')
#步长不为1的情况只有两维
#通常strides取[1,image_height_stride,image_width_stride,1]
#修改out_channel为3
#输出3张为3*3的feature map
input = tf.Variable(tf.random_normal([1,5,5,5]))
filter = tf.Variable(tf.random_normal([3,3,5,1]))
conv2d_4 = tf.nn.conv2d(input,filter,strides=[1,2,2,1],padding='SAME')
init = tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print("Example 1:")
    print(sess.run(conv2d_1))
    print("Example 2:")
    print(sess.run(conv2d_2))
    print("Example 3:")
    print(sess.run(conv2d_3))
    print("Example 4:")
    print(sess.run(conv2d_4))

热门文章

暂无图片
编程学习 ·

Python:% 和 .format() 的使用

目录基本的格式化值转换填充和对齐字符串截断长串结合截断与填充数字填充数字带符号的数字有名字的占位符Getitem 和 Getattr日期时间参数化的格式自定义对象多年来,Python 具有出色的字符串格式化程序,但是有关它们的文档在理论和技术上都太过严格了。通过此站点,我们尝试通…
暂无图片
编程学习 ·

Spring Boot 整合 Redis

Redis 基于内存进行存储,支持key-value的存储形式,底层是C 基于key-value形式的数据字典,没有数据表的概念,直接用键值对的形式完成数据管理 支持五种数据类型:字符串列表集合有序集合哈希安装Redis 1.下载Redis:https://redis.io/download 2.解压并在本地硬盘人任意位置…
暂无图片
编程学习 ·

[UML] 类图之间的关系 | 4.接口与实现关系

[UML] 类图之间的关系 | 4.接口与实现关系 4.接口与实现关系接口之间也可以有与类之间关系类似的继承关系和依赖关系接口和类之间存在一种实现(Realization)关系,在这种关系中,类实现了接口,类中的操作实现了接口中声明的操作在UML中,类与接口之间的实现关系用带空心三角形…
暂无图片
编程学习 ·

react组件返回上级时,记录上级组件状态

最近开发项目中,做管理后台,很多表格列表,有搜索条件,有分页;在跳转到详情页面,返回时,列表组件重新渲染,之前的搜索条件,分页什么的,都没有记住;还需要重新选,点击,交互体验很不好。1.这里想到2两个办法,一个是吧搜索条件存到缓存中;每次进行读写;条件太多,或…
暂无图片
编程学习 ·

练习2-1 Programming in C is fun! (5分)

练习2-1 Programming in C is fun! (5分) 本题要求编写程序,输出一个短句“Programming in C is fun!”。 输入格式: 本题目没有输入。 输出格式: 在一行中输出短句“Programming in C is fun!”。 #include <stdio.h>int main() {printf("Programming in C is fun…
暂无图片
编程学习 ·

安装Ubuntu系统时遇见的问题:

安装双系统,在已有win10的基础上安装Ubuntu18.04相关设备:1)Rufus 3.112) Ubuntu18.04.4的镜像文件通过使用rufus来制作U盘启动器,因为网上有详细教程就不介绍了。由于之前有多次安装Ubuntu的经历,磁盘分区比较乱,以及因为在之后的选择安装里如果卸载之前安装的Ubuntu就不…
暂无图片
编程学习 ·

VS不能使用scanf函数的解决方法

在VS创建一个c++项目之后,即使已经#include<stdio.h>仍然不能scanf,会出现下面的情况解决方法:1、点击项目->项目属性,点开属性页面2、点击C/C++ -> 预处理器 -> 预处理器定义 -> 点击右侧的下拉列表 -> 点击下拉列表里的<编辑>3、在预处理器定…
暂无图片
编程学习 ·

五篇机器阅读理解论文(Match-LSTM+Ptr,DCN,R-Net,QANet)介绍

以close-domain为例,MRC任务就是给定一篇文章和一些与文章相关的问题,要求模型给出问题的答案 MRC按照问答的形式不同大致可以分成四种任务填空型 多项选择型 片段抽取型 自由答案型首先来看一看数据集 填空型问答 所谓填空型问答是指给定一篇文章和一个缺失某个单词的句子作…
暂无图片
编程学习 ·

Java之父 詹姆斯·高斯林 传奇的一生

Java之父 传奇的一生 Java之父 詹姆斯高斯林 詹姆斯高斯林 (James Gosling)是一名软件专家,1955年5月19日出生于加拿大,Java编程语言的共同创始人之一,一般公认他为“Java之父”。 1977年获得了加拿大卡尔加里大学计算机科学学士学位,1983年获得了美国卡内基梅隆大学计算…
暂无图片
编程学习 ·

Go 结构体使用注意事项和细节

结构体使用注意事项和细节结构体的所有字段在内存中是连续的//结构体 type Point struct {x inty int }//结构体 type Rect struct {leftUp, rightDown Point }func main() {r1 := Rect{Point{1,2}, Point{3,4}}//r1有四个int, 在内存中是连续分布//打印地址fmt.Printf("…
暂无图片
编程学习 ·

vue-cli的4.x版本命令行创建项目(node.js下载、cnpm安装)

前言(日常废话) 因为之前用的一直是vue-cli的2.9.6版本,这段时间将电脑上的2.x版本给卸了,装上了4.4.6版本。害,脑子不好使,总是记不住,好记性不如烂笔头,搁这儿做一下记录,见下: 正文 一、前期准备工作 node.js的10.0.0以上版本(必须)、cnpm(淘宝镜像)(可选)、vue-c…
暂无图片
编程学习 ·

Express框架初体验

Express框架初体验1. Express框架是什么2. Express框架特性3. 中间件3.1 什么是中间件3.2 app.use中间件用法3.3 中间件应用3.4 错误处理中间件3.5 捕获错误4. Express请求处理4.1 构建模块化路由4.2 GET参数的获取4.3 POST参数的获取4.4 静态资源的处理5. express-art-templat…
暂无图片
编程学习 ·

Linux下C语言编程概述

1Linux下C语言编程概述3.1.1C语言简单回顾 C语言最早是由贝尔实验室的DennisRitchie为了UNIX的辅助开发而编写的,它是在B语言的基础上开发出来的。尽管C语言不是专门针对UNIX操作系统或机器编写的,但它与UNIX系统的关系十分紧密。由于它的硬件无关性和可移植性,使C语言逐渐…
暂无图片
编程学习 ·

G1 GC 全称Garbage-First Garbage Collector 总结

关键描述G1是一种服务器端的垃圾收集器,应用在多处理器和大内存环境中,在实现高吞吐量的同时,尽可能的满足垃圾收集暂停时间的要求,全堆操作(例如全局标记)与应用程序线程并行执行。这样可以防止与堆或活动数据大小成比例的中断。G1收集器的设计目标是取代CMS收集器,它同…
暂无图片
编程学习 ·

python3安装OpenCV3出现:ImportError: numpy.core.multiarray failed to import

这里写自定义目录标题欢迎使用Markdown编辑器新的改变功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接与图片如何插入一段漂亮的代码片生成一个适合你的列表创建一个表格设定内容居中、居左、居右SmartyPants创建一个自定义列表如何创建一个注脚注释也是…
暂无图片
编程学习 ·

re表达式

校验数字的表达式校验字符的表达式特殊需求表达式
暂无图片
编程学习 ·

Java使用APT定义注解处理器

文章目录自定义编译时注解处理器APT简介自定义注解处理器创建一个注解实现注解处理器添加tools.jar添加SPImaven打包使用自定义的注解处理器新建项目IDEA设置遇到的问题 自定义编译时注解处理器 使用IDEA构建的maven项目。 项目github地址 注解的保留类型 @Retention(Retention…
暂无图片
编程学习 ·

react全局监听路由变化

关于WithRouter作用:把不是通过路由切换过来的组件中,将react-router 的 history、location、match 三个对象传入props对象上介绍一个简单应用通过withRouter将三个属性传入组件的props上,路径变化,属性就会变化,属性变化,就会触发componentWillReciveProps这个钩子,我们…
暂无图片
编程学习 ·

12.1.4 成员属性建议设置为私有

12.1.4 成员属性建议设置为私有 成员属性设置为私有,可以方便的控制属性的读写权限和检测数据输入的有效性。 #include<iostream> #include<string> using namespace std;//成员属性设置为私有 //1、可以控制读写权限 //2、检测数据有效性class person { public:v…