当前位置:  开发笔记 > 人工智能 > 正文

Why there are different output between model.forward(input) and model(input)

如何解决《Whytherearedifferentoutputbetweenmodel.forward(input)andmodel(input)》经验,为你挑选了1个好方法。

I'm using pytorch to build a simple model like VGG16,and I have overloaded the function forward in my model.

I found everyone tends to use model(input) to get the output rather than model.forward(input), and I am interested in the difference between them. I try to input the same data, but the result is different. I'm confused.

I have output the layer_weight before I input data, the weight not be changed, and I know when we using model(input) it using __call__ function, and this function will call model.forward.

   vgg = VGG()
   vgg.double()
   for layer in vgg.modules():
      if isinstance(layer,torch.nn.Linear):
         print(layer.weight)
   print("   use model.forward(input)     ")
   result = vgg.forward(array)

   for layer in vgg.modules():
     if isinstance(layer,torch.nn.Linear):
       print(layer.weight) 
   print("   use model(input)     ")
   result_2 = vgg(array)
   print(result)
   print(result_2)

output:

    Variable containing:1.00000e-02 *
    -0.2931  0.6716 -0.3497 -2.0217 -0.0764  1.2162  1.4983 -1.2881
    [torch.DoubleTensor of size 1x8]

    Variable containing:
    1.00000e-02 *
    0.5302  0.4494 -0.6866 -2.1657 -0.9504  1.0211  0.8308 -1.1665
    [torch.DoubleTensor of size 1x8]

Umang Gupta.. 5

model.forward只是调用您提到的前向操作,但要多做__call__一些事情。

如果您深入研究类的代码,nn.Module您将看到__call__最终的调用,但在内部处理向前或向后的挂钩,并管理pytorch允许的某些状态。当调用像MLP这样的简单模型时,可能并不是真正需要它,但是像频谱归一化层这样的更复杂的模型具有钩子,因此model(.),除非您明确只想调用,否则应尽可能使用签名。model.forward

另请参见不带.forward()的调用前转功能

但是,在这种情况下,差异可能是由于某些丢失层造成的,vgg.eval()在比较输出之前,应先致电确保网络中的所有随机性均已关闭。



1> Umang Gupta..:

model.forward只是调用您提到的前向操作,但要多做__call__一些事情。

如果您深入研究类的代码,nn.Module您将看到__call__最终的调用,但在内部处理向前或向后的挂钩,并管理pytorch允许的某些状态。当调用像MLP这样的简单模型时,可能并不是真正需要它,但是像频谱归一化层这样的更复杂的模型具有钩子,因此model(.),除非您明确只想调用,否则应尽可能使用签名。model.forward

另请参见不带.forward()的调用前转功能

但是,在这种情况下,差异可能是由于某些丢失层造成的,vgg.eval()在比较输出之前,应先致电确保网络中的所有随机性均已关闭。

推荐阅读
携手相约幸福
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有