Python 使用model.fit with dataset作为类似超分辨率模型的输入时出错
我有下面的TF2.30代码。该模型与图像超分辨率相似。我有两个用于培训的数据集作为输入,分别用于验证。我想使用model.fit处理这些数据集Python 使用model.fit with dataset作为类似超分辨率模型的输入时出错,python,tensorflow,Python,Tensorflow,我有下面的TF2.30代码。该模型与图像超分辨率相似。我有两个用于培训的数据集作为输入,分别用于验证。我想使用model.fit处理这些数据集 import tensorflow as tf from tensorflow.keras.layers import Input, Conv2D, Add, Activation from tensorflow.keras.models import Model from tensorflow.keras import optimizers impor
import tensorflow as tf
from tensorflow.keras.layers import Input, Conv2D, Add, Activation
from tensorflow.keras.models import Model
from tensorflow.keras import optimizers
import pathlib
def build_model():
input_img = Input(shape=(48, 48, 1))
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal', activation='relu')(input_img)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal', activation='relu')(model)
model = Conv2D(64, (3, 3), padding='same', kernel_initializer='he_normal', activation='relu')(model)
model = Conv2D(1, (3, 3), padding='same', kernel_initializer='he_normal')(model)
res_img = model
output_img = Add()([res_img, input_img])
model = Model(inputs=input_img, outputs=output_img)
return model
def load_image(image_path):
image = tf.io.read_file(image_path)
image = tf.io.decode_png(image, channels=1)
image = tf.image.convert_image_dtype(image, dtype=tf.float32)
image -= 0.5
image /= 0.5
return image
def configure_for_performance(ds, batch_size):
ds = ds.cache()
ds = ds.shuffle(buffer_size=1000)
ds = ds.batch(batch_size)
ds = ds.prefetch(buffer_size=AUTOTUNE)
return ds
if __name__ == '__main__':
config = tf.compat.v1.ConfigProto(gpu_options= tf.compat.v1.GPUOptions(per_process_gpu_memory_fraction=0.8))
config.gpu_options.allow_growth = True
session = tf.compat.v1.Session(config=config)
tf.compat.v1.keras.backend.set_session(session)
print('start training...')
BATCH_SIZE = 64
model = build_model()
adam = optimizers.Adam(lr=1e-2)
model.compile(adam, loss='mse')
model.summary()
print('start training....')
data_orig = tf.data.Dataset.list_files(str('C:\\SRColor2\\data\\div2k\\train\\orig\\*.png'), shuffle=False)
data_pred = tf.data.Dataset.list_files(str('C:\\SRColor2\\data\\div2k\\train\\pred\\*.png'), shuffle=False)
valid_orig = tf.data.Dataset.list_files(str('C:\\SRColor2\\data\\div2k\\valid\\orig\\*.png'), shuffle=False)
valid_pred = tf.data.Dataset.list_files(str('C:\\SRColor2\\data\\div2k\\valid\\pred\\*.png'), shuffle=False)
AUTOTUNE = tf.data.experimental.AUTOTUNE
# Set `num_parallel_calls` so multiple images are loaded/processed in parallel.
data_orig = data_orig.map(load_image, num_parallel_calls=AUTOTUNE)
data_pred = data_pred.map(load_image, num_parallel_calls=AUTOTUNE)
valid_orig = valid_orig.map(load_image, num_parallel_calls=AUTOTUNE)
valid_pred = valid_pred.map(load_image, num_parallel_calls=AUTOTUNE)
data_orig = configure_for_performance(data_orig, 64)
data_pred = configure_for_performance(data_pred, 64)
valid_orig = configure_for_performance(valid_orig, 64)
valid_pred = configure_for_performance(valid_pred, 64)
model.fit((data_pred, data_orig),
epochs=40,
batch_size=64,
validation_data=(valid_pred, valid_orig))
print('end training')
print('training ended')
运行代码时出现以下错误:ValueError:y
将数据集用作输入时不支持参数
错误消息说明了一切。您可以尝试压缩数据集:
data_orig = data_orig.map(load_image, num_parallel_calls=AUTOTUNE)
data_pred = data_pred.map(load_image, num_parallel_calls=AUTOTUNE)
data_ds = tf.data.Dataset.zip((data_orig, data_pred))
data_ds = configure_for_performance(data_ds, 64)
错误消息说明了一切。您可以尝试压缩数据集:
data_orig = data_orig.map(load_image, num_parallel_calls=AUTOTUNE)
data_pred = data_pred.map(load_image, num_parallel_calls=AUTOTUNE)
data_ds = tf.data.Dataset.zip((data_orig, data_pred))
data_ds = configure_for_performance(data_ds, 64)
谢谢你的支持。另外,在做了必要的更改后,我发现运行时间比使用两个NumPy数组时要长。如何配置数据集以获得更高的性能?建议的解决方案有效。我说过,当使用从目录中读取文件的dataset变量时,运行时间会增加。我有什么解决方案来减少执行时间?我观察到,当所有数据都以numpy数组的形式加载到RAM内存中时,执行时间会缩短。你说在哪里?如果解决方案有效,就要接受它的投票。我唯一看到的提高速度的方法就是减少洗牌缓冲区的大小。谢谢你的支持。另外,在做了必要的更改后,我发现运行时间比使用两个NumPy数组时要长。如何配置数据集以获得更高的性能?建议的解决方案有效。我说过,当使用从目录中读取文件的dataset变量时,运行时间会增加。我有什么解决方案来减少执行时间?我观察到,当所有数据都以numpy数组的形式加载到RAM内存中时,执行时间会缩短。你说在哪里?如果解决方案有效,就要接受它的投票。我所看到的提高速度的唯一方法就是减少洗牌缓冲区的大小。