唯别而已 2023-05-14 15:22 采纳率: 100%
浏览 21
已结题

pytorch中继承nn.Module后类的奇怪用法

我一直以为我看的代码有语法错误,直到我刚刚才发现他的玄机
先上代码:

import torch.nn as nn
class A():#nn.Module
    def __init__(self,a="MaXh",b=100):
        super(A, self).__init__()
        self.name = a
        self.age = b

    def forward(self,name2):
        print(f"Hello, I'm{self.name} and i am {self.age} yearsold","\n","my girlfriend is",name2)
        return name2


class B:
    def __init__(self,c=0):
        self.a = A()

    def forward(self,name2):
        out=self.a(name2)#看似有语法错误,不应该是out=self.a.forward(name2) ?
        return out

b = B()
b.forward("ma")


运行结果:报错
但是,如果让A类继承nn.Module:


import torch.nn as nn
class A(nn.Module):#
    def __init__(self,a="MaXh",b=100):
        super(A, self).__init__()
        self.name = a
        self.age = b

    def forward(self,name2):
        print(f"Hello, I'm{self.name} and i am {self.age} yearsold","\n","my girlfriend is",name2)
        return name2


class B:
    def __init__(self,c=0):
        self.a = A()

    def forward(self,name2):
        out=self.a(name2)#看似有语法错误,不应该是out=self.a.forward(name2) ?
        return out

b = B()
b.forward("ma")

代码中看似有语法错误的那一行就能正常运行:

Hello, I'mMaXh and i am 100 yearsold 
 my girlfriend is ma
'ma'

Why?

  • 写回答

2条回答 默认 最新

  • 社区专家-Monster-XH 2023-05-14 15:39
    关注

    基于Monster 组和GPT的调写:

    • 在第一个代码示例中,A类没有继承自nn.Module,因此它不是一个PyTorch的模块,而是一个普通的Python类。在这种情况下,forward方法只是一个普通的实例方法,并不具有特殊的含义。
    • 当你调用self.a(name2)时,self.a是一个A类的实例,而不是一个PyTorch模块,所以它不会自动调用forward方法。因此,你会得到一个TypeError,因为你不能像调用函数一样调用一个非函数的对象。
    • 在第二个代码示例中,A类继承自nn.Module,它成为了一个PyTorch的模块。PyTorch模块中的forward方法具有特殊的含义,用于定义模块的前向传播逻辑。
    • 因此,在第二个示例中,当你调用self.a(name2)时,由于self.a是一个PyTorch模块,它会自动调用其forward方法,从而正常运行代码并输出结果。
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 5月22日
  • 已采纳回答 5月14日
  • 创建了问题 5月14日

悬赏问题

  • ¥200 csgo2的viewmatrix值是否还有别的获取方式
  • ¥15 Stable Diffusion,用Ebsynth utility在视频选帧图重绘,第一步报错,蒙版和帧图没法生成,怎么处理啊
  • ¥15 请把下列每一行代码完整地读懂并注释出来
  • ¥15 pycharm运行main文件,显示没有conda环境
  • ¥15 易优eyoucms关于二级栏目调用的问题
  • ¥15 寻找公式识别开发,自动识别整页文档、图像公式的软件
  • ¥15 为什么eclipse不能再下载了?
  • ¥15 编辑cmake lists 明明写了project项目名,但是还是报错怎么回事
  • ¥15 关于#计算机视觉#的问题:求一份高质量桥梁多病害数据集
  • ¥15 特定网页无法访问,已排除网页问题