如何在python中检查神经网络的层数,以及何时增加层数?

如何在python中检查神经网络的层数,以及何时增加层数?,python,tensorflow,machine-learning,keras,deep-learning,Python,Tensorflow,Machine Learning,Keras,Deep Learning,请对您的想法添加最低限度的评论,以便我可以改进我的查询。谢谢 我正在处理MNIST数据集,并编写一些CNN代码。然而,我对CNN的一些要点感到困惑。如何知道神经网络的层数?根据我目前的理解,我认为这有6层和4个隐藏层。是这样吗?如果我需要扩展到10层呢?怎么做 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, Conv2D, Dropout, Flatten, Ma

请对您的想法添加最低限度的评论,以便我可以改进我的查询。谢谢


我正在处理
MNIST
数据集,并编写一些
CNN
代码。然而,我对CNN的一些要点感到困惑。如何知道神经网络的层数?根据我目前的理解,我认为这有6层和4个隐藏层。是这样吗?如果我需要扩展到10层呢?怎么做

from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense, Conv2D, Dropout, Flatten, MaxPooling2D

model = Sequential()
model.add(Conv2D(28, kernel_size=(3,3), 
                    input_shape = ...))
model.add(MaxPooling2D(pool_size=(2,2)))
model.add(Flatten())
model.add(Dense(128, activation=tf.nn.relu))
model.add(Dropout(0.2))
model.add(Dense(10, activation=tf.nn.softmax))

在计算神经网络的层数时,我们通常只计算卷积层和完全连接层。池层和卷积层一起被计算为一个层,而退出是一种正则化技术,所以它也不会被计算为一个单独的层

作为参考,VGG16模式定义为16层模型。这16层只是卷积层和完全连接的致密层。如果您计算所有池和激活层,它将更改为41层模型,而实际情况并非如此。参考文献:

根据你的代码,你有3层(1个卷积层有28个神经元,1个完全连接层有128个神经元,1个完全连接层有10个神经元)


至于使其成为10层网络,您可以在输出层之前添加更多的卷积层或密集层,但对于MNIST数据集来说这是不必要的。

如果您打印模型的
.summary()
,您将得到

Model: "sequential_1"
_________________________________________________________________
Layer (type)                 Output Shape              Param #   
=================================================================
conv2d_1 (Conv2D)            (None, 26, 26, 28)        280       
_________________________________________________________________
max_pooling2d_1 (MaxPooling2 (None, 13, 13, 28)        0         
_________________________________________________________________
flatten_1 (Flatten)          (None, 4732)              0         
_________________________________________________________________
dense (Dense)                (None, 128)               605824    
_________________________________________________________________
dropout (Dropout)            (None, 128)               0         
_________________________________________________________________
dense_1 (Dense)              (None, 10)                1290      
=================================================================
Total params: 607,394
Trainable params: 607,394
Non-trainable params: 0

print(len(model.layers)) # 6
正如您所见,您构建了一个包含6层的深度神经网络-其中一些是
可训练的
层,一些是
不可训练的
层。因此,如果有人问你模型的层数,答案只会是6


还有,如何扩展或添加更多层。这很简单,就像往玻璃杯里加水一样。像这样

import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import (Dense, Conv2D, Dropout,
                                     Flatten, MaxPooling2D, BatchNormalization)

model = Sequential()
model.add(Conv2D(16, kernel_size=(3,3), 
                    input_shape = (28,28,1)))
model.add(Conv2D(32, kernel_size=(3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Conv2D(64, kernel_size=(3, 3), activation="relu"))
model.add(MaxPooling2D(pool_size=(2, 2)))
model.add(Flatten())
model.add(Dense(128, activation=tf.nn.relu))
model.add(BatchNormalization())
model.add(Dropout(0.2))
model.add(Dense(10, activation=tf.nn.softmax))

model.summary()
print(len(model.layers)) # 10
现在,注意这一点,尽管使用
tf。Kalas <代码>(或另一个框架,如<代码> PyPrase<代码>),我们可以很容易地做这些事情,但是我们应该考虑我们正在做什么和做什么。我不会对此做太多描述,因为这超出了这个问题的范围。但我强烈建议您检查
tf。keras
官方


术语隐藏层只是早期经常使用的命名约定(AFAIK),主要是在完全连接的层(在
CNN
之前)。这就是为什么为了简单起见,我会说,忘掉这个术语。我们应该将一个层称为
可培训的
不可培训的
,这现在更有意义了

在您的模型中,第一个
CNN
(可培训层),第二个
MaxPool2D
(不可培训),第三个
展平
(不可培训),第四个
密集
(可培训),第五个
辍学
(不可培训),最后是第六个
密集
(可培训)。您还可以在
模型中看到
Param#
列。summary()
,那些是不可训练层的人,他们的参数是零-该层中没有可训练变量。比如说,在您的模型中,第一层表示为

model.add(Conv2D(28, kernel_size=(3,3), 
                    input_shape = ...))
无论预期的
输入\u形状是什么
,在输入上通过
3 x 3
大小过滤器(总计
28
),然后进行卷积并生成一些特征图。因此,在这一层的末尾,我们将得到总共28个特征图。下一层

model.add(MaxPooling2D(pool_size=(2,2)))
这仅仅是将那些
28
特征映射的最大值汇集在一起,而不是别的。所以没有计算操作-这就是为什么不可训练的参数



隐藏层仅指在深层神经网络中位于输入层和输出层之间的层。但是在您的模型中,第一层是
Conv2D
,它是一个隐藏层,而不是输入层。这里,当我们将
input\u shape
参数传递给第一个
Conv2D
层时,输入层隐式存在。因此,如果我们具体采用隐藏层命名约定,我们可以说,在您的模型中,存在5隐藏层(从第一个
Conv2D
退出
)。输入层隐式存在,输出层是最后一个
密集的
层。

数据集中的
层数是什么意思?你能澄清一下吗?像输入层+隐藏层+输出层这样的层数数据集没有层,这就是为什么人们被你的问题弄糊涂了。哦,对不起。。我的意思是卷积网络的层数假设有人问我上面的模型有多少层,答案是什么?是6吗?谢谢,伙计。它真的很有用:)你说1个卷积层有28个神经元。。。但使用“展平”后,它不是变成了728[28*28]个神经元吗?@AntonyJoy卷积层仅由28个神经元组成,然后将其转换为一维数组,作为下一层的输入。@AntonyJoy如果你听说过VGG16模型,它被定义为16层模型。这16层只是卷积层和完全连接的致密层。如果您计算所有池和激活层,它将更改为41层模型,而实际情况并非如此。我附上一些链接供您参考。希望你能澄清这一点。非常感谢你,伊纳特先生:)。。。第一层是卷积层,第二层是maxpool,第三层是falten,等等,对吗?最大化池和展平层不是隐藏层吗?谢谢和问候:)更新了答案,请看。