You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PyTorch自定义MySequential使用add_module()时输出维度异常问题

问题分析:自定义MySequential仅执行第一个模块的原因及修复

你的问题核心出在MySequential类的forward方法里,return语句的缩进位置错误:

原代码中return X被写在了for循环的内部,这意味着循环刚执行完第一个模块(nn.LazyLinear(256))就直接返回了结果,后面的nn.ReLU()和nn.LazyLinear(10)模块完全没有被执行,所以输出维度停在了256。

修正后的代码

只需要把return X移到for循环的外面,让所有模块依次执行完毕后再返回最终结果:

import torch
from torch import nn 
from torch.nn import functional as F 

class MySequential(nn.Module):
    """
    自定义顺序容器,用于按顺序添加模块
    """

    def __init__(self, *args):
        super(MySequential, self).__init__()

        for idx, module in enumerate(args):
            self.add_module(str(idx), module)

    def forward(self, X):
        """
        依次执行所有子模块
        """
        for module in self.children():
            X = module(X)
        # 将return移到循环外部
        return X


# 测试代码
input = torch.rand(500)
print('输入形状: ', input.shape)
net = MySequential(nn.LazyLinear(256), nn.ReLU(), nn.LazyLinear(10))
out = net(input)
print('输出形状: ', out.shape)

修正后的运行结果

输入形状:  torch.Size([500])
输出形状:  torch.Size([10])

调整后所有模块会按顺序执行,最终输出维度就符合预期了。

内容的提问来源于stack exchange,提问作者programmer_04_03

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 23:27:45