Pytorch神经网络-批训练

神经网络中的训练形式不是将所有的数据一起打包一起进行训练。有时数据非常大。可以训练数据中的一小批,不断的进行。这样神经网络的效率会大大的提高。

进行批训练首先要导入这两个包

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()

你可能感兴趣的:(Pytorch神经网络-批训练)