如何在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,等等,对吗?最大化池和展平层不是隐藏层吗?谢谢和问候:)更新了答案,请看。