【问题标题】:Translate Conv2D from PyTorch code to Tensorflow将 Conv2D 从 PyTorch 代码转换为 Tensorflow
【发布时间】:2021-05-23 09:18:53
【问题描述】:

我有以下 PyTorch 层定义:

self.e_conv_1 = nn.Sequential(
    nn.ZeroPad2d((1, 2, 1, 2)),
    nn.Conv2d(in_channels=3, out_channels=64, kernel_size=(5, 5), stride=(2, 2)),
    nn.LeakyReLU(),
)

我想在 Tensorflow 中拥有完全相同的层声明。我怎样才能做到这一点?

self.e_conv_1 = tf.keras.Sequential([
  layers.Conv2D(64, kernel_size=(5, 5), activation=partial(tf.nn.leaky_relu, alpha=0.01), padding='same', strides=(1, 2))
])

应该是上面这段代码吗?我认为至少 strides 和 padding 是不一样的。

提前感谢任何提供帮助的人。

【问题讨论】:

    标签: python tensorflow deep-learning pytorch conv-neural-network


    【解决方案1】:

    我觉得你可以按照tenssorflow documentation这样的方式使用图层:

    tf.keras.Sequential([
        layers.ZeroPadding2D(padding=((1,2), (1,2)))
        layers.Conv2D(64, kernel_size=(5, 5), activation=partial(tf.nn.leaky_relu, 
        alpha=0.01), padding='valid', strides=(2, 2))
    ])
    

    主要区别在于 Torch 零填充和 tensroflow 零填充参数之间的差异。 在火炬填充参数是:

    m = nn.ZeroPad2d((left, right, top, bottom))
    

    在张量流中:

    tf.keras.layers.ZeroPadding2D(padding=((top,bottom),(left,right)))
    

    【讨论】:

    • 非常感谢。让我感到困惑的是 zeroPad2d。谢谢你的知识!!
    • 另一个问题。你认为我在这个具体的 pytorch 翻译问题中需要 padding='same' 吗?
    • 不客气。 torch conv2d 中用于填充的默认属性为零。似乎它等于 tensorflow 的“有效”填充不“相同”。我认为,如果您想获得相同的结果,则应将填充更改为“有效”。谢谢。我会编辑我的答案。
    • 再次感谢。关于那个 ZeroPadding2D,我正在阅读文档,但我不能完全理解它是如何工作的或者它到底是做什么的。能简单介绍一下吗?
    • 卷积层,虽然它的概念,但让图像更小。对于深度神经网络(很多卷积层),如果没有填充,我们可能会丢失图像的一些主要特征。所以最简单的方法是为图像添加填充。 padding 在主图像周围添加 0 个像素。例如,如果主图像大小为 64*64,则使用参数 1 的 padding2d,在图像的顶部和底部添加一行零像素,并在图像的左侧和右侧添加一个零像素的 clumn od。所以输出大小是66*66。对于插图示例,您可以查看deeplizard.com/images/zero%20padding%20example%202.jpg
    猜你喜欢
    • 1970-01-01
    • 2021-12-08
    • 1970-01-01
    • 2021-03-19
    • 2022-10-24
    • 2020-12-28
    • 1970-01-01
    • 2022-01-02
    • 2019-10-03
    相关资源
    最近更新 更多