神经网络中的训练形式不是将所有的数据一起打包一起进行训练。有时数据非常大。可以训练数据中的一小批,不断的进行。这样神经网络的效率会大大的提高。
进行批训练首先要导入这两个包
import torch
import torch.utils.data as Data
Data是进行小批训练的一个途径。
首先创建一个数据库。data_tensor是进行训练的数据,target_tensor是用来计算误差的参数。
torch_dataset = Data.TensorDataset(data_tensor=x,target_tensor=y)
Dataloader是用来包装数据的工具。在使用此工具之前需要将自己的numpy.array变为Tensor类型的数据。
loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2,
)
- shuffle:判断在训练的时候要不要随机的打乱数据再进行抽样。
- num_workers:决定每次提取数据的时候是使用num_workers的进程还是线程进行提取。
训练数据
for epoch in range(3):
# 将loader中的数据拆分为5次进行训练
for step, (batch_x, batch_y) in enumerate(loader):
print('Epoch: ', epoch, '| Step: ', step, '| batch x: ',
batch_x.numpy(), '| batch y: ', batch_y.numpy())
训练三次,每次训练将数据拆分为5次进行训练。每次导出的数据都是打乱了顺序之后再导出的。
完整代码
import torch
import torch.utils.data as Data
torch.manual_seed(1)
#定义一小批有多少个
BATCH_SIZE = 5
x = torch.linspace(1,10,10)
y = torch.linspace(10,1,10)
#创建一个数据库。data_tensor是进行训练的数据,target_tensor是用来计算误差的参数。
#shuffle判断在训练的时候要不要随机的打乱数据再进行抽样
#num_workers:决定每次提取数据的时候是使用num_workers的进程还是线程进行提取。
torch_dataset = Data.TensorDataset(data_tensor=x,target_tensor=y)
loader = Data.DataLoader(
dataset=torch_dataset,
batch_size=BATCH_SIZE,
shuffle=True,
num_workers=2,
)
def show_batch():
# 整体训练三次
for epoch in range(3):
# 将loader中的数据拆分为5次进行训练
for step, (batch_x, batch_y) in enumerate(loader):
print('Epoch: ', epoch, '| Step: ', step, '| batch x: ',
batch_x.numpy(), '| batch y: ', batch_y.numpy())
if __name__ == '__main__':
show_batch()
网友评论