GAN开发中TensorFlow数据集转换至[-1,1]区间报错如何解决
错误原因
tfds加载得到的Fashion MNIST原始图像为uint8数据类型(无符号8位整数,对应0~255的整数像素值),TensorFlow的减法算子不支持uint8类型张量与浮点数直接运算。
你测试时image / 255能正常运行,是因为除法算子会自动将整数类型张量提升为浮点类型后计算,但减法算子没有这个自动类型转换逻辑,因此直接对uint8类型的图像减浮点值127.5时,就会触发类型不匹配的报错。
正确实现方法
在做数值缩放前,手动将图像张量转换为浮点类型,再执行线性映射到[-1,1]区间的计算即可,修正后的代码如下:
import tensorflow as tf import tensorflow_datasets as tfds def scale_images(data): image = data['image'] # 将uint8格式转换为float32浮点格式 image = tf.cast(image, tf.float32) # 线性缩放至[-1, 1]区间,匹配生成器tanh层输出范围 return (image - 127.5) / 127.5 ds = tfds.load('fashion_mnist', split='train') ds = ds.map(scale_images)
效果验证
可以通过如下代码确认缩放后的像素范围是否符合预期:
# 抽取单个样本检查数值范围 for sample in ds.take(1): print(f"缩放后像素最小值:{tf.reduce_min(sample).numpy():.2f}") print(f"缩放后像素最大值:{tf.reduce_max(sample).numpy():.2f}")
运行后输出的最小值接近-1、最大值接近1,完全匹配GAN训练时判别器接收的输入数值范围要求。
内容的提问来源于stack exchange,提问作者Aditya Punetha
相关产品推荐
相关产品推荐

