函数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相同,有一个地方需要注意,第三维in_channels,就是参数input的第四维

第三个参数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卷积层-函数的更多相关文章

  1. tensorflow 卷积层

    TensorFlow 卷积层   让我们看下如何在 TensorFlow 里面实现 CNN. TensorFlow 提供了 tf.nn.conv2d() 和 tf.nn.bias_add() 函数来创 ...

  2. TensorFlow卷积网络常用函数参数详细总结

    卷积操作 tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None) 除去name参数用以指定该操作 ...

  3. tensorflow 1.0 学习:卷积层

    在tf1.0中,对卷积层重新进行了封装,比原来版本的卷积层有了很大的简化. 一.旧版本(1.0以下)的卷积函数:tf.nn.conv2d conv2d( input, filter, strides, ...

  4. 『PyTorch x TensorFlow』第八弹_基本nn.Module层函数

    『TensorFlow』网络操作API_上 『TensorFlow』网络操作API_中 『TensorFlow』网络操作API_下 之前也说过,tf 和 t 的层本质区别就是 tf 的是层函数,调用即 ...

  5. 82、TensorFlow教你如何构造卷积层

    ''' Created on 2017年4月22日 @author: weizhen ''' import tensorflow as tf #通过tf.get_variable的方式创建过滤器的权重 ...

  6. 81、Tensorflow实现LeNet-5模型,多层卷积层,识别mnist数据集

    ''' Created on 2017年4月22日 @author: weizhen ''' import os import tensorflow as tf import numpy as np ...

  7. tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图

    tensorflow CNN 卷积神经网络中的卷积层和池化层的代码和效果图 因为很多 demo 都比较复杂,专门抽出这两个函数,写的 demo. 更多教程:http://www.tensorflown ...

  8. TensorFlow与caffe中卷积层feature map大小计算

    刚刚接触Tensorflow,由于是做图像处理,因此接触比较多的还是卷及神经网络,其中会涉及到在经过卷积层或者pooling层之后,图像Feature map的大小计算,之前一直以为是与caffe相同 ...

  9. 『TensorFlow』卷积层、池化层详解

    一.前向计算和反向传播数学过程讲解

随机推荐

  1. CSS 重置默认样式

    1. 概述 1.1 说明 css重置样式主要是为了让各个浏览器的CSS样式有一个统一的基准,使HTML元素样式在跨浏览器时有一致性的效果. 备注:浏览器的兼容问题,不同浏览器对有些标签的默认值是不同的 ...

  2. Oracle Package的全局变量与Session

    Oracle Package的全局变量与Session2012-07-26 aaie_ 阅 3595 转 10简单讲,同一个session下pageckage中的全局变量时公共的,会导致冲突.以下是一 ...

  3. AMD-requireJS

    require.js是AMD的一种实现形式. 加载: <script src="require.js" data-main="main"></ ...

  4. 信息摘要算法之二:SHA1算法分析及实现

    SHA算法,即安全散列算法(Secure Hash Algorithm)是一种与MD5同源的数据加密算法,该算法经过加密专家多年来的发展和改进已日益完善,现在已成为公认的最安全的散列算法之一,并被广泛 ...

  5. JavaWEB后端支付银联,支付宝,微信对接

    注:本文来源于:<  JavaWEB后端支付银联,支付宝,微信对接  > JavaWEB后端支付银联,支付宝,微信对接 标签(空格分隔): java 项目概述 最近项目需要后端打通支付,所 ...

  6. NHibernate入门

    这里是官方的Demo,可以看看,因为我也是通过官方的demo学习的.   https://github.com/nhibernate/nhibernate-core/tree/master/src/N ...

  7. bitset用法详解

    参见此博客: https://www.cnblogs.com/magisk/p/8809922.html

  8. 使用Eclipse、Tomcat遇到的一些问题

    Tomcat服务无法启动 前两天瞎搞,试着弄了弄Android的环境.结果不知道动了什么地方,Tomcat崩了,本地打开localhost:8080一直显示404,eclipse也无法使用Tomcat ...

  9. Java 画一个5X5的方形矩阵

    效果图如下: 思路:创建一个窗口,使其居中于屏幕中央,使用drawRect(x, y, width, height)画正方形. import java.awt.Graphics; import jav ...

  10. 论文阅读笔记十七: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 ...