函数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. ACM-ICPC 2018 焦作赛区网络预赛 I Save the Room

    Bob is a sorcerer. He lives in a cuboid room which has a length of AAA, a width of BBB and a height ...

  2. Confluence 6 其他需要备份和恢复的地方

    XML 备份被描述用于在 Confluence 备份使用的其他方法,例如升级和移动服务器.使用上面描述的备份和恢复方法也适用这些地方. 我们的 upgrade guide 不要求使用一个 XML 备份 ...

  3. Maven集成SSM

    目录 Maven 集成SSM 添加log4j配置文件 配置web.xml 添加编码过滤器 添加put和delete请求 配置springmvc.xml 配置文件上传 配置druid连接池信息 配置sq ...

  4. 补充的flask实例化参数以及信号

    一.实例化补充 instance_path和instance_relative_config是配合来用的.这两个参数是用来找配置文件的,当用app.config.from_pyfile('settin ...

  5. ATM机模拟系统

    实验要求 https://pan.baidu.com/s/1Sq5joWyVsNhY8DYiyI4UmQ 源代码 /*信1705-1 20173458 王嘉梁*/ package atm; impor ...

  6. C/C++返回内部静态成员的陷阱(转)

    在我们用C/C++开发的过程中,总是有一个问题会给我们带来苦恼.这个问题就是函数内和函数外代码需要通过一块内存来交互(比如,函数返回字符串),这个问题困扰和很多开发人员.如果你的内存是在函数内栈上分配 ...

  7. bootstrap-table 刷新页面数据

    bom.bootstrapTable('load',msg['object']);//这一步 务必要添加. if(msg['code']==1){ bom.find('tbody').css('dis ...

  8. Tensorflow 中的优化器解析

    Tensorflow:1.6.0 优化器(reference:https://blog.csdn.net/weixin_40170902/article/details/80092628) I:  t ...

  9. .net C# 抽奖,中奖

    demo设置了8个奖项,每个奖项可以自定义中奖率,精度为1/10000 public string PrizeDraw() { //奖品以及中奖率 const string prizeString = ...

  10. Python模块的导入以及软件开发规范

    Python文件的两种用途 1 . 当脚本直接使用,直接当脚本运行调用即可 def func(): print("from func1") func() 2 . 当做模块被导入使用 ...