7. 案例之生成器生成批量歌词

张开发
2026/4/18 2:51:23 15 分钟阅读

分享文章

7. 案例之生成器生成批量歌词
案例: 基于传入的数值(每批次的歌词条数)创建生成器生成批次歌词. 案例:基于传入的数值(每批次的歌词条数)创建生成器生成批次歌词. 很多模型都是一个批次一个批次的给模型喂数据来训练模型的。 构建数据生成器每8个条数据(8个样本)8个数据的给模型喂数据; # 需求:基于文件中的歌词创建生成器根据传入的每批次的歌词条数生成歌词批次。importmath# 1.定义函数接收每批次的歌词条数返回生成器.defdataset_loader(batch_size): #自定义歌词批量生成器 :param batch_size: 每批次的歌词条数 :return: 生成器母个元素都是一批次的数据例如:(8条8条8条...) # 1.1 读取文件数据withopen(./data/data.txt,r,encodingutf-8)assrc_file:# 1.2 一次读取所有行# lines[line.strip() for line in src_file.readlines()]linessrc_file.readlines()print(lines)# 1.3 计算批次总数total_batchmath.ceil(len(lines)/batch_size)# 1.4 通过for循环方式获取到每批次的数据放到生成器中并返回foridxinrange(total_batch):#假设5批idx的值0 1 2 3 4# 第1批歌词索引(idx0)歌词为第1条-第8条索引为0-7# yield lines[0:8] #包左不包右# 第2批歌词索引(idx1)歌词为第9条-第16条索引为8-15# yield lines[8:16]# 第3批歌词索引(idx2)歌词为第17条-第24条索引为16-23# yield lines[16:24]yieldlines[idx*batch_size:(idx1)*batch_size]# 2.测试dlinedataset_loader(8)# print(next(dline)) # 第一批# print(next(dline)) # 第二批forbatch_dataindline:print(batch_data)

更多文章