python - 参数是如何传入构造函数的?
问题描述
这段代码:
class Net(nn.Module):
def __init__(self):
super(Net, self).__init__()
self.conv1 = nn.Conv2d(1,6,5)
self.conv2 = nn.Conv2d(6, 16, 5)
self.fc1 = nn.Linear(16*5*5, 120)
self.fc2 = nn.Linear(120, 84)
self.fc3 = nn.Linear(84, 10)
def forward(self, x):
x = F.max_pool2d(F.relu(self.conv1(x)), (2,2))
x = F.max_pool2d(F.relu(self.conv2(x)), 2)
x = x.view(-1, self.num_flat_features(x))
x = F.relu(self.fc1(x))
x = F.relu(self.fc2(x))
x = self.fc3(x)
return x
def num_flat_features(self, x):
size = x.size()[1:]
num_features = 1
for s in size:
num_features *= s
return num_features
net = Net()
input = torch.randn(1,1,32,32)
out = net(input)
print(out)
我正在学习 python 并试图了解这个构造函数是如何工作的。我的问题是这两行:
input = torch.randn(1,1,32,32)
out = net(input)
在初始化初始化中,我看不到“输入”是如何用于初始化的。
解决方案
net = Net()
调用__init__
不带参数的方法。
out = net(input)
使用as 参数调用该__call__
方法。input
由于Net
没有实现这个,所以必须在基类中实现nn.Module
在这里您可以找到来源,nn.Module
并__call__
使用input
as 参数定义。
推荐阅读
- opencl - 为什么这个简单的 OpenCL 代码没有向量化?
- ios - 在 Hour 和 Minute 之间添加冒号 (:) 并在 UIDatePicker 中禁用默认 AM/PM
- google-sheets - 是否可以在不使用脚本的情况下使用另一个单元格(甚至更好的行)被修改的日期来更新一个单元格?
- python - CDK 无法创建 CloudWatch Logs SubscriptionFilter
- windows - 设置受保护的文件夹,例如通过注册表操作
- regex - 正则表达式。替换字符串中的特定字符
- python - 在python中为数据框的所有分类变量创建频率表
- c - C中没有循环的整数的排列
- mysql - SQL 错误:0,SQLState:08S01 没有 C3P0 的 Hibernate 的通信链路故障错误
- c - kmalloc 分配实际上不是连续的吗?