简介
在这个Keras教程中,我们将学习Keras密集层,这是神经网络中广泛使用的层之一。我们将对其语法进行详细解释,并向你展示实例,以便你更好地理解Keras密集层。
什么是神经网络中的密集层?
密集层是一个深度连接的神经网络层,这意味着密集层中的每个神经元都会接受其上一层所有神经元的输入。密集层被发现是模型中最常用的层。
在后台,密集层执行矩阵-向量乘法。矩阵中使用的值实际上是参数,可以在反向传播的帮助下进行训练和更新。
密集层产生的输出是一个'm'维向量。因此,密集层基本上用于改变向量的维度。密集层还对向量进行旋转、缩放、平移等操作。
语法
keras.layer.Dense(units, activation=None, use_bias=True, kernel_initializer='glorot_uniform', bias_initializer='zeros', kernel_regularizer=None, bias_regularizer=None, activity_regularizer=None, kernel_constraint=None, bias_constraint=None)
Keras密集层的参数
让我们看看Keras的密集层功能的不同参数,如下所示
- 单位 units
所有参数中最基本的参数,它使用正整数作为它的值,表示层的输出大小。
单位参数本身对权重矩阵的大小和偏置矢量起着重要作用。
-
激活 activation
激活参数有助于在密集层中应用逐元激活函数。默认情况下,使用线性激活,但我们可以改变并切换到Keras为此提供的许多选项中的任何一个。 -
使用偏置
另一个直接的参数,use_bias有助于决定我们是否应该为计算目的包含一个偏置向量。默认情况下,use_bias被设置为true。 -
初始化器
顾名思义,初始化器参数用于提供关于层中的值将如何被初始化的输入。在密集层的情况下,权重矩阵和偏置向量必须被初始化。 -
正则器
正则器包含三个参数,对模型进行正则化或惩罚。一般来说,这些参数并不经常使用,但它们可以帮助模型的泛化。 -
约束条件
这最后一个参数决定了对权重矩阵或偏置向量的取值限制。
Keras密集层操作
Keras的密集层功能实现了以下操作-- 1.
代码块
output = activation(dot(input, kernel) + bias)
在上面的公式中,激活用于执行逐元激活,内核是该层创建的权重矩阵,而偏置是该层创建的偏置向量。
Keras在输出层的密集层执行输入张量和权重内核矩阵的点乘。
一个偏向向量被添加,并对输出值进行元素激活。
Keras致密层实例
我们将向你展示两个Keras密集层的例子,第一个例子将向你展示如何建立一个具有单个密集层的神经网络,第二个例子将解释具有多个密集层的神经网络设计。
- 用Keras致密层构建浅层神经网络
现在让我们看看如何建立一个具有单一密集层的Keras模型。在这里,我们使用内置的Keras模型,即序列。
首先,我们向模型提供输入层,然后添加一个密集层和ReLU激活。
输出层也包含一个密集层,然后我们看一下这个模型的输出的形状。
in [1]
import tensorflow as tf
# Create a `Sequential` model and add a Dense layer as the first layer.
model = tf.keras.models.Sequential()
model.add(tf.keras.Input(shape=(16,)))
model.add(tf.keras.layers.Dense(32, activation='relu'))
# Now the model will take as input arrays of shape (None, 16)
# and output arrays of shape (None, 32).
# Note that after the first layer, you don't need to specify
# the size of the input anymore:
model.add(tf.keras.layers.Dense(32))
model.output_shape
Output:
(None, 32)
在这个例子中,我们看了一个在深度神经网络中使用多个隐藏层的模型。这里我们在隐藏密集层的神经元中使用ReLu激活函数。
请记住,人们还不能找到模型的权重和摘要,首先要提供模型的输入数据,然后我们看一下模型中存在的权重。
最后,模型摘要显示了输入层的信息,输出层的形状,以及参数的总数量。
in [2]
from keras.models import Sequential
from keras.layers import Dense
model = Sequential(
[
Dense(5, activation="relu"),
Dense(10, activation="relu"),
Dense(15),
]
) # No weights to be addded here
# Here we cannot check for weights
# model.weights
# Neither we can look at the summary
# model.summary()
# First we must call the model and evaluate it on test data
x = tf.ones((5, 20))
y = model(x)
print("Number of weights after calling the model:", len(model.weights))
Output:
Number of weights after calling the model: 6
In [3]:
# Looking at the Summary of the Model
model.summary()
Output:
Model: "sequential_2"
____________________________________________
Layer (type) Output Shape Param #
===========================================
dense_4 (Dense) (5, 5) 105
_____________________________________________
dense_5 (Dense) (5, 10) 60
______________________________________________
dense_6 (Dense) (5, 15) 165
===========================================
Total params: 330
Trainable params: 330
Non-trainable params: 0
____________________________________________
结语
我们已经到了这个Keras教程的结尾,在这里我们学习了Keras的密集层。我们研究了密集层的运作方式,也了解了密集层的功能及其参数。我们还对单隐层和多隐层的神经网络模型的功能差异做了一些说明。
网友评论