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

问题

问题:使用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
  • 7
    点赞
  • 38
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
训练自己的数据集,可以按照以下步骤进行操作: 1. 首先,确保您已经安装了所需的Python库和框架,例如PyTorch、NumPy和OpenCV等。 2. 在训练过程之前,您需要准备好您的自定义数据集。将您的图像数据集放置在一个文件夹中,并确保每个图像都有对应的标签文件。标签文件可以是XML格式或者是YAML格式等,其中包含了每个图像中物体的类别、边界框的坐标等信息。 3. 接下来,您需要创建一个数据集的配置文件。在您的项目中的data文件夹中,创建一个新的配置文件,比如VOCData.yaml。在该文件中,您需要指定训练集和验证集的路径,以及类别的数量和名称等信息。例如,您可以使用以下配置: train: data/VOCData/train.txt val: data/VOCData/val.txt nc: 1 names: ['drone'] 其中,train.txt和val.txt是包含训练集和验证集图像文件路径的文本文件。 4. 现在,您可以开始训练模型了。使用以下命令在终端或命令行中执行训练脚本: python train.py --img 640 --batch-size 16 --epochs 300 --data data/VOCData.yaml --cfg models/yolov5s.yaml 其中,--img指定了输入图像的大小,--batch-size指定了每批训练的图像数量,--epochs指定了训练的总轮数,--data指定了数据集的配置文件路径,--cfg指定了模型的配置文件路径。 5. 训练过程会持续一段间,期间模型会根据您的数据进行迭代优化。您可以根据训练日志中的指标来监控训练的进展和性能。 这样,您就可以使用Python训练自己的数据集了。记得根据实际情况修改数据集的路径和配置文件中的相关信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [训练自己的数据集](https://blog.csdn.net/m0_53065609/article/details/124451798)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值