TensorFlow conv2d实现卷积

tf.nn.conv2d是TensorFlow里面实现卷积的函数,参考文档对它的介绍并不是很详细,实际上这是搭建卷积神经网络比较核心的一个方法,非常重要

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, name=None)

除去name参数用以指定该操作的name,与方法有关的一共五个参数

第一个参数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

第四个参数padding:string类型的量,只能是"SAME","VALID"其中之一,这个值决定了不同的卷积方式(后面会介绍)

第五个参数:use_cudnn_on_gpu:bool类型,是否使用cudnn加速,默认为true

结果返回一个Tensor,这个输出,就是我们常说的feature map

import tensorflow as tf

input = tf.Variable([
    [1.0, 2.0, 3.0, 4.0],
    [5.0, 6.0, 7.0, 8.0],
    [8.0, 7.0, 6.0, 5.0],
    [4.0, 3.0, 2.0, 1.0]])
input=tf.reshape(input,[1,4,4,1])
filter = tf.Variable(tf.random_normal([2,2,1,1]))

op = tf.nn.conv2d(input, filter, strides=[1, 1, 1, 1], padding=‘VALID‘)
init=tf.global_variables_initializer()
with tf.Session() as sess:
    sess.run(init)
    print(sess.run(input))
    print(sess.run(op))

sess.close()

s输出结果:

[[[[ 1.]
[ 2.]
[ 3.]
[ 4.]]

[[ 5.]
[ 6.]
[ 7.]
[ 8.]]

[[ 8.]
[ 7.]
[ 6.]
[ 5.]]

[[ 4.]
[ 3.]
[ 2.]
[ 1.]]]]

[[[[ -5.89250851]
[ -7.98477077]
[-10.077034 ]]

[[-12.00638008]
[-12.8220768 ]
[-13.63777256]]

[[-12.93785667]
[-10.84559441]
[ -8.75333118]]]]

参考:http://blog.csdn.net/mao_xiao_feng/article/details/53444333

时间: 2024-10-26 14:09:16

TensorFlow conv2d实现卷积的相关文章

TensorFlow 中的卷积网络

TensorFlow 中的卷积网络 是时候看一下 TensorFlow 中的卷积神经网络的例子了. 网络的结构跟经典的 CNNs 结构一样,是卷积层,最大池化层和全链接层的混合. 这里你看到的代码与你在 TensorFlow 深度神经网络的代码类似,我们按 CNN 重新组织了结构. 如那一节一样,这里你将会学习如何分解一行一行的代码.你还可以下载代码自己运行. 感谢 Aymeric Damien 提供了这节课的原始 TensorFlow 模型. 现在开看下! 数据集 你从之前的课程中见过这节课的

TensorFlow conv2d原理及实践

tf.nn.conv2d(input, filter, strides, padding, use_cudnn_on_gpu=None, data_format=None, name=None) 官方教程说明: 给定四维的input和filter tensor,计算一个二维卷积 Args: input: A Tensor. type必须是以下几种类型之一: half, float32, float64. filter: A Tensor. type和input必须相同 strides: A li

学习笔记TF057:TensorFlow MNIST,卷积神经网络、循环神经网络、无监督学习

MNIST 卷积神经网络.https://github.com/nlintz/TensorFlow-Tutorials/blob/master/05_convolutional_net.py .TensorFlow搭建卷积神经网络(CNN)模型,训练MNIST数据集. 构建模型. 定义输入数据,预处理数据.读取数据MNIST,得到训练集图片.标记矩阵,测试集图片标记矩阵.trX.trY.teX.teY 数据矩阵表现.trX.teX形状变为[-1,28,28,1],-1 不考虑输入图片数量,28x

TensorFlow(九):卷积神经网络实现手写数字识别以及可视化

上代码: import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data mnist = input_data.read_data_sets('MNIST_data',one_hot=True) #每个批次的大小 batch_size = 100 #计算一共有多少个批次 n_batch = mnist.train.num_examples // batch_size #参数概要 def vari

【TensorFlow实战】TensorFlow实现经典卷积神经网络之VGGNet

VGGNet VGGNet是牛津大学计算机视觉组与Google DeepMind公司的研究员一起研发的深度卷积神经网络.VGGNet探索了卷积神经网络的深度与其性能之间的关系,通过反复堆叠3*3的小型卷积核核2*2的最大池化层,VGGNet成功地构建了16~19层的卷积神经网络.VGGNet相比于之前state-of-the-art网络结构,错误率大幅下降,并取得了ILSVRC 2014比赛分类项目的第二名和定位项目的第一名.VGGNet的结构非常简洁,整个网络都是使用了同样大小的卷积尺寸3*3

【TensorFlow实战】TensorFlow实现经典卷积神经网络之Google Inception Net

Google Inception Net 0.前言 Google Inception Net首次出现在ILSVRC 2014比赛中,就以较大优势获得第一名.那届的Inception Net被称为Inception Net V1,它最大的特点就是控制了计算量和参数量的同时,获得了非常好的分类性能--top-5错误率6.67%,只有AlexNet的一半不到.Inception Net V1有22层深,比AlexNet的8层或者VGGNet的19层还要更深.但其计算量只有15亿次浮点运算,同时只有50

基于tensorflow的CNN卷积神经网络对Fasion-MNIST数据集的分类器

写一个基于tensorflow的cnn,分类fasion-MNIST数据集 这个就是fasion-mnist数据集了 先上代码,在分析: import tensorflow as tf import pandas as pd import numpy as np config = tf.ConfigProto() config.gpu_options.per_process_gpu_memory_fraction = 0.3 train_data = pd.read_csv('test.csv'

Tensorflow之CNN卷积层池化层padding规则

padding的规则 ·        padding=‘VALID’时,输出的宽度和高度的计算公式(下图gif为例) 输出宽度:output_width = (in_width-filter_width+1)/strides_width  =(5-3+1)/2=1.5[向上取整=2] 输出高度:output_height = (in_height-filter_height+1)/strides_height  =(5-3+1)/2=1.5[向上取整=2] 输出的形状[1,2,2,1] imp

第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用

反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用于信道均衡.图像恢复.语音识别.地震学.无损探伤等未知输入估计和过程辨识方面的问题. 在神经网络的研究中,反卷积更多的是充当可视化的作用,对于一个复杂的深度卷积网络,通过每层若干个卷积核的变换,我们无法知道每个卷积核关注的是什么,变换后的特征是什么样子.通过反卷积的还原,可以对这些问题有个清晰的可视