我正在做转学之王。我要做的是,首先使用大数据集训练模型并保存权重。然后,通过冻结图层,用数据集训练模型。但是我看到有些过拟合。因此,我尝试更改模型的缺失并加载权重,因为数字在变化,而缺失在变化。我发现很难更改辍学率。
我的直接问题是,加载权重时是否可以更改模型的辍学?
我的情况1就是这样
...
定义模型中其他未更改的辍学
第二种情况
model1已定义。
训练模型。
节省权重
将model1权重加载到model1
....
model2。
尝试使用for循环将model1的权重设置为model 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的新手,所以我努力走得更远。
答案 0 :(得分:1)
我建议您使用函数model.load_weights("weights_file.h5")
加载权重,然后尝试以下操作:
for layer in model.layers:
if hasattr(layer, 'rate'):
layer.rate = 0.5
由于仅Dropout图层具有属性rate
,因此当您找到具有此属性的图层时,可以对其进行更改。在这里,我使用0.5作为辍学概率,您可以输入所需的值。
编辑:如果您要逐层设置权重,则可以将if
中的for
汇总到各个层中
重要:此后,您必须再次编译模型:
from keras.optimizers import SGD
model.compile(optimizer=SGD(lr=1e-3, momentum=0.9), loss='categorical_crossentropy', metrics=['accuracy'])
同样,此处传递的参数仅出于示例目的,因此请根据您的问题进行相应的更改