首页 > 其他分享 >Tensorflow 中conv2d_transpose函数output_shape参数的由来和范围

Tensorflow 中conv2d_transpose函数output_shape参数的由来和范围

时间:2024-03-28 18:29:05浏览次数:17  
标签:卷积 transpose 尺度 矩阵 转置 shape 参数 output

目录

1.卷积和转置卷积

(1)卷积

(2)转置卷积

2.tf.nn.conv2d函数和tf.nn.conv2d_transpose函数

(1)tf.nn.conv2d函数

(2)tf.nn.conv2d_transpose函数

3.转置卷积output_shape参数的探讨

(1)卷积过程中,存在尺度丢失现象。

(2)转置卷积是恢复卷积之前原始信息的过程


1.卷积和转置卷积

(1)卷积

        卷积是卷积核在矩阵中不断移动并提取原始矩阵深度特征的一个过程。在卷积运算的过程中,为了防止被卷积图像的尺度变化,tensorflow提供了两种卷积模式:‘VALID’和‘SAME’模式。

        在‘VALID’模式下,卷积核只会在被卷积图像内部移动,卷积前后图像大小发生改变。

        在‘SAME’模式下,卷积核在被填充0的图像内部移动,卷积前后图像大小不变。

        两种情况下卷积后图像的尺寸分别满足:

H_{out}=(H_{in}-k+2p)/s+1

(2)转置卷积

        卷积对应的是图像尺度缩小的过程,而转置卷积则是试图将图像尺寸恢复到原来的尺度。下图给出了一个3×3的卷积核在一个2×3的输入矩阵上进行转置卷积的运算过程。在转置卷积的过程中,过滤器首先和输入矩阵对应元素相乘,得到的结果矩阵相互之间会有步长s的偏移量,所有对应位置元素相加后消去外围2p行,列元素即为输出矩阵。

        这里转置卷积后反推输入矩阵的尺度为:

H_{in}=(H_{out}-1)s+k-2p

        卷积是在已知输入图像尺寸Hin,卷积核大小k,步长s和填充系数p的情况下得到输出图像尺寸Hout的过程,转置卷积是根据已知输出矩阵的尺寸Hout,卷积核大小k,步长s和填充系数p的情况下反推输入图像尺寸Hin的过程。可以看出两个尺度推导是互逆的。

2.tf.nn.conv2d函数和tf.nn.conv2d_transpose函数

(1)tf.nn.conv2d函数

 tf.nn.conv2d (input,filter_weight,strides,padding=’SAME’)

 其中:

shape(input)=[batch,in_height,in_width,in_channels]:输入的四维节点矩阵,第一个参数为图片的数量,第二个参数表示图像高度,第三个参数表示图像宽度,第四个参数表示图像的通道数。

shape(filter_weight)=[filter_size,filter_size,in_channels,out_channels]:前两个参数表示过滤器的尺寸,第三个参数表示输入图像的通道数,第四个参数表示过滤器的深度。

strides=[batch,in_height,in_width,in_channel]:第一个参数表示移动的样本数。第二个参数表示移动的高度,第三个参数表示移动的宽度,第四个样本数表示移动的通道数。其中第一个参数和第四个参数必须为1,即只能在一个样本的一个通道数的特征图上进行移动。

padding=’SAME’’VALID’:当为’SAME’时,采用全0填充,此时输出尺寸满足out=⌈in/stride⌉。当为’VALID’时,不采用全0填充,此时输出尺寸满足out=⌈in-filter+1/stride⌉ 。

(2)tf.nn.conv2d_transpose函数

tf.nn.conv2d_transpose(input,filter_weight,output_shape,strides,padding=’SAME’)

其中:

shape(input)=[batch,in_height,in_width,in_channels]:输入的四维节点矩阵,第一个参数为图片的数量,第二个参数表示图像高度,第三个参数表示图像宽度,第四个参数表示图像的通道数。

