Keras fit_generator、运行 上的错误比应有的多了几个步骤
Bug on Keras fit_generator, running few steps more than it should
我发现 fit_generator()
会比应有的 运行 多走几步。
我设置了steps_per_epoch=100
。 i 和 k 都是从 0 开始的。但是在训练过程结束时,它会打印出 k = 109
。只有在添加验证数据时才会出现这种情况。
def data_generate(xfd, yfd, x_line_offset, y_line_offset):
while True:
k = 0
x_line_offset, y_line_offset = shuffle_list(x_line_offset, y_line_offset)
for i in range(100):
print('i = {}'.format(i))
print('k = {}'.format(k))
k += 1
x_train = get_line_by_offset(xfd, x_line_offset[i])
x_train = rescaling(x_train, 0, 65535, 0, 1)
y_train = get_line_by_offset(yfd, y_line_offset[i])
yield x_train, y_train
train_generator = data_generate(xfd_train, yfd_train, x_train_line_offset, y_train_line_offset)
validation_generator = data_generate(xfd_valid, yfd_valid, x_valid_line_offset, y_valid_line_offset)
model.fit_generator(train_generator, steps_per_epoch=100,
validation_data=validation_generator,
validation_steps=len(fix_y_valid_line_offset), epochs=1)
因为它会打印出 k = 109
,我假设它还需要 运行 几个步骤。不知道是不是bug但是 keras 日志消息在 k = 99
之后没有显示。
这里没有错误,只是一些实现细节。函数 fit_generator()
有一个默认参数 max_queue_size=10
。在习惯 fit/evaluate 模型之前,train_generator
和 validation_generator
的批次将被插入队列。
当第一个纪元结束时,将生成 100 个批次 (k = 99
)。但是,生成器将继续生成 10 个批次来填充队列。这就是为什么您会看到 k = 100
到 k = 109
。同时,验证过程开始,因此您还会看到 k = 0, ...
来自 validation_generator
。
我发现 fit_generator()
会比应有的 运行 多走几步。
我设置了steps_per_epoch=100
。 i 和 k 都是从 0 开始的。但是在训练过程结束时,它会打印出 k = 109
。只有在添加验证数据时才会出现这种情况。
def data_generate(xfd, yfd, x_line_offset, y_line_offset):
while True:
k = 0
x_line_offset, y_line_offset = shuffle_list(x_line_offset, y_line_offset)
for i in range(100):
print('i = {}'.format(i))
print('k = {}'.format(k))
k += 1
x_train = get_line_by_offset(xfd, x_line_offset[i])
x_train = rescaling(x_train, 0, 65535, 0, 1)
y_train = get_line_by_offset(yfd, y_line_offset[i])
yield x_train, y_train
train_generator = data_generate(xfd_train, yfd_train, x_train_line_offset, y_train_line_offset)
validation_generator = data_generate(xfd_valid, yfd_valid, x_valid_line_offset, y_valid_line_offset)
model.fit_generator(train_generator, steps_per_epoch=100,
validation_data=validation_generator,
validation_steps=len(fix_y_valid_line_offset), epochs=1)
因为它会打印出 k = 109
,我假设它还需要 运行 几个步骤。不知道是不是bug但是 keras 日志消息在 k = 99
之后没有显示。
这里没有错误,只是一些实现细节。函数 fit_generator()
有一个默认参数 max_queue_size=10
。在习惯 fit/evaluate 模型之前,train_generator
和 validation_generator
的批次将被插入队列。
当第一个纪元结束时,将生成 100 个批次 (k = 99
)。但是,生成器将继续生成 10 个批次来填充队列。这就是为什么您会看到 k = 100
到 k = 109
。同时,验证过程开始,因此您还会看到 k = 0, ...
来自 validation_generator
。