我想理解为什么当我们为像 GAN 这样的神经网络定义类时,我们将 torch.nn.Module 作为参数传递
import torch
import torch.nn as nn
class Generator(nn.Module):
def __init__(self, input_size, hidden_size, output_size, f):
super(Generator, self).__init__()
self.map1 = nn.Linear(input_size, hidden_size)
self.map2 = nn.Linear(hidden_size, hidden_size)
self.map3 = nn.Linear(hidden_size, output_size)
self.f = f
Run Code Online (Sandbox Code Playgroud) 最近我观察到,在定义神经网络时,我们很多时候为每一层定义单独的 ReLU 对象。为什么我们不能在需要的地方使用相同的 ReLU 对象。
例如,不要这样写-
def __init__(self):
self.fc1 = nn.Linear(784, 500)
self.ReLU_1 = nn.ReLU()
self.fc2 = nn.Linear(500, 300)
self.ReLU_2 = nn.ReLU()
def forward(x):
x = self.fc1(x)
x = self.ReLU_1(x)
x = self.fc2(x)
x = self.ReLU_2(x)
Run Code Online (Sandbox Code Playgroud)
为什么我们不能使用
def __init__(self):
self.fc1 = nn.Linear(784, 500)
self.ReLU = nn.ReLU()
self.fc2 = nn.Linear(500, 300)
def forward(x):
x = self.fc1(x)
x = self.ReLU(x)
x = self.fc2(x)
x = self.ReLU(x)
Run Code Online (Sandbox Code Playgroud)
这是 PyTorch 特有的东西吗?