Я тренирую очень простую модель, которая принимает количество скрытых слоев в качестве параметра.Первоначально я сохранил эти скрытые слои в списке ванильных Python []
, однако при преобразовании этого списка в nn.ModuleList
обучение резко замедляется на как минимум на один порядок !
AdderNet
class AdderNet(nn.Module):
def __init__(self, num_hidden, hidden_width):
super(AdderNet, self).__init__()
self.relu = nn.ReLU()
self.hiddenLayers = []
self.inputLayer = nn.Linear(2, hidden_width)
self.outputLayer = nn.Linear(hidden_width, 1)
for i in range(num_hidden):
self.hiddenLayers.append(nn.Linear(hidden_width, hidden_width))
self.hiddenLayers = nn.ModuleList(self.hiddenLayers) # <--- causes DRAMATIC slowdown!
def forward(self, x):
out = self.inputLayer(x)
out = self.relu(out)
for layer in self.hiddenLayers:
out = layer(out)
out = self.relu(out)
return self.outputLayer(out)
Обучение
for epoch in range(num_epochs):
for i in range(0,len(data)):
out = model.forward(data[i].x)
loss = lossFunction(out, data[i].y)
optimizer.zero_grad()
loss.backward()
optimizer.step()