您能否为我和那些需要了解模型中不可训练参数的定义的人澄清?
例如,在构建自己的模型时,默认值为0,但是……
不可训练的参数是相当广泛的主题。一个简单的例子是考虑任何特定NN模型及其架构的情况。
假设我们已经在Keras中设置了您的网络定义,您的架构就像 256->500->500->1 。根据这个定义,我们似乎有一个回归模型(一个输出),有两个隐藏层(每个500个节点)和256个输入。
256->500->500->1
例如,模型的一个不可训练的参数是 的 隐藏层本身的数量 强> (2)。其他可能是 的 每个隐藏层上的节点 强> (在这种情况下为500),甚至每个单独层上的节点,每层给出一个参数加上层数本身。
这些参数是“不可训练的”,因为 你不能用你的训练数据来优化它的价值。 训练算法(如反向传播)将优化和更新 权重 您的网络,这是实际的可训练参数(通常是几千,取决于您的连接)。您的训练数据无法帮助您确定那些不可训练的参数。
的 然而, 强> 这并不意味着 numberHiddenLayers 根本不可训练,它只意味着 这个模型 而我们无法这样做。 的 我们可以做到 numberHiddenLayers 可训练 强> ;最简单的方法是定义 另一种ML算法 将此模型作为输入并使用多个值进行训练 numberHiddenLayers 。使用优于其他模型的模型获得最佳值,从而优化 numberHiddenLayers 变量。
numberHiddenLayers
换句话说,模型的不可训练参数是那些在训练期间不会更新和优化的参数,必须定义 先验 ,或作为输入传递。
其他答案没有涵盖一些细节。
在Keras,不可训练的参数是那些 的 不使用梯度下降训练 强> 。这也是由 trainable 每层中的参数,例如:
trainable
from keras.layers import * from keras.models import * model = Sequential() model.add(Dense(10, trainable=False, input_shape=(100,))) model.summary()
这将打印零可训练参数和1010个不可训练的参数。
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 10) 1010 ================================================================= Total params: 1,010 Trainable params: 0 Non-trainable params: 1,010 _________________________________________________________________
现在,如果您将图层设置为可训练的 model.layers[0].trainable = True 然后打印:
model.layers[0].trainable = True
_________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 10) 1010 ================================================================= Total params: 1,010 Trainable params: 1,010 Non-trainable params: 0 _________________________________________________________________
现在所有参数都是可训练的,并且没有不可训练的参数。但是也存在具有可训练和不可训练参数的层,一个例子是 BatchNormalization 层,其中存储激活的平均值和标准偏差以供测试时使用。一个例子:
BatchNormalization
model.add(BatchNormalization()) model.summary() _________________________________________________________________ Layer (type) Output Shape Param # ================================================================= dense_1 (Dense) (None, 10) 1010 _________________________________________________________________ batch_normalization_1 (Batch (None, 10) 40 ================================================================= Total params: 1,050 Trainable params: 1,030 Non-trainable params: 20 _________________________________________________________________
BatchNormalization的这种特殊情况总共有40个参数,20个可训练参数和20个不可训练参数。 20个不可训练的参数对应于在测试时间内使用的激活的计算平均值和标准偏差,并且这些参数将永远不能使用梯度下降来训练,并且不受 trainable 旗。
很明显,如果你冻结网络的任何一层。冻结层上的所有参数都变为不可训练的。另一方面,如果您从头开始设计网络,它也可能有一些不可训练的参数。例如,batchnormalization层有4个参数;
[gamma weights, beta weights, moving_mean, moving_variance]
前两个是可训练的,但最后两个不是。因此批量规范化层很可能是您的自定义网络具有不可训练的参数的原因。