Я тренирую модель, используя модель понимания языка в примерах CNTK. Это проблема маркировки последовательности. Для каждого слова в каждом запросе вы хотите предсказать правильную метку (из 16 возможных меток).
Вот что я сделал
minibatch_size = 5
data = reader.next_minibatch(minibatch_size, input_map={ # fetch minibatch
x: reader.streams.query,
y: reader.streams.slot_labels
})
if not data: # until we hit the end
break
evaluator = C.eval.Evaluator(loss, progress_printer)
evaluator.test_minibatch(data)
res = model.eval(data)
print("data[y].shape=", data[y].shape)
print("")
print("len(res)=", len(res), " shape=", res[0].shape)
Форма data[y].shape: 1 * 3 * 16 или 2 * 4 * 16 и т. д.
Я понял, что 3/4 означает количество слов в моем запросе. 16 — размер однократного вектора. Таким образом, 1/ должен быть размером партии. Однако я установил размер пакета равным 5, почему он не равен 5?
Еще одна запутанная вещь заключается в том, что если я сделаю «t += data[y].num_samples», то вначале t может быть ~60. Что означают num_samples и num_sequences в minibatchData?
Более того, если это 2 * 4 * 16, означает ли это, что все два запроса имеют длину 4? Означает ли это, что программа будет перемешивать мои тестовые данные, чтобы комбинировать запросы одинаковой длины? Или вообще, если я установлю randomized=False, должен ли порядок быть таким же, как мои тестовые данные?