我想尝试使用AlexNet CNN进行黑白图像实验,我知道在AlexNet实验中通常使用具有3个颜色通道的RGB图像,而我将要进行的实验只有1个颜色通道。我在设计用于黑白图像的AlexNet架构时仍然感到困惑。下面是AlexNet架构的一个例子。
问题是,我能否让架构看起来像示例图像,但使用黑白图像而不是RGB图像?
回答:
你只需要更改输入维度。黑白图像只有一个通道,而不是三个。这里是完全适配的模型
image_dim = (224,224,1) # 黑白图像n_classes = 10model = Sequential()# 第1个卷积层model.add(Conv2D(filters=96, input_shape=image_dim, kernel_size=(11,11), strides=(4,4), padding="valid"))model.add(Activation("relu"))# 最大池化model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="valid"))# 第2个卷积层model.add(Conv2D(filters=256, kernel_size=(11,11), strides=(1,1), padding="valid"))model.add(Activation("relu"))# 最大池化model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="valid"))# 第3个卷积层model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding="valid"))model.add(Activation("relu"))# 第4个卷积层model.add(Conv2D(filters=384, kernel_size=(3,3), strides=(1,1), padding="valid"))model.add(Activation("relu"))# 第5个卷积层model.add(Conv2D(filters=256, kernel_size=(3,3), strides=(1,1), padding="valid"))model.add(Activation("relu"))# 最大池化model.add(MaxPooling2D(pool_size=(2,2), strides=(2,2), padding="valid"))# 传递到全连接层model.add(Flatten())# 第1个全连接层model.add(Dense(4096))model.add(Activation("relu"))# 添加Dropout以防止过拟合model.add(Dropout(0.4))# 第2个全连接层model.add(Dense(4096))model.add(Activation("relu"))# 添加Dropoutmodel.add(Dropout(0.4))# 第3个全连接层model.add(Dense(1000))model.add(Activation("relu"))# 添加Dropoutmodel.add(Dropout(0.4))# 输出层model.add(Dense(n_classes))model.add(Activation("softmax"))# 编译模型model.compile(loss="categorical_crossentropy", optimizer="adam", metrics="accuracy")model.summary()