python - 如何匹配 Conv2D AutoEncoder 的输入和输出形状
问题描述
有一组具有以下形状的黑白图像(1000, 11, 1)
。我正在尝试修改keras mnist 示例以使用我的数据,因此我编写了以下代码:
input_img = layers.Input(shape=(1000, 11, 1))
x = layers.Conv2D(16, (3, 3), activation='relu', padding='same')(input_img)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
encoded = layers.MaxPooling2D((2, 2), padding='same')(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(encoded)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(8, (3, 3), activation='relu', padding='same')(x)
x = layers.UpSampling2D((2, 2))(x)
x = layers.Conv2D(16, (3, 3), activation='relu')(x)
x = layers.UpSampling2D((2, 2))(x)
decoded = layers.Conv2D(1, (3, 3), activation='sigmoid', padding='same')(x)
autoencoder = Model(input_img, decoded)
autoencoder.compile(optimizer='adam', loss='binary_crossentropy')
打印摘要,我可以看到输出形状与输入形状不同:
Model: "model_16"
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
input_18 (InputLayer) [(None, 1000, 11, 1)] 0
_________________________________________________________________
conv2d_119 (Conv2D) (None, 1000, 11, 16) 160
_________________________________________________________________
max_pooling2d_51 (MaxPooling (None, 500, 6, 16) 0
_________________________________________________________________
conv2d_120 (Conv2D) (None, 500, 6, 8) 1160
_________________________________________________________________
max_pooling2d_52 (MaxPooling (None, 250, 3, 8) 0
_________________________________________________________________
conv2d_121 (Conv2D) (None, 250, 3, 8) 584
_________________________________________________________________
max_pooling2d_53 (MaxPooling (None, 125, 2, 8) 0
_________________________________________________________________
conv2d_122 (Conv2D) (None, 125, 2, 8) 584
_________________________________________________________________
up_sampling2d_51 (UpSampling (None, 250, 4, 8) 0
_________________________________________________________________
conv2d_123 (Conv2D) (None, 250, 4, 8) 584
_________________________________________________________________
up_sampling2d_52 (UpSampling (None, 500, 8, 8) 0
_________________________________________________________________
conv2d_124 (Conv2D) (None, 498, 6, 16) 1168
_________________________________________________________________
up_sampling2d_53 (UpSampling (None, 996, 12, 16) 0
_________________________________________________________________
conv2d_125 (Conv2D) (None, 996, 12, 1) 145
=================================================================
Total params: 4,385
Trainable params: 4,385
Non-trainable params: 0
_________________________________________________________________
事实上,训练失败并出现错误:
ValueError: logits and labels must have the same shape ((None, 996, 12, 1) vs (None, 1000, 11, 1))
我究竟做错了什么?如何修复我的代码以使用我的图像尺寸?
解决方案
推荐阅读
- sql - 使用 sequelize & node.js 生成将忽略 where 子句的 SQL 查询
- html - 列表元素在查看源中但不在检查模式下也不在页面上可见?
- android - 为什么opencv的降噪功能不起作用
- mysql - 获取最小值的 id,按另一列分组
- javascript - 调整剑道项目的大小
- node.js - 无法使用 NPM 安装“discord-music-bot”
- python - 未定义值的默认 Python 枚举
- reactjs - React 路由器,如何在布局中渲染组件(相对于独立)
- firebase - 欧盟申请的 Firebase 位置最佳做法
- javascript - 为什么 React.DOM 未定义?