кажется, что метод train может получить сеанс и продолжить обучение с существующей модели def train(self, data, sess=None)
, поэтому с минимальными изменениями в существующем коде и библиотеках вы можете сделать что-то вроде
сначала загрузите все данные и постройте модель
data = Data('./data/'+args.data_name+'data_sample.bin','./data/'+args.data_name+'vocab_sample.bin',
'./data/'+args.data_name+'word_embed_weight_sample.bin',args.batch_size)
model = BiLstm(args, data, ckpt_path='./' + args.data_name + '_output/')
, затем создайте набор данных перекрестной проверки, что-то вроде
def get_new_data_object():
return data = Data('./data/'+args.data_name+'data_sample.bin','./data/'+args.data_name+'vocab_sample.bin',
'./data/'+args.data_name+'word_embed_weight_sample.bin',args.batch_size)
cross_validation = []
for i in range(10):
tmp_data = get_new_data_object()
tmp_data.train= #get 90% of tmp_data['train']
tmp_data.valid= #get 90% of tmp_data['valid']
tmp_data.test= #get 90% of tmp_data['test']
tmp_data.train2= #get 90% of tmp_data['train2']
tmp_data.valid2= #get 90% of tmp_data['valid2']
tmp_data.test2= #get 90% of tmp_data['test2']
cross_validation.append(tmp_data)
, чем запустите модель n раз (10для 10-кратной перекрестной проверки)
sess = null
for data in cross_validation:
model.train(data, sess)
sess = model.restore_last_session()
имейте в виду, чтобы обратить внимание на некоторые ключевые идеи
- Я не знаю, как ваши данные структурированы точно, но это влияет наспособ разделения на
test
, train
и (в вашем случае) valid
- разделение данных должно быть точным разделением для каждой тройки из
test
, train
и valid
, это может быть сделано случайным образом или каждый раз по-разному, до тех пор, пока оно соответствует - , вы можете обучать модель
n
раз с перекрестной проверкой или создавать n
модели ивыбрать лучшее, чтобы избежать переоснащения
это сотрудничествоde - это всего лишь черновик, вы можете реализовать его так, как вам хочется, есть замечательная библиотека, которая уже реализовала такую функциональность, и, конечно, ее можно оптимизировать (не читая файлы данных целиком)
еще одинРассмотрение состоит в том, чтобы отделить создание модели от данных, особенно аргумента data
конструктора модели, от быстрого взгляда кажется, что он использует только измерение данных, поэтому рекомендуется не пропускать весь объект
более того, если модель интегрирует другие свойства объекта data
в его состоянии (при создании), как и сами данные, мой код может не работать и более хирургический подход
надеюсь, что это поможет, и направит вас в правильном направлении