在Keras中加载权重后添加DropOut

问题描述 投票:0回答:1

我是转学习之王。我所做的是首先使用大数据集训练模型并保存权重。然后我通过冻结图层来训练模型和我的数据集。但我发现有一些过度拟合。因此,我尝试更改模型的丢失并加载权重,因为数字正在变化而辍学正在发生变化。我发现改变辍学的困难。

直接我的问题是,是否有可能在加载权重时更改模型的丢失?

我的情景1就是这样

  1. 模型定义。
  2. 训练模型。
  3. 项目清单
  4. 保存重量。
  5. ...
  6. 重新定义辍学者其他人在模型中没有改变
  7. 加载重量。我收到了错误。

第二种情景

  1. model1定义。
  2. 训练模型。
  3. 保存重量
  4. 将模型权重加载到模型1
  5. ....
  6. 通过改变辍学来定义model2。
  7. 尝试使用for循环将模型1的权重​​设置为模型2,除了丢失层。我收到了一个错误。

这是我得到的错误。

 File "/home/sathiyakugan/PycharmProjects/internal-apps/apps/support-tools/EscalationApp/LSTM_Attention_IMDB_New_open.py", line 343, in <module>
    NewModel.layers[i].set_weights(layer.get_weights())
  File "/home/sathiyakugan/PycharmProjects/Python/venv/lib/python3.5/site-packages/keras/engine/base_layer.py", line 1062, in set_weights
    str(weights)[:50] + '...')
ValueError: You called `set_weights(weights)` on layer "lstm_5" with a  weight list of length 1, but the layer was expecting 3 weights. Provided weights: [array([[ 0.      ,  0.      ,  0.      , ...,  0....

什么是正确的方法?由于我是Keras的新手,我正在努力走得更远。

python tensorflow keras nlp transfer
1个回答
1
投票

我建议你使用model.load_weights("weights_file.h5")函数加载权重,然后尝试以下方法:

for layer in model.layers:
    if hasattr(layer, 'rate'):
        layer.rate = 0.5

由于只有Dropout图层具有rate属性,因此当您找到具有此属性的图层时,您可以对其进行修改。这里我使用0.5作为Dropout概率,你可以把你想要的值。

编辑:如果你逐层设置权重,你可以通过图层聚合上面的qazxsw poo你qazxsw poi

重要提示:在此之后,您必须再次编译模型:

if

同样,此处传递的参数仅用于示例目的,因此请根据您的问题进行相应更改

© www.soinside.com 2019 - 2024. All rights reserved.