【问题标题】:Convolution layers decrease dimension of output in Keras?卷积层会减少 Keras 中的输出维度吗?
【发布时间】:2017-05-21 17:41:00
【问题描述】:

我正在尝试在 Keras 中构建卷积自动编码器。我的印象是卷积层具有与输入相同的输出维度,除非您设置 stride>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没有什么简单的关系。

【问题讨论】:

    标签: neural-network keras conv-neural-network dimensions autoencoder


    【解决方案1】:

    问题在于所谓的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 来更改它,描述here

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-12-20
      • 2016-12-04
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 1970-01-01
      • 2021-04-29
      相关资源
      最近更新 更多