Keras Sequence中idx*self.batch_size作用及__getitem__逻辑解析
关于Keras Sequence中__getitem__方法的疑问解答
1. idx * self.batch_size 的作用
idx 是当前要获取的批次序号(从0开始计数),self.batch_size 是每个批次包含的样本数量。两者相乘的结果就是当前批次在整个数据集里的起始索引。比如批次大小设为32,第0批的起始位置就是0,第1批就是32,第2批就是64,以此类推,用来精准定位当前批次从数据集的哪个位置开始取数。
2. low 和 high 的计算逻辑
low = idx * self.batch_size:就是上面说的当前批次的起始索引,对应数据集切片的左边界(包含该位置的样本)。high = low + self.batch_size:是当前批次的结束索引(不包含该位置的样本),也就是从low开始往后取batch_size个样本的截止位置。比如low=32,batch_size=32,那high=64,对应的就是取数据集里索引32到63的样本。
3. 为什么要用 high = min(low + self.batch_size, len(self.x))
因为整个数据集的样本总数不一定刚好是batch_size的整数倍。比如总共有1008个样本,batch_size=32,前31批每批32个(31*32=992),第31批的low=992,low+batch_size=1024,但数据集只有1008个样本(索引到1007),这时候直接用1024会导致索引越界报错。用min函数就会取1008作为high,这样最后一个批次就取992到1007的16个样本,保证不会超出数据集的范围,同时也能把剩余的样本全部用上。
内容的提问来源于stack exchange,提问作者Gilbert Chan
相关产品推荐
相关产品推荐

