【发布时间】:2022-01-17 17:48:41
【问题描述】:
我正在训练一个神经网络来读取 4 个图像并预测接下来的 4 个图像。由于我有一个庞大的数据集,所以我编写了这个生成器:
def my_gen(array_passed):
for i in range(len(array_passed)-8):
x = arr_train_ids[i:i+4]
x = obtain_data(x) #shape (4,480,480,1)
y = arr_train_ids[i+4:i+8]
y = obtain_data(y) #same shape as x
yield x, y
obtain_data 只是打开文件,加载 4 个 480x480 矩阵并重塑为 (4, 480, 480, 1)。然后,按照这里的帖子,我这样做:
def my_input_fn(array_passed):
dataset = tf.data.Dataset.from_generator(lambda: my_gen(array_passed),
output_types=(tf.float32, tf.float32),
) #using TF2.3, output_signature not valid
dataset = dataset.batch(1)
#dataset = dataset.repeat(10)
return dataset
train_dataset = my_input_fn(arr_train_ids)
val_dataset = my_input_fn(arr_val_ids)
test_dataset = my_input_fn(arr_test_ids)
我不确定是否有必要使用repeat...现在我的代码中已对此进行了注释。
模型,称为rnc,放在此处(为简洁起见,省略,涉及 ConvLSTM 和 Conv3D)。
model = rnc(input_shape=(4, 480, 480, 1))
model.compile(optimizer=tf.keras.optimizers.Adam(lr=3e-4),loss='mae')
history = model.fit(train_dataset, validation_data=val_dataset, epochs=100)
我想训练 1 批数据。理论上,1批数据应该是4个480x480的矩阵,1个通道,(4, 480, 480, 1)作为输入,(4, 480, 480, 1)作为输出。
但是我没有从培训中得到任何东西,我很怀疑。我想知道TF数据集的准备是否是我做的正确的事情。
【问题讨论】:
-
您检查您的
train_dataset是否真的在生产批次?即,当你尝试input_batch, output_batch = next(iter(train_dataset))时,你得到了你所期待的东西吗? -
感谢您的回答。是的,我将
input_batch和output_batch作为形状张量 (1, 4, 480, 480, 1) 获得,理论上应该是正确的。
标签: python tensorflow