首页 文章

卷积层减少了Keras的输出维数?

提问于
浏览
1

我正在尝试在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没有任何简单的关系 .

1 回答

  • 1

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

    • for th (Theano)图像排序您应该以以下格式提供数据:
    [batches, channels, image_width, image_weight]
    

    这是您认为正确的格式 .

    • for 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() 的结果来检查您的模型详细信息,以确保实际情况如此 .

相关问题