卷积层会降低 Keras 中输出的维度



我正在尝试在 Keras 中构建一个卷积自动编码器。我的印象是卷积层与输入具有相同的输出维度,除非您设置步幅>1或设置border_mode='valid'。这是我的网络

from keras.layers import Convolution2D, MaxPooling2D, UpSampling2D, Activation
from keras.models import Model, Sequential
model = Sequential()
model.add(Convolution2D(16, 3, 3, border_mode='same', input_shape=(1, 1920, 1080)))
model.add(Activation('relu'))
model.add(MaxPooling2D((2, 2), border_mode='same'))
model.add(Convolution2D(8, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(UpSampling2D((2, 2)))
model.add(Convolution2D(8, 3, 3, border_mode='same'))
model.add(Activation('relu'))
model.add(UpSampling2D((2, 2)))
model.compile(optimizer='adadelta', loss='binary_crossentropy')

当我检查查看第一层的输出尺寸时,似乎 y 坐标的长度已减小。

>>>model.layers[0].output_shape
(None, 1, 1920, 16)

这是什么原因造成的?我不知道那16是从哪里来的。它似乎与1080没有任何简单的关系。

问题出在所谓的image_ordering .根据您使用的后端 - 您需要以指定的格式提供数据:

  • 对于th(Theano)图像排序,您应该以以下格式提供数据:

    [batches, channels, image_width, image_weight]
    

    这是您假设正确的格式。

  • 对于tf(TensorFlow),图像排序为:

     [batches, width, height, channels]
    

    这是您的 Keras 安装解释您的输入的一种格式。

keras 中的默认图像排序是tf,我假设这导致了您的问题。您可以通过以下命令检查图像顺序:

from keras.backend import image_dim_ordering
print image_dim_ordering() # Assuming that you're using a Python 2.*

您可以通过更改此处描述的内容keras.json来更改它。

您还可以通过打印model.summary()的结果来检查您的模型详细信息,以确保自己确实如此。

相关内容

  • 没有找到相关文章

最新更新