Добавьте DropOut после загрузки весов в Керас - PullRequest
0 голосов
/ 06 сентября 2018

Я занимаюсь королем трансферного обучения. Я сначала обучил модель большим наборам данных и сохранил веса. Затем я тренирую модель с моим набором данных, замораживая слои. Но я вижу, что было некоторое переоснащение. Поэтому я пытаюсь изменить выпадение модели и загрузить веса, так как числа меняются, а выпадающие меняются. Я нахожу трудности с изменением отсева.

Прямо мой вопрос: возможно ли изменить выпадение модели при загрузке гирь?

мой сценарий 1 такой

  1. модель определена.
  2. обучаем модель.
  3. элемент списка
  4. Сохранить вес.
  5. ...

  6. переопределить отсев, другие не изменены в модели

  7. загрузить веса. Я получил ошибку.

2-й сценарий

  1. модель1 определена.

  2. поезд модели.

  3. сохранение весов

  4. загрузить модель1 веса к модели1

  5. ....

  6. модель2, определяемая изменением количества выпадений.

  7. Попытайтесь установить значения от модели 1 до модели 2, используя цикл for, кроме для выпадающего слоя. Я получил ошибку.

Это ошибка, которую я получил.

 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....

Какой правильный путь? Поскольку я новичок в Керасе, я изо всех сил стараюсь идти дальше.

1 Ответ

0 голосов
/ 06 сентября 2018

Я рекомендую вам загрузить веса, используя функцию model.load_weights("weights_file.h5"), а затем попробуйте следующее:

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

Так как только у выпадающих слоев есть атрибут 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'])

Опять же, параметры, переданные здесь, приведены только для примера, поэтому измените их в соответствии с вашей проблемой

...