shape(filter_weight)=[filter_size,filter_size,out_channels,in_channels]:前两个参数表示过滤器的尺寸,第三个参数表示输出的通道数,第四个参数表示输入的通道数。

output_shape=[batch,out_height,out_width,out_channels]:确定输出矩阵的尺寸,由于在卷积过程中存在向上取整的过程,因此当步长大于1时,同一个矩阵反卷积可能会得到多个结果,需要这个参数指定输出的具体尺寸。其中这里的out_channels要和过滤器中的保持一致。

strides=[batch,in_height,in_width,in_channel]:第一个参数表示移动的样本数。第二个参数表示移动的高度,第三个参数表示移动的宽度,第四个样本数表示移动的通道数。其中第一个参数和第四个参数必须为1,即只能在一个样本的一个通道数的特征图上进行移动。

padding=’SAME’’VALID’:两种不同的填充方式。

3.转置卷积output_shape参数的探讨

        可以看出,与卷积函数相比,转置卷积额外多出了一个output_shape参数,但是我们从前面的理论上分析,两个过程的输出矩阵的尺寸都是确定的,为什么要在转置卷积函数过程中额外指定呢?核心思想有两点:

①卷积过程中,存在尺度丢失现象。

        上述两个过程推导中,所有的元素都被有效利用,然而当卷积核步长大于1时,往往并不是如此。如下图所示,分别展示了在‘SAME’模式和‘VALID’模式下,卷积核步长stride=2时两种尺度信息丢失现象。对于‘SAME’模式的全0填充,我们可以把它理解为填充0的行、列数量恰好等于所需的数量,也可以理解成所填充0为最大数量2p=k-1,而一些填充0从未被卷积核遍历过,这里为了便于解释,我们采用后面一种理解方法。

        可以看出对于两种模式,其最右下边一圈数据从未被感知过,因此我们在得到输出矩阵时并不能得知输入矩阵是否有最外围的数据,即存在尺度信息丢失的过程,公式推导中所给出的是被有效利用元素的尺度大小。一般情况下针对两种填充模式,有以下关系成立:

        SAME’ 情况下不同尺度矩阵填充到相同尺度,实际尺度≤计算尺度

        ‘VALID’情况下卷积核未达到边界就停止运算,计算尺度≤实际尺度

        在任意一种填充模式下,一个输入矩阵恰好被卷积核遍历到尺度丢失最大化之间共有stride-1个尺度范围。前面所给公式均是全部元素被有效遍历的情况。

②转置卷积是恢复卷积之前原始信息的过程

        由于在卷积过程中存在尺度信息丢失的现象,因此我们在转置卷积的过程中需要指定丢失的尺度信息。

        对于同一个输入矩阵,其对应着stride-1种输出矩阵,需要用output_shape指定输出维度,其维度范围为:

[(H_{in}-1)s+k-2p,H_{in}\cdot s+k-2p-1]

        当padding=‘SAME’时, 2p = k -1 ,故维度范围为:

[(H_{in}-1)s+1,H_{in}\cdot s]

        当padding=‘VALID’时, 2p = 0 ,故维度范围为:

[(H_{in}-1)s+k,H_{in}\cdot s+k-1]

        综上,可以得到两个经典结论:

        ①当我们需要通过转置卷积实现成倍上采样时,应当选用padding=’SAME’方式,步长即为采样放大倍数。

        ②对于同一个输入矩阵,采用不同填充模式,可以指定的输出矩阵大小范围是不同的。在指定同一个output_shape的情况下,存在一种算法可以得到输出矩阵,而另一种算法报错的情况。当卷积核大小k和移动步长s满足k>s的关系时,输出维度范围完全不同。

(上述所有结论均已在编译器得到验证)

标签:卷积,transpose,尺度,矩阵,转置,shape,参数,output
From: https://blog.csdn.net/weixin_56951839/article/details/137091784

