Python 理解Pytorch过滤器功能
我查阅了PyTorch框架的文档,发现了很多实例,其中一个变量被分配了一个函数,但当它调用函数时,参数会发生变化。不确定这是如何工作的,任何指针都会有帮助 我所理解的-Python 理解Pytorch过滤器功能,python,pytorch,Python,Pytorch,我查阅了PyTorch框架的文档,发现了很多实例,其中一个变量被分配了一个函数,但当它调用函数时,参数会发生变化。不确定这是如何工作的,任何指针都会有帮助 我所理解的- def func1(word): print("hello", word) var1 = func1 现在在这个场景中,var1(“world”)将打印字符串hello world 但我不明白的是PyTorch的一些台词,比如: def __init__(self, input_size, num_
def func1(word):
print("hello", word)
var1 = func1
现在在这个场景中,var1(“world”)
将打印字符串hello world
但我不明白的是PyTorch的一些台词,比如:
def __init__(self, input_size, num_classes):
super(NN,self).__init__()
self.fc1 = nn.Linear(input_size, 50)
self.fc2 = nn.Linear(50, num_classes)
def forward(self,x):
x = F.relu(self.fc1(x))
x = self.fc2(x)
return x
我们如何知道只应将1个参数传递给self.fc2
。它似乎与nn.Linear
nn.Linear是否返回我们存储在前面示例中的var1中的类似func1的函数?如果是,是否有任何文件说明返回的内容
我确实在nn模块中找到了每个函数的用法,但是否有什么东西可以提供关于如何准确工作的更多细节?
nn。线性
不是一个函数(也不是所有其他层,如卷积层、批处理规范……),而是一个函子,这意味着它是一个实现了\uuuu call\uuu
方法/运算符的类,当您编写类似self.fc2(x)
的内容时,会调用该方法/运算符
\uuuu call\uuuu
运算符在基类中实现,它是对另一个方法\u call\u impl
的调用,该方法本身(基本上)调用forward
方法。因此,多亏了继承魔法,当您使一个类从nn.Module
派生时,您只需要实现forward
方法
这个方法的签名有点取决于您,但在大多数情况下,它会将一个张量作为输入并返回另一个张量
总之:
# calls the constructor of nn.Linear. self.fc1 is now a functor
self.fc1 = nn.Linear(20, 10)
# calls the fc1 functor on an input
y = self.fc1(torch.randn(2, 10))
# which is basically doing
y = self.fc1.forward(torch.randn(2, 10))
首先,您似乎需要更多地了解函数、变量和类的工作方式。我怀疑你的问题主要在于你需要更加熟悉基本概念和术语。这将是一个个人教程,而不是堆栈溢出服务。是的,
nn.Linear
返回一个接受数组并返回数组的筛选函数。这适用于torch.nn
模块中的大多数功能。Linear
的参数给出了数组的大小,文档说明了如何操作数组的大小。严格地说,Linear
是一个定义\uuuuuuuu调用\uuuuuu
的类,因此它的实例可以像函数一样调用。@chepner我已经完成了Linear的实现,没有找到调用,虽然我确实在别处读到过,并且对它的工作原理有了一个想法。我在forward函数中看到对functional.linear的调用,它只接受一个输入X并产生输出,但我不明白,什么时候调用linear中的forward函数?这就是遗传的原理吗?我现在更清楚了。我已经取消了我的关闭和否决票。您的问题涉及父级的\uuuuu init\uuuu
方法的源代码,您在这里没有包括该方法。