从训练数据中随机抽取一打数据的好方法
我们在模型训练的时候,每次分minbatch个数据进行训练,首先我们要随机地从中随机选取这么多个数据,有没有一套好的封装函数能够处理呢?有。我平时就遇到好多需要shuffle的地方,今天就总结一下这个函数,方便以后使用,提供给大家。直接上代码吧:
1 def chunks(n, *args): 2 """Yield successive n-sized chunks from l. 从数据中连续地产生n个块 3 输入参数: 4 n:minbatch的大小,就是你需要一次从数据源里面拿多少数据出来 5 *args:其它的一些参数,包括数据长度索引、源数据等 6 输出: 7 shuffle的索引和数据 8 """ 9 # 存放shuffle索引的列表 10 keypoints = [] 11 for i in range(0, len(args[0]), n): 12 keypoints.append((i, i + n)) 13 random.shuffle(keypoints) 14 # 获取随机生成的索引值和数据值,通过函数的每次调用返回 15 for a, b in keypoints: 16 # 每次生成两个list,第一个是索引值,第二个是对应的数据值 17 yield [arg[a: b] for arg in args]
时刻记着自己要成为什么样的人!