Ошибка CTF Reader для больших файлов в CNTK

Я использую функцию чтения CTF, следуя руководствам CNTK на Github.

def create_reader(path, is_training, input_dim, label_dim):
    return MinibatchSource(CTFDeserializer(path, StreamDefs(
        features = StreamDef(field='x', shape=input_dim, is_sparse=True),
        labels = StreamDef(field='y', shape=label_dim, is_sparse=False)
    )), randomize=is_training, epoch_size= INFINITELY_REPEAT if is_training else FULL_DATA_SWEEP)

Это работает совершенно нормально, за исключением случаев, когда размер входного файла больше определенного размера (неизвестно). Потом выдает такую ​​ошибку:

WARNING: Sparse index value (269) at offset 8923303 in the input file (C:\local\CNTK-2-0-beta6-0-Windows-64bit-CPU-Only\cntk\Examples\common\data_pos_train_balanced_ctf.txt) exceeds the maximum expected value (268).
attempt: Reached the maximum number of allowed errors while reading the input file (C:\local\CNTK-2-0-beta6-0-Windows-64bit-CPU-Only\cntk\Examples\common\data_pos_train_balanced_ctf.txt)., retrying 2-th time out of 5...
.
.
.

RuntimeError: Reached the maximum number of allowed errors while reading the input file (C:\local\CNTK-2-0-beta6-0-Windows-64bit-CPU-Only\cntk\Examples\common\data_pos_train_balanced_ctf.txt).

Я определил, что такая ошибка возникает в файле TextParser.cpp https://github.com/Microsoft/CNTK/blob/5633e79febe1dc5147149af9190ad1944742328a/Source/Readers/CNTKTextFormatReader/TextParser.cpp

Каково решение или обходной путь для этого?


person Satarupa Guha    schedule 27.12.2016    source источник
comment
Очень похоже на то, что ваш входной файл искажен. Посмотрите на свой входной файл по смещению, которое содержит сообщение об ошибке: 8923303. Вы можете, например, пропустить первые 8923000 байт вашего файла, используя tail -c +8923000 file.tsv   -  person Anton Schwaighofer    schedule 27.12.2016


Ответы (1)


Вам нужно знать размерность вашего ввода, а также знать, что индексы начинаются с 0. Поэтому, если вы создали входной файл, отображающий ваш словарь в диапазоне от 1 до 20000, размерность будет 20001.

person Nikos Karampatziakis    schedule 27.12.2016
comment
Я создаю входной файл по той же логике. Теперь это терпит неудачу только тогда, когда ввод становится большим. Я не понимаю, если бы моя логика была неправильной, как бы это успешно работало для файлов меньшего размера? Например, это прекрасно работает для всех размеров входных данных, скажем, до 25 000 последовательностей. После этого начинает глючить. - person Satarupa Guha; 28.12.2016
comment
Можно, если это промах на единицу и отвечает редкое слово. Вы по-прежнему получаете ту же ошибку, если определяете размерность ввода больше, чем ее текущее значение? - person Nikos Karampatziakis; 28.12.2016
comment
Это было действительно так. Входная размерность не была обновлена ​​должным образом. Спасибо. - person Satarupa Guha; 28.12.2016