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))

热门文章

暂无图片
编程学习 ·

大数据-java基础-第01章 java概述

1.java简介 答:java是1995年推出的一门高级编程语言,它即安全、可移植、又可跨平台,并且可以解决Internet上的大型应用问题。 2.java的特点 答: ①简单易用、完全面向对象; ②与平台无关型、可扩展性强; ③可移植高、支持分布式编程; ④半编译半解释型; ⑤健壮、安全可…
暂无图片
编程学习 ·

元注解

元注解 元注解时定义注解的注解,是Java提供的用于定义注解的基本注解注解 说明@Retention 是注解类,实现声明类Class,声明类别Category,声明扩展Extension@Target 放在自定义注解上的上边,表明该注解可以使用的范围@Inherited 允许子类继承父类的注解,在子类中可以获取使…
暂无图片
编程学习 ·

SSCMS部署Linux

一、进入手册:https://sscms.com/ 二、在首页点击,如下位置:三、点击快速上手,进入页面如下:四、点击linux中运行SSCMS https://sscms.com/docs/v7/getting-started/using-linux.html#_1%E3%80%81%E5%AE%89%E8%A3%85%E4%BE%9D%E8%B5%96%E5%8C%85 根据里面的步骤一步步进行…
暂无图片
编程学习 ·

[云盘](二)我的文件和共享列表后台实现

后台代码实现我的文件列表Mian读取配置信息解析json登录token(cmd为count)解析jason(cmd不为count)获取用户文件个数获取用户文件列表源码共享文件列表main获取共享文件个数前端分页请求包获得普通共享文件列表共享文件排行榜源码 我的文件列表业务逻辑是,点击我的文件,会…
暂无图片
编程学习 ·

unraid-APP加速方案火爆内测中!!!

unraid-APP加速方案火爆内测中!!! 声明:方案还在内测中,还没有完善的,不喜勿看。 图标已全部点亮,部分Ddocker火速下载中,插件部分等待更新,服务器继续更新中----------- 具体操作方案如下: 首先下载APP插件:https://gitlab.xcxlz.cn/shyd/community.applications/-…
暂无图片
编程学习 ·

文创调研案例02-瑞士达沃斯小镇

摘要:达沃斯小镇作为世界特色小镇的典范,以其特色生态为基础,不断创新,形成了会议、疗养、体育、旅游多条产业互相作用的综合产业,其宝贵经验具有借鉴价值。中国自2016年起,特色小镇遍地开花,但同质化现象严重,如何打造特色小镇的“特”成了关键。本文以达沃斯小镇为例…
暂无图片
编程学习 ·

前端学习笔记 基础 前端技术简介

文章目录前端三剑客HTMLHTML5XHTMLCSSCSS3JavaScriptES6框架jQueryBootstrapReactVue.js 前端三剑客 HTMLHTML(Hyper Text Markup Language)称为超文本标记语言,是一种标识性的语言。它包括一系列标签.通过这些标签可以将网络上的文档格式统一,使分散的Internet资源连接为…
暂无图片
编程学习 ·

Android客户端调起地图定位不准,导航路线出现偏差,目的地坐标偏离

前言 APP调起地图导航出现偏差 是什么问题造成的呢 一:可能是模糊定位造成的 二:也有可能 改变了经纬度的数据 解决思路如下 先了解一下调起高德APP的各个参数是什么 百度地图 参数如下:参数名称 描述 是否必选 格式(示例)origin 起点名称或经纬度,或者可同时提供名称和经纬…
暂无图片
编程学习 ·

产品经理新人必看的避坑指南

产品经理的一路走来,会遇到大大小小的“坑”。从毕业开始做产品经理已有7年,一直在回想自己有哪些地方做的不够好需要改进的。趁自己闲暇时间总结分享出来,希望能给产品新人一些启示。 一、不问要求埋头苦干。 产品新人刚入职的时候,因为经验不足,不太熟悉业务,往往一开始…
暂无图片
编程学习 ·

k8s(1)

k8s-集群搭建的三种方式,目前主流的搭建k8s集群的方式有kubeadm、minikube,二进制包。kubeadm 是一个工具,用于快速搭建kubernetes集群,目前应该是比较方便和推荐的,简单易用 kubeadm是Kubernetes 1.4开始新增的特性 kubeadm init 以及 kubeadm join 这两个命令可以快速创…
暂无图片
编程学习 ·

【备忘】PHP读取apk安装包信息

PHP读取apk安装包信息可以获取应用名称、包名、版本信息等[已测试通过]感谢前辈贡献的代码!!直接上代码->biu~以下是底层封装:<?phpnamespace libraries\apk;use think\Exception;class ApkParser{//----------------------// 公共函数,供外部调用//---------------…
暂无图片
编程学习 ·

Hadoop(七)——中下下

shuffle MapReduce的shuffle分为map阶段的shuffle和reduce阶段的shuffle,下面就分别来做介绍。 map阶段的shuffle: 之前我们学的是map阶段并不是直接把数据给reduce,而是会把数据分好,该分区的分区,该封装的封装,该合并的合并再给到reduce,下面就来详细介绍这个过程。1.…
暂无图片
编程学习 ·

2.4-7、背包问题

7、背包问题 【问题描述】 简单的背包问题。设有一个背包,可以放入的重量为s。现有n件物品,重量分别为w1,w2…,wn,(1≤i≤n)均为正整数,从n件物品中挑选若干件,使得放入背包的重量之和正好为s。找到一组解即可。 【输入格式】 第一行是物品总件数和背包的载重量,第二行…
暂无图片
编程学习 ·

CUDA学习(四):cudaMalloc、cudaMemcpy和cudaFree函数

文章目录一、cudaMalloc、cudaMemcpy和cudaFree 介绍二、第一个例子,实现GPU端的加法 可以像调用C函数那样将参数传递给核函数 当设备执行任何有用的操作时,都需要分配内存,例如将计算机返回给主机。 一、cudaMalloc、cudaMemcpy和cudaFree 介绍 内存空间开辟、内存复制和内…
暂无图片
编程学习 ·

《ES6模块化》知识点总结

以下内容纯属个人扯淡,仅供参考目录一、概述二、基本语法一、概述1、传统开发模式的问题命名冲突:多个js文件之间,不能存在同名的变量 文件依赖:js文件之间无法实现相互引用2、模块化1。概述将单独的一个功能封装到一个模块文件中,模块之间相互隔离,但可通过特定的接口公…
暂无图片
编程学习 ·

Python基础语法:print()、input()函数与变量

知识:print()、input()函数与变量————————————————————————————————————————1、print()与引号的使用print(This is a egg) #》》This is a egg print(This \s a egg) #》》Thiss a egg print("Thiss a egg") #可以打印&quo…