2016-12-27 6 views
2

Я использую функцию чтения CTF после учебников CNTK в Github.Ошибка чтения метаданных CTF для больших файлов в CNTK

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

Что такое решение или работы вокруг этого?

+0

Звучит очень похоже ваш входной файл неверен. Посмотрите на свой файл ввода вокруг смещения, который содержит сообщение об ошибке: 8923303. Вы можете, например, пропустить первые 8923000 байт вашего файла через «tail -c +8923000 file.tsv» –

ответ

1

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

+0

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

+0

Это возможно, если это одно, а редкое слово отвечает. Вы все еще получаете ту же ошибку, если вы определяете размерность ввода больше ее текущего значения? –

+0

Это действительно так. Размерность ввода не была должным образом обновлена. Благодарю. –