【发布时间】:2021-05-12 17:29:51
【问题描述】:
我正在训练一个具有 100*100 隐藏节点、四个输入/一个输出、批量大小为 32 的神经网络,我发现使用 GPU 与 CPU 相比,速度没有任何提升。我只有有限的数据集(1067 个样本,一开始全部复制到 GPU),但我原以为 33 个批次可以并行运行,而不是弥补复制到 GPU 的时间。我的数据集是否太小,还是可能存在其他问题?这是我的代码 sn-p:
def train_for_regression(X, T):
BATCH_SIZE = 32
n_epochs = 1000
learning_rate = 0.01
device = torch.device("cuda:0")
Xt = torch.from_numpy(X).float().to(device) #Training inputs are 4 * 1067 samples
Tt = torch.from_numpy(T).float().to(device) #Training outputs are 1 * 1067 samples
nnet = torch.nn.Sequential(torch.nn.Linear(4, 100),
torch.nn.Tanh(),
torch.nn.Linear(100, 100),
torch.nn.Tanh(),
torch.nn.Linear(100, 1))
nnet.to(device)
mse_f = torch.nn.MSELoss()
optimizer = torch.optim.Adam(nnet.parameters(), lr=learning_rate)
for epoch in range(n_epochs):
for i in range(0, len(Xt), BATCH_SIZE):
batch_Xt = Xt[i:i+BATCH_SIZE,:]
batch_Tt = Tt[i:i+BATCH_SIZE,:]
optimizer.zero_grad()
Y = nnet(batch_Xt)
mse = mse_f(Y, batch_Tt)
mse.backward()
optimizer.step()
return nnet
【问题讨论】:
-
batch-file 和这里有什么关系? torch 是关于 Lua,而不是 Python。标记时阅读说明
-
您应该使用
DataLoader而不是自己构建批次。 pytorch.org/docs/stable/data.html -
什么时候运行这个,同样的代码只有一行改成
device = torch.device("cpu")? -
不幸的是,我无法让 DataLoader 工作。我看到 CPU 运行时间为 36 秒,cuda:0 运行时间为 41 秒,但从底部的答案看来,数据集太小了。感谢您的帮助。