Keras Sequential模型添加预处理层时功能异常问题咨询
Keras预处理层嵌套后随机旋转失效问题
复现流程
- 第一步:导入依赖、加载CIFAR10数据集并完成归一化、标签独热编码处理,构建包含
RandomRotation层的Sequential预处理模型DA,代码如下:
import tensorflow.keras as keras from keras.datasets import cifar10 from keras.models import Sequential from keras.layers import Dropout, RandomRotation from tensorflow.keras.utils import set_random_seed; set_random_seed(72) import matplotlib.pyplot as plt (ax, ay), (qx, qy) = cifar10.load_data() ay = keras.utils.to_categorical(ay, 10) qy = keras.utils.to_categorical(qy, 10) ax = ax.astype('float32'); ax /= 255 qx = qx.astype('float32'); qx /= 255 DA = Sequential([ RandomRotation( 180/360, fill_mode="nearest", interpolation="bilinear", input_shape=(32, 32, 3) ) ])
- 第二步:取数据集第一张原图展示,再调用
DA模型处理后展示结果,代码如下:
X = ax[0:1,:,:,:] plt.imshow(X[0]) plt.show() transformedX = DA(X).numpy() plt.imshow(transformedX[0,:,:,:]) plt.show()
该阶段运行结果符合预期,图像成功添加随机旋转效果。
- 第三步:将
DA模型作为层加入新的Sequential模型,新模型仅包含DA和Dropout(0.25)两层,代码如下:
model = Sequential() model.add(DA) model.add(Dropout(0.25))
- 第四步:全程不调用新创建的
model,完全复用第二步的代码再次展示原图和DA处理后的输出。
该阶段出现异常:DA输出的图像和原图完全一致,没有任何随机旋转效果。
额外观测现象
- 本地Spyder环境、Google Colab环境均可稳定复现该问题。
- 问题触发后,后续重复运行代码,
DA层始终输出原图,仅在Colab中重启实例后运行可再次复现完整流程;本地环境执行%reset命令无法重置状态复现问题。 - 若移除
RandomRotation层中input_shape=(32, 32, 3)的配置,该问题不会出现,但常规认知中Keras Sequential模型的首层需要指定input_shape参数。
待确认问题
- 该现象是Keras/TensorFlow框架本身的原生Bug,还是代码编写存在不符合框架规范的错误?
- 若属于框架Bug,是否为特定旧版本Keras/TensorFlow独有的问题?
内容的提问来源于stack exchange,提问作者Ricardo
相关产品推荐
相关产品推荐

