我尝试使用tf.data.Dataset对数据集进行一些转换。
我发现转换在每个epoch中都会执行。是否有可能让map函数仅在第一个epoch中执行?
回答:
你可以使用不同的数据集。这在自定义训练循环中很容易实现。就像这样:
def transformation(inputs, labels): tf.print('With transformation!') return inputs, labelsdef no_transformation(inputs, labels): tf.print('No transformation!') return inputs, labelsdata_with_transform = data.take(4).map(transformation).batch(4)data_no_transform = data.take(4).map(no_transformation).batch(4)
然后稍后:
if epoch < 1: ds = data_with_transformelse: ds = data_no_transformfor X_train, y_train in ds: train_step(X_train, y_train)
完整示例:
With transformation!With transformation!With transformation!With transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!No transformation!