相关文章

  • outputStream(输出流)转inputstream(输入流)以及输入流如何复用
    https://blog.csdn.net/xuxu_study/article/details/129992752文件、流之间的转换MultipartFile转inputstream(输入流)outputStream(输出流)转为inputstream(输入流)inputstream(输入流)转ByteArrayOutputStreamMultipartFile文件直接转输入流上传和生成摘要MultipartFile文件需要......
  • 操作系统综合题之“采用记录型信号量机制实现进程INPUT、PROCESS和OUTPUT的同步算法(
    1.问题:系统中有有三个进程INPUT、PROCESS和OUTPUT,共用两个缓冲区BUF1和BUF2。假期设BUF1中最多可放10个数据,现已放入了2个数据;BUF2最多可放5个数据。INPUT进程负责不断将输入的原始数据推送入BUF1,PROCESS进程负责从BUF1中取出原始数据进行处理,并将处理后的结果数据送入到BUF2中,OUT......
  • zabbix报错fping failed:no output
    zabbix的web前端界面突然连接不上了,页面一直转圈,无法响应,如下图: 排查思路如下:1、检查zabbix-server、Apache2、MySQL进程,发现都是active状态没有问题,端口号也正常2、查看zabbix-server日志文件,发现有报错,想着重启下zabbix-server进程,但是重启zabbix-server进程根本起不来,总......
  • R语言k-Shape时间序列聚类方法对股票价格时间序列聚类|附代码数据
    原文链接:http://tecdat.cn/?p=3726最近我们被客户要求撰写关于时间序列聚类的研究报告,包括一些图形和统计输出。本文我们将使用k-Shape时间序列聚类方法检查与我们有业务关系的公司的股票收益率的时间序列企业对企业交易和股票价格在本研究中,我们将研究具有交易关系的公司的......
  • ic基础|时序篇06:输入约束set_input_delay与输出约束set_output_delay详解
    大家好,我是数字小熊饼干,一个练习时长两年半的ic打工人。我在两年前通过自学跨行社招加入了IC行业。现在我打算将这两年的工作经验和当初面试时最常问的一些问题进行总结,并通过汇总成文章的形式进行输出,相信无论你是在职的还是已经还准备入行,看过之后都会有有一些收获,如果看......
  • IO流(主要是记住四大类InputStream,OutputStream、Reader和Writer,其他都是他们的子类)
    IO流1、文件(1)文件概念文件就是保存数据的地方。例如word文档,txt文件,execl文件等等。(2)文件流文件在程序中是以流的形式来操作的。流:数据在数据源(文件)和程序(内存)之间经历的路径输入流:数据从数据源(文件)到程序(内存)的路径输出流:数据从程序(内存)到数据源(文件)的路径2、常用......
  • 模版匹配——inspect_shape_model
    inspect_shape_modelcreatesarepresentationofashapemodel.TheoperatorisparticularlyusefulinordertodeterminetheparametersNumLevelsandContrast,whichareusedincreate_shape_model,create_scaled_shape_model,orcreate_aniso_shape_model,q......
  • 模板匹配——determine_shape_model_params
    determine_shape_model_params—Determinetheparametersofashapemodel.模版匹配参数确定 determine_shape_model_paramsdeterminescertainparametersofashapemodelautomaticallyfromthemodelimageTemplate.Theparameterstobedeterminedcanbesp......
  • 模板匹配——create_shape_model
    Theoperatorcreate_shape_modelpreparesatemplate,whichispassedintheimageTemplate,asashapemodelusedformatching.TheROIofthemodelispassedasthedomainofTemplate.运算符create_shape_model准备一个模板,该模板在图像模板中传递,作为用于匹配的......
  • 模板匹配——set_shape_model_clutter
    通过设置杂波,来准确定位要检测对象;如下图中未设置杂波情况下,匹配结果如(3);如图(4)设置杂波后,匹配结果如图(5)**Createashapemodel.*创建一个模型read_image(ImageModel,'/bga_gap/bga_gap_01.png')gen_circle(ROI,753.869,551.624,28.4027)reduce_domain(Image......