一、理论差异
batch_sizes 代表1次进行计算梯度误差delta的样本数目,计算之后再进行参数迭代。
epoch 完成了所有的训练输入的小批量训练,称为完成了一次训练迭代。然后就会开始一次新的迭代。
如下,273 指的是一次迭代用到的batch_sizes 的个数,这里样本总数为 17469 ,batch_sizes 设定的为 64,所以17469/64= 272.9 ,即 273。可以看到以下是进行了50次epoch,每次都会对于所有训练输入进行一轮批量训练。
二、实现情况
keras 涉及的batch_sizes 的数据处理:由于直接model.fit输入全量数据,可能会有内存不支持的情况。所以,这里需要事先进行数据的batch_size的处理,具体应用tensorflow的Sequence函数。
可参考链接:tensorflow.keras.utils.Sequence的使用_会飞de鱼~的博客-CSDN博客
可参考代码:
from tensorflow.keras.utils import Sequence
import numpy as np
class DataGenerator(Sequence):
def __init__(self, x_set, y_set, batch_size):
self.x, self.y = x_set, y_set
self.batch_size = batch_size
def __len__(self):
return int(np.ceil(len(self.x) / float(self.batch_size)))
def __getitem__(self, idx):
batch_x = self.x[idx * self.batch_size:(idx + 1) * self.batch_size]
batch_y = self.y[idx * self.batch_size:(idx + 1) * self.batch_size]
return tf.convert_to_tensor(batch_x), tf.convert_to_tensor(batch_y)
train_gen = DataGenerator(trainx_lt_tfidf, label_one_trainy_lt, 64)