python训练大数据集时,分批训练create batch

  • Post author:
  • Post category:python




问题

问题:使用python训练大数据集时,分批训练解决内存不足的问题

有的时候我们的机器在跑一些几万条多维数据时(例如知识图谱数据集),会陷入一个内存不足的错误提示,一般解决方案有两种:

  • create batch:分批训练
  • 云gpu资源



解决方案



create batch(分批训练)

问题情景:

这里举例一个9万多个triples的知识图谱数据集:WN18RR。

特征是100维embedding向量,每一行代表一个三元组信息:记为features,类型为list

label是0或1(假设我们在处理分类问题):记为labels,类型为list

如果是正常的使用传统机器学习模型或者神经网络模型,大部分机器都会报错:内存不足。这里我们就使用create batch的方式来训练。



Step1. 数据类型转换
# 创建torch能够识别的数据集类型,导入相应的包
import torch
import torch.utils.data as Data

# features因为是embedding vector,每个元素是浮点数,在转换为tensor格式的时候类型要转化为double
x = torch.tensor(features, dtype=torch.double)
# labels因为都是0或1,所以用int16/int32/long都可以
y = torch.tensor(labels_list, dtype=torch.long)

# 需要把x和y组成一个完整的数据集,并转化为pytorch能识别的数据集类型
torch_dataset = Data.TensorDataset(x,y)


Step2. 构造迭代器
# 构造一个迭代器
BATCH_SIZE = 10000	# 每一个batch的大小
loader = Data.DataLoader(
    dataset = torch_dataset,	# 转化好tensor格式的数据集
    batch_size = BATCH_SIZE,
    shuffle = True,	# 是否乱序,最好乱序
    num_workers = 20	# 加载数据时用多少线程
)


Step3. 分批训练

用step2定义好的迭代器进行分批训练,这里我们示例用knn模型来完成分类任务(0或者1),并打出decision score用于判断判定结果的可能性大小

# KNN

N = 10	# 训练N次全部数据,达到更好的泛化效果
triple_list = []	# 存储最后一轮全部数据训练时的batch_x
decision_score_list = []	# 存储最后一轮全部数据训练时的decision score

# 导入相关机器学习的包
from pyod.models.knn import KNN
knn_clf = KNN()

# 训练N轮全部数据
for epoch in range(N):
    i = 0
    for batch_x,batch_y in loader:
        i = i + 1
        knn_clf.fit(batch_x)
        print('epoch:{},num:{},batch_x:{},batch_y:{},decision_scores:{}'.format(epoch,i,batch_x,batch_y,knn_clf.decision_scores_))
        # 判断是不是最后一轮全部数据的训练,如果是就将结果存储到list中
        if epoch == N-1:
            decision_score_list.append(knn_clf.decision_scores_.tolist())
            triple_list.append(batch_x.numpy().tolist())

print(triple_list)
print(decision_score_list)


总结
  • 当BATCH_SIZE越大,训练时间越长,因为一次性要读取的数据越多;
  • 当BATCH_SIZE越大,模型的准确性越高,因为模型在一次batch训练中所学习到的特征越多;
  • 当epoch越大,模型的总训练次数越多,随机性减少,理论上准确性越高

所以,在真实的场景中,需要通过调参平衡好

训练时间



准确性

这两个因素




云gpu资源

以下是找到的一些免费的gpu资源:


  • Baidu AI Studio and PaddlePaddle Course

    • Official Website: https://www.paddlepaddle.org.cn/
    • Free GPU Period: 100 hours/user

  • Google Colab

    • Official Website: https://colab.research.google.com/notebook
    • Free GPU Period: 100 hours/user

  • Kaggle Kernel

    • Official Website: https://www.kaggle.com/general/108481
    • Free GPU Period: 30 hours/week/user

  • FloydHub

    • Official Website: https://www.floydhub.com/
    • Free GPU Period: 2 hours/user



版权声明:本文为qq_40177015原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。