gpt4 book ai didi

theano - keras 中的反卷积二维层

转载 作者:行者123 更新时间:2023-12-02 09:41:52 25 4
gpt4 key购买 nike

该层尚未准备好记录,我在弄清楚如何使用它时遇到了一些麻烦。
我正在尝试类似的事情:

input_img = Input(shape=(1, h, w))
x = Convolution2D(16, 7, 7, activation='relu', border_mode='valid')(input_img)
d = Deconvolution2D(1, 7, 7, (None, 1, 2*h, 2*w))
x = d(x)

但是当我尝试编写d.output_shape时,我得到了图像的原始形状,而不是两倍的大小(这是我所期望的)。
任何帮助将不胜感激!

最佳答案

简短回答:如果您希望输出真正是输入的两倍,则需要将 subsample=(2,2) 添加到 Devolve2D。

<小时/>

更长的答案:Deconvolution2D 严重没有文档记录,您必须仔细阅读它的代码才能了解如何使用它。

首先,您必须了解反卷积层的工作原理(如果您已经了解所有细节,请跳过此部分)。反卷积,不像它的名字所暗示的那样,只是简单地将标准卷积层的反向传播(梯度计算方法)应用到反卷积层的输入上。反卷积层的“内核大小”实际上是上面提到的反向传播步骤的虚拟卷积层的内核大小。虽然给定了卷积核的大小及其步长,但计算卷积层的输出形状很简单(假设没有填充,则为 (input - kernel)//stride + 1),但反之则不然。事实上,可能有不止一种可能的输入形状与卷积层的给定输出形状匹配(这是因为整数除法是不可逆的)。这意味着对于反卷积层,输出形状不能简单地从输入形状(隐式已知)、内核大小和步幅直接确定 - 这就是为什么我们在初始化层时需要知道输出形状。当然,由于反卷积层的定义方式,对于某些输入形状,您会在其输出中出现未定义的漏洞,如果我们禁止这些情况,那么我们实际上可以推断出输出形状.

回到 Keras 以及上面的内容是如何实现的。令人困惑的是,output_shape 参数实际上并不用于确定层的输出形状,而是尝试从输入、内核大小和步幅中推断出它,同时假设仅提供有效的 output_shapes(尽管在代码是这样的)。 output_shape 本身仅用作反向传播步骤的输入。因此,您还必须指定步幅参数(Keras 中的子样本)以获得所需的结果(Keras 可以根据给定的输入形状、输出形状和内核大小确定该结果)。

关于theano - keras 中的反卷积二维层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39018767/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com