Tensorflow dataset from generator OutOfRangeError: End of sequence
Tensorflow dataset from generator OutOfRangeError: End of sequence
returns 生成器的函数:
def img_x_gen(dir):
files = glob.glob(f'{dir}/*.jpg')
for file in files:
X_i = np.asarray(Image.open(file))
X_i = X_i / 255.0
yield X_i, X_i # It's an autoencoder so return X_i twice
正在创建数据集:
types = (tf.float32, tf.float32)
shapes = (img_shape, img_shape)
ds_train = tf.data.Dataset.from_generator(img_x_gen, types, shapes,
args=['train/img_sq']).batch(batch_size)
ds_valid = tf.data.Dataset.from_generator(img_x_gen, types, shapes,
args=['valid/img_sq'],).batch(batch_size)
调用拟合方法:
vae.fit(ds_train, epochs=3, validation_data=ds_valid, verbose=True)
我得到问题标题中的错误:
OutOfRangeError: End of sequence
训练集中的示例数量是 894,验证集中的示例数量是 247。batch_size
是 32。我知道如果我将数据加载到内存中,模型就可以工作。
我也试过制作一个生成器并手动批处理(并将 steps_per_epoch
和 validation_steps
传递给 model.fit
方法),但是遇到了类似的错误:Your input ran out of data; interrupting training
.
很明显我对发电机有些不了解。
您可以直接将 model.fit_generator()
与生成器一起使用,而不是 model.fit()
。您收到此错误是因为您的生成器未根据输入的形状生成需要的值数量。您可以通过将其设为无限生成器来快速修复它。
def img_x_gen(dir):
while True:
# Make your generator infinite
files = glob.glob(f'{dir}/*.jpg')
for file in files:
X_i = np.asarray(Image.open(file))
X_i = X_i / 255.0
yield X_i, X_i
因为你的数据集迭代到最后,使用.repeat()函数重复你的数据集:
dataset = dataset.repeat()
returns 生成器的函数:
def img_x_gen(dir):
files = glob.glob(f'{dir}/*.jpg')
for file in files:
X_i = np.asarray(Image.open(file))
X_i = X_i / 255.0
yield X_i, X_i # It's an autoencoder so return X_i twice
正在创建数据集:
types = (tf.float32, tf.float32)
shapes = (img_shape, img_shape)
ds_train = tf.data.Dataset.from_generator(img_x_gen, types, shapes,
args=['train/img_sq']).batch(batch_size)
ds_valid = tf.data.Dataset.from_generator(img_x_gen, types, shapes,
args=['valid/img_sq'],).batch(batch_size)
调用拟合方法:
vae.fit(ds_train, epochs=3, validation_data=ds_valid, verbose=True)
我得到问题标题中的错误:
OutOfRangeError: End of sequence
训练集中的示例数量是 894,验证集中的示例数量是 247。batch_size
是 32。我知道如果我将数据加载到内存中,模型就可以工作。
我也试过制作一个生成器并手动批处理(并将 steps_per_epoch
和 validation_steps
传递给 model.fit
方法),但是遇到了类似的错误:Your input ran out of data; interrupting training
.
很明显我对发电机有些不了解。
您可以直接将 model.fit_generator()
与生成器一起使用,而不是 model.fit()
。您收到此错误是因为您的生成器未根据输入的形状生成需要的值数量。您可以通过将其设为无限生成器来快速修复它。
def img_x_gen(dir):
while True:
# Make your generator infinite
files = glob.glob(f'{dir}/*.jpg')
for file in files:
X_i = np.asarray(Image.open(file))
X_i = X_i / 255.0
yield X_i, X_i
因为你的数据集迭代到最后,使用.repeat()函数重复你的数据集:
dataset = dataset.repeat()