【发布时间】:2019-10-29 02:21:01
【问题描述】:
我正在使用 keras 训练模型。我尝试了“fit”和“fit_generator”功能。而且我不明白为什么性能有很大差异,可能是我做错了什么。这是我第一次编写 batch_generator 代码。
给定批量大小为 10,我观察到的是使用函数时-
fit:它训练得更快(每个 epoch 大约 3 分钟),随着批量大小的倍数增加详细计数(这里是 10)
样本-
80/7632 [.......................] - ETA:4:31 - 损失:2.2072 - acc:0.4375
fit_generator:训练速度慢得多(每个 epoch 10 分钟),详细计数每次增加 1(不等于批量大小)
样本-
37/7632 [.......................] - ETA:42:25 - 损失:2.1845 - acc:0.3676
如您所见,对于同一数据集的 fit_generator,ETA 太高了。并且fit_generator 每次增加1,而fit 以10 的倍数增加
生成器:
def batch_generator(X ,y, batch_size=10):
from sklearn.utils import shuffle
batch_count = int(len(X) / batch_size)
extra = len(X) - (batch_count * batch_size)
while 1:
#shuffle X and y
X_train, y_train = shuffle(X,y)
#Yeild Batches
for i in range(1, batch_count):
batch_start = (i-1) * batch_size
batch_end = i * batch_size
X_batch = X_train[batch_start: batch_end]
y_batch = y_train[batch_start: batch_end]
yield X_batch, y_batch
#Yeild Remaining Data less than batch size
if(extra > 0):
batch_start = batch_count * batch_size
X_batch = X_train[batch_start: -1]
y_batch = y_train[batch_start: -1]
yield X_batch, y_batch
拟合函数:
model.fit_generator(batch_generator(X, y, 10),
verbose = 1,
samples_per_epoch = len(X),
epochs = 20,
validation_data = (X_test, y_test),
callbacks = callbacks_list)
谁能解释为什么会这样?
【问题讨论】:
-
您在 fit_generator 中使用的 samples_per_epoch 参数是什么?它应该被称为steps_per_epoch
-
samples_per_epochs 用于告诉模型它期望看到多少样本才能得出结论,它已经完成了一个 epoch。
标签: python machine-learning keras deep-learning