如何在灰度图像集上创建 Keras Conv2D 图层



>我创建了这个 NN

#Encoder
encoder_input = Input(shape=(1,height, width))
encoder_output = Conv2D(64, (3,3), activation='relu', padding='same', strides=2)(encoder_input)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(128, (3,3), activation='relu', padding='same', strides=2)(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same', strides=2)(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(512, (3,3), activation='relu', padding='same')(encoder_output)
encoder_output = Conv2D(256, (3,3), activation='relu', padding='same')(encoder_output)
#Decoder
decoder_output = Conv2D(128, (3,3), activation='relu', padding='same')(encoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(64, (3,3), activation='relu', padding='same')(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
decoder_output = Conv2D(32, (3,3), activation='relu', padding='same')(decoder_output)
decoder_output = Conv2D(16, (3,3), activation='relu', padding='same')(decoder_output)
decoder_output = Conv2D(2, (3, 3), activation='tanh', padding='same')(decoder_output)
decoder_output = UpSampling2D((2, 2))(decoder_output)
model = Model(inputs=encoder_input, outputs=decoder_output)
model.compile(optimizer='adam', loss='mse' , metrics=['accuracy'])
clean_images = model.fit(train_images,y_train_red, epochs=200)

和火车图像由

train_images = np.array([ImageOperation.resizeImage(cv2.imread(train_path + str(i) + ".jpg"), height, width) for i in
range(train_size)])
y_train_red = [img[:, :, 2]/255 for img in train_images]
train_images = np.array([ImageOperation.grayImg(item) for item in train_images])

当我执行代码时,我收到以下错误

检查输入时出错:预期input_1有 4 个维度,但得到形状为 (10、200、200( 的数组 怎么解决?

您的图像是 2D(高度 x 宽度(,而它需要 3D 图像。重塑图像以添加其他维度,例如,

train_images = train_images.reshape(train_size, height, width, 1)

正如文档所说:https://www.tensorflow.org/api_docs/python/tf/keras/layers/Conv2D

您需要 Conv2d 层的 4 维输入。 您必须在图像的 2 个主要尺寸之后或之前添加一个通道:

train_images = train_images.reshape(train_size, height, width, 1)

train_images = train_images.reshape(train_size, 1, height, width)

在这两种情况下,您都必须使用data_format="channels_first"data_format="channels_last"定义网络中每一层的输入艺术。

例如:

ncoder_output = Conv2D(64, (3,3), activation='relu', padding='same', strides=2, data_format="channels_last")(encoder_input)

最新更新