Я строю модель для машинного понимания.Это тяжелая модель, необходимая для тренировки большого количества данных, и это требует от меня больше времени.Я использовал обратные вызовы keras для сохранения модели после каждой эпохи, а также для сохранения истории потерь и точности.
Проблема в том, что когда я загружаю обученную модель и пытаюсь продолжить ее обучение, используя аргумент initial_epoch
значения потерь и точности такие же, как у необученной модели.
Вот код: https://github.com/ParikhKadam/bidaf-keras Код, используемый для сохранения и загрузки модели, находится в /models/bidaf.py Используемый мной скриптЧтобы загрузить модель:
from .models import BidirectionalAttentionFlow
from .scripts.data_generator import load_data_generators
import os
import numpy as np
def main():
emdim = 400
bidaf = BidirectionalAttentionFlow(emdim=emdim, num_highway_layers=2,
num_decoders=1, encoder_dropout=0.4, decoder_dropout=0.6)
bidaf.load_bidaf(os.path.join(os.path.dirname(__file__), 'saved_items', 'bidaf_29.h5'))
train_generator, validation_generator = load_data_generators(batch_size=16, emdim=emdim, shuffle=True)
model = bidaf.train_model(train_generator, epochs=50, validation_generator=validation_generator, initial_epoch=29,
save_history=False, save_model_per_epoch=False)
if __name__ == '__main__':
main()
История обучения довольно хороша:
epoch,accuracy,loss,val_accuracy,val_loss
0,0.5021367247352657,5.479433422293752,0.502228641179383,5.451400522458351
1,0.5028450897193741,5.234336488338403,0.5037527732234647,5.0748545675049
2,0.5036885394022954,5.042028017280698,0.5039489093881276,5.0298488218407975
3,0.503893446146289,4.996997425685413,0.5040753162241299,4.976164487656699
4,0.5040576918224873,4.955544574118662,0.5041905890181151,4.931354981493792
5,0.5042372655790888,4.909940965651957,0.5043896965802341,4.881359395178988
6,0.504458428129642,4.8542871887472465,0.5045972716586732,4.815464454729135
7,0.50471843351102,4.791098495962496,0.5048680457262408,4.747811231472629
8,0.5050776754196002,4.713560494026321,0.5054184527602898,4.64730478015052
9,0.5058853749443502,4.580552254050073,0.5071290369370443,4.446513280167718
10,0.5081544614246304,4.341471499420364,0.5132941329030303,4.145318906086552
11,0.5123970410575613,4.081624463197288,0.5178775145611896,4.027316586998608
12,0.5149879128865782,3.9577423109634613,0.5187159608315838,3.950151870168726
13,0.5161411008840144,3.8964761709052578,0.5191430166876064,3.906301355196609
14,0.5168211272672539,3.8585826589385697,0.5191263493850466,3.865382308412537
15,0.5173216891201444,3.830764191839807,0.519219763635108,3.8341492204942607
16,0.5177805591697787,3.805340048675155,0.5197178382215892,3.8204319018292585
17,0.5181171635676399,3.7877712072310343,0.5193657963810704,3.798006804522368
18,0.5184295824699279,3.77086071548255,0.5193122694008523,3.7820449101377243
19,0.5187343664397653,3.7555085003534194,0.5203585262348183,3.776260506494833
20,0.519005008308583,3.7430062334375065,0.5195983755362352,3.7605361109533995
21,0.5192872482429703,3.731001830462149,0.5202017035842986,3.7515058917231405
22,0.5195097722222706,3.7194103983513553,0.5207148585133065,3.7446572377159795
23,0.5197511249107636,3.7101052441559905,0.5207420740297026,3.740088335181619
24,0.5199862479678652,3.701593302911729,0.5200187951731082,3.7254406861185188
25,0.5200847805044403,3.6944093077914464,0.520112738649039,3.7203616696860786
26,0.5203289568582412,3.6844954882274092,0.5217114634669081,3.7214983577364547
27,0.5205629846610852,3.6781935968943595,0.520915311442328,3.705435317731209
28,0.5206827641463226,3.6718110897539193,0.5214088439286978,3.7003081666703377
Кроме того, я уже позаботился о загрузке пользовательских объектов, таких как слои, функция потерьи точность.
Я разочарован, потому что я потратил несколько дней, чтобы обучать эту модель до эпох, и теперь я не могу возобновить обучение.Я ссылался на различные темы в проблемах с keras и обнаружил, что многие люди сталкиваются с такими проблемами, но не могут найти решение.
Кто-то в теме сказал, что «Keras не будет сохранять состояния RNN» (я не используюRNN с сохранением состояния) и кто-то другой сказал: «Keras повторно инициализирует все веса перед сохранением, которое мы можем обработать с помощью флага».Я имею в виду, если такие проблемы существуют в Keras, что будет использовать такие функции, как save ().
Я также пытался сохранять только веса после каждой эпохи, а затем строить модель с нуля, а затем загружать эти веса вЭто.Но это не сработало.Старый код, который я использовал для сохранения весов, можно найти только в более старых ветках github repo, перечисленных выше.
Я упоминал эту проблему без помощи - # 4875
Эта проблема открыта из прошлогодва года.Не могу понять, что делают все разработчики!Кто-нибудь здесь, кто может помочь?Должен ли я переключиться на tenorflow, или я тоже столкнусь с такими же проблемами?
Пожалуйста, помогите ...
Edit1: Я не пробовал сохранять модель с использованием модели.save (), но я видел людей в других потоках, которые говорили, что проблема была решена с помощью model.save () и models.save_model ().Если это действительно решено, ModelCheckpoint должен также сохранить состояние оптимизатора, чтобы возобновить обучение, но это не (или не может) по какой-либо причине.Я проверил код обратного вызова ModelCheckpoint, который косвенно вызывает model.save (), который приводит к вызову models.save_model ().Таким образом, теоретически, если проблема в базе, т.е. models.save_model (), решена, то она должна быть решена и в других функциях.
Извините, но у меня нет мощной машины, чтобы проверить это практически.Если кто-то здесь есть, я поделился своим кодом на GitHub, и ссылка предоставляется в выпуске.Пожалуйста, попробуйте возобновить обучение и найти причину этой проблемы.
Я использую компьютер, предоставленный национальным институтом, и, следовательно, учащиеся здесь должны использовать этот компьютер для своих проектов.Я не могу использовать этот компьютер для таких задач.Спасибо ..
Edit2: Недавно я попытался проверить, правильно ли сохранены веса.Для этого я оценил модель с помощью моего генератора валидации.Я видел, что потери и точность вывода остались такими же, как и в начале обучения модели.Видя это, я пришел к выводу, что на самом деле проблема с сохранением весов модели.Я могу ошибаться здесь ..
Кстати, я также использовал multi_gpu_model()
в коде моей модели.Может ли это вызвать эту проблему?Я не могу попробовать тренировочную модель на CPU, так как она слишком тяжелая для этого и займет всего несколько дней, чтобы закончить только 1 эпоху.Кто-нибудь может помочь в отладке?
Я не вижу ответа на такие вопросы в эти дни.Просто перечислите текущие проблемы на README.md в keras github, чтобы пользователи могли быть в курсе, прежде чем пробовать keras и тратить на это месяцы.