The*_*Who 15 theano deep-learning caffe keras tensorflow
您能否为我和那些需要了解模型中不可训练参数的定义的人澄清?
例如,在构建自己的模型时,默认值为0,但是当您想要使用初始模型时,它会成为别的而不是0.它背后的原因是什么?
非常感谢您提前澄清.
Dan*_*ler 19
在keras中,不可训练的参数(如图所示model.summary())表示在使用反向传播训练期间未更新的权重数.
主要有两种不可训练的重量:
权重是执行操作的网络内部的值,可以调整以产生我们想要的结果.反向传播算法在最后将权重改变为较低的误差.
默认情况下,keras模型中的所有权重都是可训练的.
当你创建图层时,它会在内部创建自己的权重,并且它们是可训练的.(反向传播算法将更新这些权重)
当你使它们无法处理时,算法将不再更新这些权重.例如,当您需要具有特定滤波器的卷积层(例如Sobel滤波器)时,这很有用.您不希望训练更改此操作,因此这些权重/过滤器应保持不变.
还有很多其他原因可能导致您无法使重量无法实现.
更改参数:
为了确定权重是否可训练,您可以从模型中获取图层并设置trainable:
model.get_layer(layerName).trainable = False #or True
Run Code Online (Sandbox Code Playgroud)
这必须在编译之前完成.
Dar*_*nus 14
不可训练的参数是相当广泛的主题.一个简单的例子是考虑任何特定NN模型及其架构的情况.
假设我们已经在Keras中设置了您的网络定义,您的架构就像256->500->500->1.根据这个定义,我们似乎有一个回归模型(一个输出),有两个隐藏层(每个500个节点)和256个输入.
例如,模型的一个不可训练的参数是隐藏层本身的数量(2).其他可能是每个隐藏层上的节点(在这种情况下为500),甚至是每个单独层上的节点,每层提供一个参数加上层数本身.
这些参数是"不可训练的",因为您无法使用训练数据优化其值.训练算法(如反向传播)将优化和更新网络的权重,这是这里的实际可训练参数(通常为几千,取决于您的连接).您的训练数据无法帮助您确定那些不可训练的参数.
然而,这并不意味着numberHiddenLayers根本不可训练,它只意味着在这个模型及其实现中我们无法这样做.我们可以numberHiddenLayers训练 ; 最简单的方法是定义另一个ML算法,该算法将此模型作为输入并使用多个值进行训练numberHiddenLayers.使用优于其他模型的模型获得最佳值,从而优化numberHiddenLayers变量.
换句话说,模型的不可训练参数是那些在训练期间不会更新和优化的参数,必须先验地定义或作为输入传递.
还有一些其他答案未涵盖的细节。
在Keras中,不可训练参数是未使用梯度下降训练的参数。这也由trainable每一层中的参数控制,例如:
from keras.layers import *
from keras.models import *
model = Sequential()
model.add(Dense(10, trainable=False, input_shape=(100,)))
model.summary()
Run Code Online (Sandbox Code Playgroud)
这将打印零个可训练参数和1010个不可训练参数。
_________________________________________________________________
Layer (type) Output Shape Param #
=================================================================
dense_1 (Dense) (None, 10) 1010
=================================================================
Total params: 1,010
Trainable params: 0
Non-trainable params: 1,010
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
现在,如果将图层设置为可训练,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
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
现在所有参数都是可训练的,并且不可训练参数为零。但是也有一些层同时具有可训练和不可训练的参数,一个例子是该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
_________________________________________________________________
Run Code Online (Sandbox Code Playgroud)
BatchNormalization的这种特定情况共有40个参数,20个可训练参数和20个不可训练参数。这20个不可训练的参数对应于在测试时间内使用的计算的激活平均值和标准偏差,并且这些参数在使用梯度下降时将永远不可训练,并且不受trainable标记影响。
| 归档时间: |
|
| 查看次数: |
9700 次 |
| 最近记录: |