gpt4 book ai didi

pytorch - PyTorch 的 Conv2d 真的没有 padding=same 选项吗?

转载 作者:行者123 更新时间:2023-12-04 11:11:47 28 4
gpt4 key购买 nike

我目前正在构建一个可以处理时间序列数据的卷积神经网络 (CNN)。
更具体地说,数据是形状(100, 40)的财务数据。 , 与 100意味着 100 个时间戳和 40意味着 40 个功能。
我使用的 CNN 使用非对称内核大小(即 1 x 24 x 1 )和非对称步幅(即 1 x 2 用于 1 x 2 层和 1 x 1 用于 |9104| 层)。
为了保持高度尺寸留4 x 1 ,我需要对数据应用一些填充。我正在研究如何做到这一点,并注意到使用 TensorFlow 或 Keras 的人只是做 100 ,但根据我发现的许多资源,包括 this thread on Github,该选项在 PyTorch 中显然不可用。 .
我发现的是,根据 some answers in this question还有 this answer on the PyTorch discussion forum ,我可以手动计算我需要如何填充我的数据并且可以使用 padding='same' 解决我的问题,因为这似乎很正常 torch.nn.ZeroPad2d 层不支持非对称填充(我相信我需要的总填充高度为 3,宽度为 0)。
我为测试这一点而编写的实验代码是这样的:

import torch
import torch.nn as nn

conv = nn.Conv2d(1, 1, kernel_size=(4, 1))
pad = nn.ZeroPad2d((0, 0, 2, 1)) # Add 2 to top and 1 to bottom.

x = torch.randint(low=0, high=9, size=(100, 40))
x = x.unsqueeze(0).unsqueeze(0)

y = pad(x)

x.shape # (1, 1, 100, 40)
y.shape # (1, 1, 103, 40)

print(conv(x.float()).shape)
print(conv(y.float()).shape)

# Output
# x -> (1, 1, 97, 40)
# y -> (1, 1, 100, 40)
如您所见,在维度大小保持不变的意义上,它确实有效。然而,我一直想知道是否真的没有 torch.nn.Conv2d选项在那里?另外,我们如何知道是将 padding 2 应用到顶部还是底部?
谢谢你。

编辑
这有点晚了,但如果有人好奇我是如何解决这个问题的,我基本上手动添加了填充以模拟 padding='same'选项。

最佳答案

前段时间我遇到了同样的问题,所以我使用 ZeroPad2d 自己实现了它。像你想要做的那样分层。这是正确的公式:

from functools import reduce
from operator import __add__

kernel_sizes = (4, 1)

# Internal parameters used to reproduce Tensorflow "Same" padding.
# For some reasons, padding dimensions are reversed wrt kernel sizes,
# first comes width then height in the 2D case.
conv_padding = reduce(__add__,
[(k // 2 + (k - 2 * (k // 2)) - 1, k // 2) for k in kernel_sizes[::-1]])

pad = nn.ZeroPad2d(conv_padding)
conv = nn.Conv2d(1, 1, kernel_size=kernel_sizes)

print(x.shape) # (1, 1, 103, 40)
print(conv(y.float()).shape) # (1, 1, 103, 40)
另外,正如@akshayk07 和@Separius 所提到的,我可以确认是pytorch 的动态特性使它变得困难。 Here是 Pytorch 开发人员关于这一点的帖子。

关于pytorch - PyTorch 的 Conv2d 真的没有 padding=same 选项吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58307036/

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