Я использую функцию чтения 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
Какое решение или обходной путь для этого?
Вам нужно знать размерность вашего ввода, а также знать, что индексы начинаются с 0. Поэтому, если вы создали входной файл, отображающий ваш словарь в диапазон от 1 до 20000, размерность равна 20001.
Других решений пока нет …