我正在使用下面的代码通过PyTorch训练一个简单的神经网络来学习谐波波形。但我想开启洗牌模式来改进模型。有没有相关的语法可以实现这个目标?
model = FCN(1,1,50,4)optimizer = torch.optim.Adam(model.parameters(),lr=15e-3, weight_decay=15e-3/4000)for i in range(4000): optimizer.zero_grad() yhh = model(x_data) loss = torch.mean((yhh-y_data)**2) loss.backward() optimizer.step()
此外,我还尝试使用下面的代码随机重新排序学习集,但结果很糟糕。
yhh = model(x_data[[np.random.choice(range(len(x_data)), len(x_data), replace=False)]])
回答:
假设你的x_data
是一个大小为[100]的普通Torch张量,你可以使用torch.utils.data.DataLoader
并设置shuffle=True
来在每个epoch后洗牌x_data
:
dataset = torch.utils.data.TensorDataset(x_data) # 首先创建一个包装你的张量的数据集dataloader = torch.utils.data.DataLoader(dataset, batch_size=bs, shuffle=True) # 指定你需要的批量大小
dataloader
对象现在是一个可迭代对象,可以这样使用:
for data in dataloader: model(data[0]) #data[0]是一个大小为(bs)的张量