python训练大数据集时,分批训练create batch
文章目录问题解决方案create batch(分批训练)Step1. 数据类型转换Step2. 构造迭代器Step3. 分批训练总结云gpu资源问题问题:使用python训练大数据集时,分批训练解决内存不足的问题有的时候我们的机器在跑一些几万条多维数据时(例如知识图谱数据集),会陷入一个内存不足的错误提示,一般解决方案有两种:create batch:分批训练云gpu资源解决方案create ba
·
问题
问题:使用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
更多推荐
已为社区贡献1条内容
所有评论(0)