TensorFlow卷积层-函数
函数1:tf.nn.conv2d是TensorFlow里面实现卷积的函数,实际上这是搭建卷积神经网络比较核心的一个方法
函数原型:
tf.nn.conv2d(input,filter,strides,padding,use_cudnn_on_gpu=None, Name=None)
参数解释:
第一个参数input:指需要做卷积的输入图像,它要求是一个Tensor,具有[batch, in_height, in_width, in_channels]这样的shape,具体含义是
[训练时一个batch的图片数量, 图片高度, 图片宽度, 图像通道数],注意
这是一个4维的Tensor,要求类型为float32和float64其中之一
第二个参数filter:相当于CNN中的卷积核,
它要求是一个Tensor,具有
[filter_height, filter_width, in_channels, out_channels]这样的shape
,具体含义是[卷积核的高度,
],要求类型与参数input相同,有一个地方需要注意,第三维卷积核的宽度,图像通道数,卷积核个数
,就是参数input的第四维in_channels
第三个参数strides:卷积时在图像每一维的步长,这是一个一维的向量,长度4。strides也称为跨度,利用卷积运算对图像进行降维处理的思想是通过修改卷积核的strides(跨度)参数实现的。strdies参数的格式如下:strides = [image_batch_size_stride image_height_stride image_width_stride image_channels_strid].第一个和最后一个跨度参数通常很少修改,因为他们会在tf.nn.conv2d运算中跳过一些数据,从而不予以考虑这些数据。如果希望降低维度,可以修改image_height_stride和image_width_stride参数。strides=[1 3 3 1]的结果图下
第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式
- SAME:卷积输出与输入尺寸相同。这里在计算如何跨越图像时,并不考虑滤波器的尺寸。选用该设置时,缺失的像素将用0填充,卷积核扫过的像素将超过图像的像素。
- VALID:在计算卷积核在图像上如何跨越时,需要考虑滤波器的尺寸。这会使卷积核尽量不越过图像的边界。在某些情况下,边界也有可能会被填充。
第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true
结果返回一个Tensor,这个输出,就是我们常说的feature map
实验代码:
with tf.Session() as sess:
img_data_jpg = tf.image.decode_jpeg(image_raw_data_jpg)#按照jpeg格式对图片进行解码
img_data_jpg = tf.image.convert_image_dtype(img_data_jpg, dtype = tf.float32)#转换图片的类型位tf.float32的模型 plt.figure(1)
plt.imshow(img_data_jpg.eval())#显示图像
kernel = tf.constant([#建立一个三通道的,3层的卷积核
[
[[-1.0,-1.0,-1.0],[0.0,0.0,0.0],[1.0,1.0,1.0]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
],
[
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[5.,0.,0.],[0.,5.,0.],[0.,0.,5.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]]
],
[
[[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]],
[[-1.,0.,0.],[0.,-1.,0.],[0.,0.,-1.]],
[[0.,0.,0.],[0.,0.,0.],[0.,0.,0.]]
]
],dtype = tf.float32)
input_image = tf.reshape(img_data_jpg,[1,322,426,3])#将图片格式转换为conv2d函数需要的数据输入模式
res = tf.nn.conv2d(input_image, kernel, [1,1,1,1], padding='SAME')
# activation_map = sess.run(tf.minimum(tf.nn.relu(res),255))
output_image = tf.cast(tf.reshape(res,[322,426,3]),dtype = tf.uint8)#输出图像的格式转换
plt.figure(2)
plt.imshow(output_image.eval())
sess.close()
实验结果:
原始图像 实验结果
函数2:
函数3:
TensorFlow卷积层-函数的更多相关文章
- tensorflow 卷积层
TensorFlow 卷积层 让我们看下如何在 TensorFlow 里面实现 CNN. TensorFlow 提供了 tf.nn.conv2d() 和 tf.nn.bias_add() 函数来创 ...
- TensorFlow卷积网络常用函数参数详细总结
卷积操作 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name参数用以指定该操作 ...
- tensorflow 1.0 学习:卷积层
在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化. 一.旧版本(1.0以下)的卷积函数:tf.nn.conv2d conv2d( input, filter, strides, ...
- 『PyTorch x TensorFlow』第八弹_基本nn.Module层函数
『TensorFlow』网络操作API_上 『TensorFlow』网络操作API_中 『TensorFlow』网络操作API_下 之前也说过,tf 和 t 的层本质区别就是 tf 的是层函数,调用即 ...
- 82、TensorFlow教你如何构造卷积层
''' Created on 2017年4月22日 @author: weizhen ''' import tensorflow as tf #通过tf.get_variable的方式创建过滤器的权重 ...
- 81、Tensorflow实现LeNet-5模型,多层卷积层,识别mnist数据集
''' Created on 2017年4月22日 @author: weizhen ''' import os import tensorflow as tf import numpy as np ...
- tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图
tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...
- TensorFlow与caffe中卷积层feature map大小计算
刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同 ...
- 『TensorFlow』卷积层、池化层详解
一.前向计算和反向传播数学过程讲解
随机推荐
- CSS 重置默认样式
1. 概述 1.1 说明 css重置样式主要是为了让各个浏览器的CSS样式有一个统一的基准,使HTML元素样式在跨浏览器时有一致性的效果. 备注:浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的 ...
- Oracle Package的全局变量与Session
Oracle Package的全局变量与Session2012-07-26 aaie_ 阅 3595 转 10简单讲,同一个session下pageckage中的全局变量时公共的,会导致冲突.以下是一 ...
- AMD-requireJS
require.js是AMD的一种实现形式. 加载: <script src="require.js" data-main="main"></ ...
- 信息摘要算法之二:SHA1算法分析及实现
SHA算法,即安全散列算法(Secure Hash Algorithm)是一种与MD5同源的数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛 ...
- JavaWEB后端支付银联,支付宝,微信对接
注:本文来源于:< JavaWEB后端支付银联,支付宝,微信对接 > JavaWEB后端支付银联,支付宝,微信对接 标签(空格分隔): java 项目概述 最近项目需要后端打通支付,所 ...
- NHibernate入门
这里是官方的Demo,可以看看,因为我也是通过官方的demo学习的. https://github.com/nhibernate/nhibernate-core/tree/master/src/N ...
- bitset用法详解
参见此博客: https://www.cnblogs.com/magisk/p/8809922.html
- 使用Eclipse、Tomcat遇到的一些问题
Tomcat服务无法启动 前两天瞎搞,试着弄了弄Android的环境.结果不知道动了什么地方,Tomcat崩了,本地打开localhost:8080一直显示404,eclipse也无法使用Tomcat ...
- Java 画一个5X5的方形矩阵
效果图如下: 思路:创建一个窗口,使其居中于屏幕中央,使用drawRect(x, y, width, height)画正方形. import java.awt.Graphics; import jav ...
- 论文阅读笔记十七:RefineNet: Multi-Path Refinement Networks for High-Resolution Semantic Segmentation(CVPR2017)
论文源址:https://arxiv.org/abs/1611.06612 tensorflow代码:https://github.com/eragonruan/refinenet-image-seg ...