【问题标题】:How many hidden layers a CNN has?CNN 有多少个隐藏层?
【发布时间】:2020-07-20 20:38:00
【问题描述】:

我使用 CNN 来解决分类问题。模型架构代码如下:

model.add(Conv1D(256, 5,padding='same',
                 input_shape=(40,1)))
model.add(Activation('relu'))
model.add(Conv1D(128, 5,padding='same'))
model.add(Activation('relu'))
model.add(Dropout(0.1))
model.add(MaxPooling1D(pool_size=(8)))
model.add(Conv1D(128, 5,padding='same',))
model.add(Activation('relu'))
model.add(Conv1D(128, 5,padding='same',))
model.add(Activation('relu'))
model.add(Flatten())
model.add(Dense(8))
model.add(Activation('softmax'))
opt = keras.optimizers.rmsprop(lr=0.00001, decay=1e-6)


这个模型有多少隐藏层?还有哪个是输出层和输入层?

【问题讨论】:

  • 我相信每个 .add 函数都被认为是一个输入层,除了最后一个(激活)。但是,这个问题并不一定属于堆栈溢出。请在此处考虑此链接tutorialspoint.com/keras/keras_layers.htm

标签: python tensorflow keras layer conv-neural-network


【解决方案1】:

第一层是输入层,最后一层是输出层。介于这两者之间的是隐藏层。

model.add(Conv1D(256, 5,padding='same', input_shape=(40,1))) # input layer
model.add(Activation('relu')) # hidden layer
model.add(Conv1D(128, 5,padding='same')) # hidden layer
model.add(Activation('relu')) # hidden layer
model.add(Dropout(0.1)) # hidden layer
model.add(MaxPooling1D(pool_size=(8))) # hidden layer
model.add(Conv1D(128, 5,padding='same',)) # hidden layer 
model.add(Activation('relu')) # hidden layer
model.add(Conv1D(128, 5,padding='same',)) #hidden layer
model.add(Activation('relu')) # hidden layer
model.add(Flatten()) # hidden layer
model.add(Dense(8)) # hidden layer
model.add(Activation('softmax')) # output layer
opt = keras.optimizers.rmsprop(lr=0.00001, decay=1e-6)

【讨论】:

    【解决方案2】:

    输入层是第一层(指定 input_shape 的层)。每次使用 model.add 时都会创建一个新层。您可以使用 model.summary() 打印出您的模型层结构,如下所示。

    Model: "sequential_8"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    conv1d_20 (Conv1D)           (None, 40, 256)           1536      
    _________________________________________________________________
    activation_23 (Activation)   (None, 40, 256)           0         
    _________________________________________________________________
    conv1d_21 (Conv1D)           (None, 40, 128)           163968    
    _________________________________________________________________
    activation_24 (Activation)   (None, 40, 128)           0         
    _________________________________________________________________
    dropout_6 (Dropout)          (None, 40, 128)           0         
    _________________________________________________________________
    max_pooling1d_4 (MaxPooling1 (None, 5, 128)            0         
    _________________________________________________________________
    conv1d_22 (Conv1D)           (None, 5, 128)            82048     
    _________________________________________________________________
    activation_25 (Activation)   (None, 5, 128)            0         
    _________________________________________________________________
    conv1d_23 (Conv1D)           (None, 5, 128)            82048     
    _________________________________________________________________
    activation_26 (Activation)   (None, 5, 128)            0         
    _________________________________________________________________
    flatten_3 (Flatten)          (None, 640)               0         
    _________________________________________________________________
    dense_3 (Dense)              (None, 8)                 5128      
    _________________________________________________________________
    activation_27 (Activation)   (None, 8)                 0         
    =================================================================
    Total params: 334,728
    Trainable params: 334,728
    Non-trainable params: 0  
    

    这可能有点令人困惑,因为您的实际输出层是具有 8 个节点和 softmax 激活函数的层。我更喜欢按如下方式创建模型

    inputs = tf.keras.Input(shape=(40,1))
    x = tf.keras.layers.Conv1D(256, 5,padding='same', activation='relu')(inputs)
    x=Dropout(.1)(x)
    x=MaxPooling1D(pool_size=(8))(x)
    x=Conv1D(128, 5,padding='same', activation='relu')(x)
    x=Conv1D(128, 5,padding='same', activation='relu')(x)
    x=Conv1D(128, 5,padding='same', activation='relu')(x)
    x=Flatten()(x)
    outputs=Dense(8, activation='softmax')(x)
    model = tf.keras.Model(inputs=inputs, outputs=outputs)
    
    It is the exact same model but I think it is clearer as to what layer is the actual output
    See result below for model.summary()
    
    > Blockquote
    Model: "model_6"
    _________________________________________________________________
    Layer (type)                 Output Shape              Param #   
    =================================================================
    input_9 (InputLayer)         [(None, 40, 1)]           0         
    _________________________________________________________________
    conv1d_44 (Conv1D)           (None, 40, 256)           1536      
    _________________________________________________________________
    dropout_15 (Dropout)         (None, 40, 256)           0         
    _________________________________________________________________
    max_pooling1d_12 (MaxPooling (None, 5, 256)            0         
    _________________________________________________________________
    conv1d_45 (Conv1D)           (None, 5, 128)            163968    
    _________________________________________________________________
    conv1d_46 (Conv1D)           (None, 5, 128)            82048     
    _________________________________________________________________
    conv1d_47 (Conv1D)           (None, 5, 128)            82048     
    _________________________________________________________________
    flatten_11 (Flatten)         (None, 640)               0         
    _________________________________________________________________
    dense_12 (Dense)             (None, 8)                 5128      
    =================================================================
    Total params: 334,728
    Trainable params: 334,728
    Non-trainable params: 0
    
    

    【讨论】:

    • 谢谢!那么这个模型有多少隐藏层呢?
    • 也输入层是第一个卷积层?还是它们是不同的层?
    • 输入层是单独的层而不是卷积层
    猜你喜欢
    • 1970-01-01
    • 2019-02-15
    • 1970-01-01
    • 2019-09-25
    • 2019-01-27
    • 2021-08-17
    • 2015-10-14
    • 2020-12-06
    • 1970-01-01
    相关资源
    最近更新 更多