【发布时间】:2021-10-01 02:15:50
【问题描述】:
假设我有一个 DataLoader
dataloader = DataLoader(dataset, batch_size=32)
我想定义一个可以前馈我的自定义函数的神经网络。我知道在传统的全连接网络中,我可以只使用它的线性或其他已经存在的功能。而且,重要的是,这些函数可以使用 DataLoader 输入并自动批处理运行。
现在我想定义我自己的函数,但我不知道如何编写它没有for循环。比如(我随机写了一些自定义函数f(x)),
def f(x):
x = np.sin(np.exp(x)) + np.log(x) - 1/x
return x
class NeuralNet(nn.Module):
def __init__(self, input_dim):
super(NeuralNet, self).__init__()
self.net = f
def forward(self, x_batch):
result = torch.zeros(len(x_batch))
for i in len(x_batch):
result[i] = self.net(x_batch[i])
return result
或者 f 中的 for 循环
def f(x_batch):
result = torch.zeros(len(x_batch))
for i in range(x_batch):
result[i] = np.sin(np.exp(x_batch[i])) + np.log(x_batch[i]) - 1/x_batch[i]
return result
class NeuralNet(nn.Module):
def __init__(self, input_dim):
super(NeuralNet, self).__init__()
self.net = f
def forward(self, x_batch):
return self.net(x_batch)
有什么办法可以摆脱 for 循环,以便在 GPU 上进行并行计算?因为我认为 for 循环不会利用 GPU 的优势。还是我误会了什么?
【问题讨论】:
标签: pytorch