tf.data.Dataset映射预处理未生效,为何始终显示同一张图像?
问题分析与解决
核心原因1:仅使用了1个训练样本
你构建数据集时只取了data_train[0:1]和labels_train[0:1],这意味着整个数据集只有1张图像。不管后续做多少次shuffle、随机增强,最终能显示的始终是这张图,自然看不出变化。
核心原因2:随机增强的参数设置几乎无视觉差异
你设置的随机对比度范围是0.99到0.999,这个区间的对比度调整幅度极小,肉眼几乎无法分辨出前后差异,就算增强生效了也看不出来。
额外优化点:数据处理顺序建议
当前代码先做batch(64)再做随机增强,虽然对单样本场景无影响,但常规做法是先做随机数据增强,再进行batch操作,这样能确保每个样本独立被随机处理:
train_dataset = (tf.data.Dataset.from_tensor_slices((data_train, labels_train)) # 取全部样本 .shuffle(len(data_train)) # 用数据集长度作为shuffle缓冲区大小 .map(lambda x,y: (tf.cast(x, tf.float32), y)) .map(lambda x,y: (tf.image.random_flip_left_right(x), y)) .map(lambda x,y: (tf.image.random_contrast(x, 0.5, 1.5), y)) # 扩大对比度范围 .map(lambda x,y: (tf.clip_by_value(x, 0., 255.)/255., y)) .batch(64) .prefetch(10))
验证方法
修改后可以多次迭代数据集查看效果:
for _ in range(3): for x,y in train_dataset.take(1): plt.imshow(x[0]) plt.show()
每次显示的同一张原始样本的增强版本会有明显差异,证明增强生效。
内容的提问来源于stack exchange,提问作者Alberto
相关产品推荐
相关产品推荐

