【发布时间】:2020-02-10 23:20:06
【问题描述】:
我的神经网络具有以下架构:
input -> 128x (separate fully connected layers) -> output averaging
我正在使用 ModuleList 来保存全连接层的列表。这是它在这一点上的样子:
class MultiHead(nn.Module):
def __init__(self, dim_state, dim_action, hidden_size=32, nb_heads=1):
super(MultiHead, self).__init__()
self.networks = nn.ModuleList()
for _ in range(nb_heads):
network = nn.Sequential(
nn.Linear(dim_state, hidden_size),
nn.Tanh(),
nn.Linear(hidden_size, dim_action)
)
self.networks.append(network)
self.cuda()
self.optimizer = optim.Adam(self.parameters())
然后,当我需要计算输出时,我使用for ... in 构造来执行通过所有层的前向和后向传递:
q_values = torch.cat([net(observations) for net in self.networks])
# skipped code which ultimately computes the loss I need
self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
这行得通!但我想知道我是否不能更有效地做到这一点。我觉得通过for...in,我实际上是在逐个遍历每个单独的 FC 层,而我希望这个操作可以并行完成。
【问题讨论】:
标签: python deep-learning pytorch ensemble-learning