如何在Keras Sequential API的CNN中添加数据增强与缩放层?
在Keras Sequential API中添加数据增强与Rescaling层的正确方式
你完全不需要单独添加Input层,只需要把数据增强、Rescaling层按顺序堆叠在卷积层之前,同时移除卷积层的input_shape定义,并在模型的第一个可指定输入形状的位置(要么模型初始化时,要么第一个预处理层)明确输入形状即可。以下是两种可行的实现方式:
方式一:在Sequential初始化时指定输入形状
image_size = (32, 32) # 独立定义数据增强序列 data_augmentation = keras.Sequential( [ layers.experimental.preprocessing.RandomFlip(), layers.experimental.preprocessing.RandomRotation(0.25), layers.experimental.preprocessing.RandomZoom(0.25), ] ) # 构建主模型 model_seq = tf.keras.models.Sequential( [ data_augmentation, layers.Rescaling(1. / 255), layers.Conv2D(32, 3, padding='valid', name='conv_1') ], input_shape=image_size + (3,) # 在这里统一指定输入形状 )
方式二:在第一个预处理层中指定输入形状
image_size = (32, 32) data_augmentation = keras.Sequential( [ layers.experimental.preprocessing.RandomFlip(), layers.experimental.preprocessing.RandomRotation(0.25), layers.experimental.preprocessing.RandomZoom(0.25), ] ) model_seq = tf.keras.models.Sequential([ data_augmentation, # 在Rescaling层指定输入形状 layers.Rescaling(1. / 255, input_shape=image_size + (3,)), layers.Conv2D(32, 3, padding='valid', name='conv_1') ])
关键说明
- Sequential是线性层堆叠结构,只要第一个层(或模型初始化时)明确了输入形状,后续所有层都会自动推断输入维度,无需重复指定。
- 你之前定义的独立数据增强序列可以直接作为一个完整的层加入主Sequential模型,无需拆分内部的翻转、旋转等操作。
内容的提问来源于stack exchange,提问作者Kaikus
相关产品推荐
相关产品推荐

