fastai: ValueError: __len __ () должен возвращать> = 0 - PullRequest
0 голосов
/ 04 июля 2018

при запуске следующей программы - https://rawgit.com/sizhky/eef1482e63387df8e9e045ac1e5a0ce8/raw/bdbebafaab21739a27f6bf32e83da1557919b44b/lm.html

Я не могу позвонить learner.fit, так как выдает ошибку выше.

В частности,
Я пытаюсь обучить языковую модель взятию текстового файла и преобразованию его в LanguageModelData и передаче его в RNN через get_model

md = LanguageModelData.from_text_files(PATH, TEXT, **FILES, bs=bs, bptt=bptt, min_freq=10)<br> learner = md.get_model(opt_fn, em_sz, nh, nl, dropouti=0.05, dropout=0.05, wdrop=0.1, dropoute=0.02, dropouth=0.05) learner.reg_fn = partial(seq2seq_reg, alpha=2, beta=1) learner.clip=0.3 learner.fit(3e-3, 4)


ValueErrorTraceback (most recent call last)
<ipython-input-7-579772ee6693> in <module>()
----> 1 learner.fit(3e-3, 4)

/nfsroot/data/home/yeshwanth/misc/fastai/fastai/courses/dl1/practice/fastai/learner.py in fit(self, lrs, n_cycle, wds, **kwargs)
    285         self.sched = None
    286         layer_opt = self.get_layer_opt(lrs, wds)
--> 287         return self.fit_gen(self.model, self.data, layer_opt, n_cycle, **kwargs)
    288 
    289     def warm_up(self, lr, wds=None):

/nfsroot/data/home/yeshwanth/misc/fastai/fastai/courses/dl1/practice/fastai/learner.py in fit_gen(self, model, data, layer_opt, n_cycle, cycle_len, cycle_mult, cycle_save_name, best_save_name, use_clr, use_clr_beta, metrics, callbacks, use_wd_sched, norm_wds, wds_sched_mult, use_swa, swa_start, swa_eval_freq, **kwargs)
    232             metrics=metrics, callbacks=callbacks, reg_fn=self.reg_fn, clip=self.clip, fp16=self.fp16,
    233             swa_model=self.swa_model if use_swa else None, swa_start=swa_start,
--> 234             swa_eval_freq=swa_eval_freq, **kwargs)
    235 
    236     def get_layer_groups(self): return self.models.get_layer_groups()

/nfsroot/data/home/yeshwanth/misc/fastai/fastai/courses/dl1/practice/fastai/model.py in fit(model, data, n_epochs, opt, crit, metrics, callbacks, stepper, swa_model, swa_start, swa_eval_freq, **kwargs)
    159 
    160         if not all_val:
--> 161             vals = validate(model_stepper, cur_data.val_dl, metrics, seq_first=seq_first)
    162             stop=False
    163             for cb in callbacks: stop = stop or cb.on_epoch_end(vals)

/nfsroot/data/home/yeshwanth/misc/fastai/fastai/courses/dl1/practice/fastai/model.py in validate(stepper, dl, metrics, seq_first)
    220     stepper.reset(False)
    221     with no_grad_context():
--> 222         for (*x,y) in iter(dl):
    223             y = VV(y)
    224             preds, l = stepper.evaluate(VV(x), y)

/nfsroot/data/home/yeshwanth/misc/fastai/fastai/courses/dl1/practice/fastai/nlp.py in __next__(self)
    135 
    136     def __next__(self):
--> 137         if self.i >= self.n-1 or self.iter>=len(self): raise StopIteration
    138         bptt = self.bptt if np.random.random() < 0.95 else self.bptt / 2.
    139         seq_len = max(5, int(np.random.normal(bptt, 5)))

ValueError: __len__() should return >= 0

1 Ответ

0 голосов
/ 08 июля 2018

Похоже, ваши данные находятся в 1 .txt файле, а LanguageModelData.from_text_files() рассчитывает работать с папками, содержащими много файлов

UPD: решено! В каждой папке должно быть не менее bs файлов! В противном случае LanguageModelLoader для LanguageModelData содержит пустые данные.

Я сталкиваюсь с той же ошибкой во время проверки, и проблема, похоже, заключается в том, что LanguageModelData() построенный набор данных:

for (*x, y) in md.trn_dl:
    set_trace()

x должен быть тензором или формой питчера (smth, batch_size), а y - одномерным тензором размера smth*batch_size. То же самое с md.val_dl. В вашем случае вполне вероятно, что нет (*x, y). Что-то не так с данными. len(md.trn_dl) и len(md.val_dl) не должны равняться 0.

Буду признателен за любые решения, спасибо за вопрос!

Кроме того, более новая версия языковой модели сбрасывает torchtext и облегчает отладку: https://github.com/fastai/fastai/blob/master/courses/dl2/imdb.ipynb

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...