我正在训练一个具有100*100个隐藏节点,4个输入/1个输出,批处理大小为32的神经网络,并且我没有看到使用GPU与CPU相比的速度提高。我只有一个有限的数据集(1067个样本,一开始都复制到GPU ),但我会认为33个批次可以并行运行,超过了复制到GPU所需的时间。我的数据集是否太小,或者可能存在其他问题?下面是我的代码片段:
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发布于 2021-02-09 16:01:39
数据到达GPU所需的时间可能会抵消GPU带来的好处。在这种情况下,网络的大小看起来很小,CPU应该足够高效,GPU的加速也不应该那么大。
此外,GPU通常用于并行的矩阵计算,或者在这种情况下-单个批次的数据乘以网络的权重。所以批处理不应该并行处理,除非你采取额外的步骤,比如使用额外的库和/或GPU。
https://stackoverflow.com/questions/66112977
复制相似问题