oracidle 2019-02-22 18:12 采纳率: 0%
浏览 3189

再看DANN的源码,在forword里有一处看不懂,类名.apply()在python3里是什么意思?

在看DANN的源码,看到这个:

    def __init__(self):
        super(CNNModel, self).__init__()
        self.feature = nn.Sequential()
        self.class_classifier = nn.Sequential()
        self.domain_classifier = nn.Sequential()
        self.feature.add_module…………
        …………                

    def forward(self, input_data, alpha):
        input_data = input_data.expand(input_data.data.shape[0], 3, 28, 28)
        feature = self.feature(input_data)
        feature = feature.view(-1, 50 * 4 * 4)
        reverse_feature = ReverseLayerF.apply(feature, alpha)
        class_output = self.class_classifier(feature)
        domain_output = self.domain_classifier(reverse_feature)

没用过python2,对apply不熟,查了一下用法感觉没看懂,附一下其他需要的代码段:

class ReverseLayerF(Function):

    @staticmethod
    def forward(ctx, x, alpha):
        ctx.alpha = alpha

        return x.view_as(x)

    @staticmethod
    def backward(ctx, grad_output):
        output = grad_output.neg() * ctx.alpha

        return output, None

alpha = 2. / (1. + np.exp(-10 * p)) - 1

class_output, domain_output = my_net(input_data=inputv_img, alpha=alpha)

forward里reverse_feature = ReverseLayerF.apply(feature, alpha)这句不太明白,我看出来ReverseLayerF是单独为该处重写了前向传播和反向传播,但apply函数里也是只有两个变量没有函数名啊,这是怎么调用的?而且要改成python3要怎么写?

另外,单独写了几句试了试,居然还跑通了

feature = torch.rand([2,2])
alpha = 1000
reverse_feature = ReverseLayerF.apply(feature, alpha)

结果是调用了类内的forward()使得reverse_feature=feature,且ReverseLayerF.alpha=1000.
那么这个类名.apply()到底是什么?有没有人能解释一下

  • 写回答

3条回答 默认 最新

  • sinx666 2021-07-10 21:14
    关注

    同问,看王金东大佬的DAAN源码也看到这个了,不知道啥意思,楼主解决了没有啊

    评论

报告相同问题?

悬赏问题

  • ¥50 成都蓉城足球俱乐部小程序抢票
  • ¥15 yolov7训练自己的数据集
  • ¥15 esp8266与51单片机连接问题(标签-单片机|关键词-串口)(相关搜索:51单片机|单片机|测试代码)
  • ¥15 电力市场出清matlab yalmip kkt 双层优化问题
  • ¥30 ros小车路径规划实现不了,如何解决?(操作系统-ubuntu)
  • ¥20 matlab yalmip kkt 双层优化问题
  • ¥15 如何在3D高斯飞溅的渲染的场景中获得一个可控的旋转物体
  • ¥88 实在没有想法,需要个思路
  • ¥15 MATLAB报错输入参数太多
  • ¥15 python中合并修改日期相同的CSV文件并按照修改日期的名字命名文件