在转换层后添加密集

时间:2018-08-27 07:18:38

标签: keras keras-layer

var delay: Double = 0
while delay < 100 {
        DispatchQueue.main.asyncAfter(deadline: .now() + delay) { // change 2 to desired number of seconds
            // do stuff
        }
        int += 1
}

在转换之后,我想添加一个密集的内容,如下所示:

import keras.layers as KL
input_image = KL.Input([None, None, 3], name = 'input_image')
x = KL.Conv2D(64, (3,3), padding='same')(input_image)

但会出现错误:

  

ValueError:“平面”输入的形状未完全定义   (获得(无,无,64)。确保传递完整的“ input_shape”或   模型中第一层的参数“ batch_input_shape”。

因此,如果我想要一个包含conv并紧随其后且可以接受任何大小的输入的密集模型,该怎么办?

3 个答案:

答案 0 :(得分:1)

要构建CNN模型,您应该使用池化层,然后使用平坦化层,如下面的示例所示。

池化层将减少卷积网络中要分析的数据量,然后我们使用Flatten将数据作为密集层的“常规”输入< / strong>。而且,在卷积层之后,我们总是添加一个池化层。

下面的示例适用于 1D CNN ,但结构与2D相同。再次,Flatten()更改输出的形状以在最后一个Dense层中正确使用。

    model = Sequential()
    model.add(Conv1D(num_filters_to_use, (filters_size_tuple), input_shape=features_array_shape, activation='relu'))
    model.add(MaxPooling1D(pool_size=2))
    model.add(Flatten())
    model.add(Dropout(0.5))
    model.add(Dense(num_classes, activation='softmax'))

答案 1 :(得分:0)

神经网络不适用于可变大小的输入。除非您要处理递归神经网络。

对于输入大小可变的网络,网络的权重是什么样的?

通常,您将为输入图层选择一个大小,然后调整大小或填充输入以匹配该大小。

答案 2 :(得分:0)

尽管这与拼合输入不同,但可以使用Global Max Pooling

 x = KL.GlobalMaxPooling2D()(x)

这会将您的尺寸从(None, None, None 64)更改为(None, 64)(包括批次尺寸)。全局最大池化是关闭抽风网络并将输出馈送到密集神经网络的一种常用方法。