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

热门文章

暂无图片
编程学习 ·

Mathmatica多项式带余除法代码

几乎没有调用内置函数,除了求多项式最高次数时用了一下 Exponent[] (*解析多项式*) (*将f=a0+a1*x+...+an*x^n解析成{{a0,0},{a1,1},...,{an,n}}的形式*) polyCoefficients[f_] := Module[{rules1 = {c_*base_^power_ -> {c, power},base_^power_ -> {1, power},c_*x_ -…
暂无图片
编程学习 ·

如何重命名data.frame中的单个列?

本文翻译自:How to rename a single column in a data.frame? I know if I have a data frame with more than 1 column, I can use 我知道如果我有一个多于一列的数据框,我可以使用 colnames(x) <- c("col1","col2")to rename the columns. 重命名…
暂无图片
编程学习 ·

51小项目——使用proteus搭建简易的光照度计-(1)

总述 本项目基于51单片机,实现了对光敏电阻两端电压信号的简单获取,并通过数码管显示,蜂鸣器可以根据电压信号的大小发出不同间隔的声音。 注意: 由于疫情原因限制,无法返校制作实物,故本项目仅在proteus中完成了仿真,未能完成实物制作,仿真结果可能与实物结果不符 介绍…
暂无图片
编程学习 ·

手动连接线上presto

命令如下: java -jar presto-cli-0.237-executable.jar --server https://presto.ludp.lenovo.com:30070 --catalog hive --truststore-path /opt/jdk1.8.0_25/jre/lib/security/keystore.jks --truststore-password changeit在之前可以先测试一下网络 ping presto.ludp.lenov…
暂无图片
编程学习 ·

mysql学习总结

连接数据库语句:mysql -h 服务器主机地址 -u 用户名 -p用户密码 基本的数据库操作命令: update user set password=password(‘123456’)where user=‘root’; 修改密码 flush privileges; 刷新数据库 show databases; 显示所有数据库 use dbname;打开某个数据库 show table…
暂无图片
编程学习 ·

SwiftUI 2.0 实现无限滚动的分页列表(高性能含源码)

本文价值与收获 看完本文后,您将能够作出下面的界面实战需求 我们平时构建的应用基本上都是列表类应用,例如待办事项列表、微博、微信朋友圈和视频列表等。这些列表都是可以无限滚动的,那这个功能该如何实现呢。本篇文章将告诉大家个非常简单高效的构建无限滚动List的方法,…
暂无图片
编程学习 ·

jupyter引用当前目录下的文件不成功解决方案

1.创建一个Ipynb_importer.py 文件内容如下: import io, os,sys,types from IPython import get_ipython from nbformat import read from IPython.core.interactiveshell import InteractiveShellclass NotebookFinder(object):"""Module finder that locates…
暂无图片
编程学习 ·

LeetCode 226. 翻转二叉树

目录结构1.题目2.题解1.题目翻转一棵二叉树。示例:输入:4/ \2 7/ \ / \ 1 3 6 9输出:4/ \7 2/ \ / \ 9 6 3 1备注:这个问题是受到 Max Howell 的 原问题 启发的 :谷歌:我们90%的工程师使用您编写的软件(Homebrew),但是您却无法在面试时在白板上…
暂无图片
编程学习 ·

echarts lengend 换行

legend: {type: scroll,orient: vertical,icon: circle,formatter: function (name) {if(name && name.length > 26){var str1 = name.substring(0, 26)var str2 = name.substring(26)name = str1 + "\n" + str2}return name;} },如果没有加上述的formatt…
暂无图片
编程学习 ·

DateUtil 时间工具类

时间工具类 /*** 操作时间工具类s*/ public class DateUtil extends DateUtils {//判断两个日期时间是否相距一天之内,一天之内返回true,否则反手falsepublic static boolean judgmentDate(String date1, String date2) throws Exception {SimpleDateFormat sdf = new Simple…
暂无图片
编程学习 ·

npm 中的package.json

npm 中的package.json 1. npm package又叫node package manager 包管理器 2. package.json 作用是: 项目中都是用了什么包, 相互依赖关系是什么。 node_modules丢失了,怎么恢复,留作备案。 我们建议每个项目总都要有一个package。json文件(报表数文件,就像产品的说明书一…
暂无图片
编程学习 ·

【华为云技术分享】玩转华为物联网IoTDA服务系列六-恒温空调

摘要:本文主要讲述空调接入到物联网平台后,通过恒温空调控制系统,不论空调是否开机,都可以调整空调默认温度,待空调上电开机后,自动按默认温度调节。场景简介通过恒温控制系统,不论空调是否开机,都可以调整空调默认温度,待空调上电开机后,自动按默认温度调节。该场景…
暂无图片
编程学习 ·

惟愿此生,岁月静好

惟愿此生,岁月静好 陌上拈一缕岁月的风,沐一场时光的雨,让心在平淡中盈满温润,回眸,有明天可以奔赴,有过往可回头,有温暖可相依,这样的日子,是我想要的岁月静好。 清晨迎着阳光,走在熙熙攘攘的人群中,感谢这美好的一天,给我的这份踏实安稳,夜晚走在夕阳里,心里装…
暂无图片
编程学习 ·

一次难忘的Android开发面试大厂经历(文末附大量面试题)

前言 突如其来的疫情,让面试跳槽升级为炼狱难度,海投了一波简历,陆陆续续面了OPPO、浙江大华、阿里云、焦点科技、中软国际…大大小小十个公司出头, 结果一路被吊打。从一开始的焦虑演变成了对自己技术能力深刻的怀疑。今天早上参加了深圳OPPO开发工程师的技术面试,总的来…
暂无图片
编程学习 ·

破解商业智能 BI 的谎言从“你能不能说起”

包治百病、药到病除的“商业智能 BI”我们经常会碰到有伙伴、企业客户向我们提出这样的问题:“某某厂商说他们的 BI 工具交项目交付很快,基本上用他们的产品几天或者一周就可以把项目做完,敏捷开发,零风险,你们能不能?”“他们直接连业务数据库,不懂 IT 技术也没有关系,…
暂无图片
编程学习 ·

【解题报告】LightOJ1236-Pairs Forming LCM 唯一分解定理

思路:a,b,n都能分解成素数乘积。A=p1a1…;B=p1b1…;N=p1c1… 若n为lcm(a,b),则ci=max(ai,bi)。所以就有两种情况: 1、ci=ai:则bi可以从0取到ci,共ci+1种情况; 2、同理,对于bi=ci,ai也有ci+1种情况。 共2(ci+1)-1种情况(ai=bi被计算两遍) 所以我们只需要(∏(2ci+1…
暂无图片
编程学习 ·

Hystrix的仪表盘配置

先配置仪表盘项目 ,9001端口pom<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://m…