我编写了一个自定义 keras 回调来检查来自生成器的增强数据。(有关完整代码,请参阅此答案。)但是,当我尝试对 a 使用相同的回调时tf.data.Dataset
,它给了我一个错误:
File "/path/to/tensorflow_image_callback.py", line 16, in on_batch_end
imgs = self.train[batch][images_or_labels]
TypeError: 'PrefetchDataset' object is not subscriptable
keras 回调一般只适用于生成器,还是与我编写的方式有关?有没有办法修改我的回调或数据集以使其工作?
我认为这个难题有三个部分。我对任何和所有的更改持开放态度。首先,自定义回调类中的init函数:
class TensorBoardImage(tf.keras.callbacks.Callback):
def __init__(self, logdir, train, validation=None):
super(TensorBoardImage, self).__init__()
self.logdir = logdir
self.file_writer = tf.summary.create_file_writer(logdir)
self.train = train
self.validation = validation
其次,on_batch_end
同一类中的功能
def on_batch_end(self, batch, logs):
images_or_labels = 0 #0=images, 1=labels
imgs = self.train[batch][images_or_labels]
三、实例化回调
import tensorflow_image_callback
tensorboard_image_callback = tensorflow_image_callback.TensorBoardImage(logdir=tensorboard_log_dir, train=train_dataset, validation=valid_dataset)
model.fit(train_dataset,
epochs=n_epochs,
validation_data=valid_dataset,
callbacks=[
tensorboard_callback,
tensorboard_image_callback
])
一些尚未让我得到答案的相关主题: