【问题标题】:What's the purpose of nb_epoch in Keras's fit_generator?Keras的fit_generator中nb_epoch的目的是什么?
【发布时间】:2017-01-26 20:21:32
【问题描述】:

似乎我可以通过增大 num_samples 并保持 nb_epoch=1 来获得完全相同的结果。我认为多个 epoch 的目的是多次迭代相同的数据,但 Keras 不会在每个 epoch 结束时重新实例化生成器。它只是继续前进。例如训练这个自动编码器:

import numpy as np
from keras.layers import (Convolution2D, MaxPooling2D, 
    UpSampling2D, Activation)
from keras.models import Sequential

rand_imgs = [np.random.rand(1, 100, 100, 3) for _ in range(1000)]

def keras_generator():
    i = 0
    while True:
        print(i)
        rand_img = rand_imgs[i]
        i += 1
        yield (rand_img, rand_img)


layers = ([
    Convolution2D(20, 5, 5, border_mode='same', 
        input_shape=(100, 100, 3), activation='relu'),

    MaxPooling2D((2, 2), border_mode='same'),

    Convolution2D(3, 5, 5, border_mode='same', activation='relu'),

    UpSampling2D((2, 2)),

    Convolution2D(3, 5, 5, border_mode='same', activation='relu')])

autoencoder = Sequential()
for layer in layers:
    autoencoder.add(layer)

gen = keras_generator()
autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')
history = autoencoder.fit_generator(gen, samples_per_epoch=100, nb_epoch=2)

似乎我使用 (samples_per_epoch=100, nb_epoch=2) 得到的结果与使用 (samples_per_epoch=200, nb_epoch=1) 得到的结果相同。我是否按预期使用 fit_generator?

【问题讨论】:

    标签: neural-network keras training-data


    【解决方案1】:

    是的 - 你是对的,当使用keras.fit_generator 时,这两种方法是等价的。但是 - 保留epochs 是合理的有多种原因:

    1. 记录:在这种情况下,epoch 包含您想要记录一些重要的训练统计数据(例如,时间或时期结束时的损失)的数据量。
    2. 保持目录结构当您使用生成器从硬盘加载数据时 - 在这种情况下 - 当您知道目录中有多少文件时 - 您可以调整 batch_sizenb_epoch到这样的值,即 epoch 将包含遍历数据集中的每个示例。
    3. 在使用 flow 生成器时保持数据结构 - 在这种情况下,例如,当您有一组图片加载到您的 Python 并且您想使用 Keras.ImageDataGenerator 应用不同类型的数据转换,设置 batch_sizenb_epoch 以这样的方式包含遍历数据集中的每个示例的 epoch 可能会对您有所帮助跟踪您的培训过程的进度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-08-08
      • 2017-12-30
      • 2017-09-13
      • 2019-03-05
      • 1970-01-01
      • 1970-01-01
      • 2019-08-29
      • 2017-11-17
      相关资源
      最近更新 更多