我正在尝试做一些数据增强。出于某种原因,我得到一个错误,当使用随机旋转数据集。如果我在不映射的情况下执行data_augmentation(),而只是在目标网络中执行,则代码可以正常工作。RandomFlip和RandomConstrast函数似乎工作得很好。
我很好奇为什么它不起作用,但我也很感激任何只是为了旋转的解决方案。
data_augmentation = tf.keras.Sequential([
# layers.experimental.preprocessing.RandomFlip("horizontal_and_vertical"),
# layers.experimental.preprocessing.RandomContrast(factor=0.1),
layers.experimental.preprocessing.RandomRotation(0.2)
])
def augmentation(image,label):
image=data_augmentation(image)
return image,label
ds_train = ds_train.cache()
ds_train= ds_train.map(augmentation,num_parallel_calls=AUTOTUNE)
回溯:
~AppDataRoamingPythonPython38site-packagestensorflowpythonautographimplapi.py in wrapper(*args, **kwargs)
693 except Exception as e: # pylint:disable=broad-except
694 if hasattr(e, 'ag_error_metadata'):
--> 695 raise e.ag_error_metadata.to_exception(e)
696 else:
697 raise
错误:
NotImplementedError: Cannot convert a symbolic Tensor (sequential_29/random_rotation_6/rotation_matrix/strided_slice:0) to a numpy array. This error may indicate that you're trying to pass a Tensor to a NumPy call, which is not supported
我仍然不知道为什么会发生错误,但是ImageDataGenerator提供了相同的功能,并且是使用数据增强的更流行的方式。
generator = tf.keras.preprocessing.image.ImageDataGenerator(
rotation_range=20,
width_shift_range=0.2,
height_shift_range=0.2,
shear_range=0.2,
zoom_range=0.2,
horizontal_flip=True,
vertical_flip=True,
fill_mode='nearest')
train_generator = generator.flow_from_directory(
"faces2",
subset="training",
seed=123,
batch_size=32,
save_to_dir="augmented"
)