LibTorch(C++)中Conv2d如何设置(1,10)这类非对称卷积核?
LibTorch Conv2d设置非对称卷积核的实现方法
LibTorch的Conv2d层原生支持高度、宽度尺寸不同的非对称卷积核,你之前的写法不生效,核心原因是C++中(1,10)是逗号表达式,最终求值结果为单个整数10,Conv2dOptions接收到单值参数后会自动将其扩展为两维度相等的(10,10)卷积核,并非接口不支持二元尺寸输入。
正确写法
方式1:初始化时直接传入花括号包裹的二元尺寸
直接用花括号{h, w}的形式包裹卷积核的高、宽尺寸作为参数传入即可,不要使用圆括号:
// 构造输入通道32、输出通道32、卷积核尺寸1*10的Conv2d层 torch::nn::Conv2d conv(torch::nn::Conv2dOptions(32, 32, {1, 10}));
方式2:初始化选项后单独赋值kernel_size
如果需要分步配置参数,也可以先构造Conv2dOptions对象,再单独修改kernel_size字段:
auto conv_opts = torch::nn::Conv2dOptions(32, 32, 1); // 单独设置卷积核为高1、宽10的非对称尺寸 conv_opts.kernel_size = {1, 10}; // 按需配置其他非对称参数,比如对应padding、stride conv_opts.padding = {0, 4}; // 高度方向补0,宽度方向补4 conv_opts.stride = {1, 2}; // 高度方向步长1,宽度方向步长2 torch::nn::Conv2d conv(conv_opts);
注意事项
- 所有支持两维度独立配置的Conv2d参数(包括kernel_size、stride、padding、dilation),都可以通过
{h, w}的花括号二元组形式传入不同维度的数值。 - 禁止用圆括号
(h,w)传递二元尺寸,避免触发C++逗号运算符导致参数解析错误。
内容的提问来源于stack exchange,提问作者MoneyBall
相关产品推荐
相关产品推荐

