Входные данные{}
Определяет входные данные, которые передаются средством чтения.
Input (shape, sparse=false, dynamicAxis=DefaultAxis, tag='feature')
Параметры
shape
: скалярная (если входные данные являются вектором) или тензорная фигура (если входные данные многомерные). Например,40
для 40-мерных признаков или(640:480:3)
цветных изображений размера VGA.sparse
(по умолчанию: false): если значение true, входные данные сохраняются в виде разреженной матрицы.dynamicAxis
(по умолчанию: Нет): альтернативная динамическая ось, используемая данными входными данными
Возвращаемое значение
Переменная, получающая значение из reader
потока с тем же именем.
###Description
Input{}
объявляет переменную, представляющую входные данные, считываемые из средства чтения.
Входные данные должны объявляться на самом внешнем уровне BrainScriptNetworkBuilder
раздела, а reader
раздел должен определять поток с тем же именем.
Входные данные ####Sparse
Параметр sparse=true
объявляет, что входные данные должны быть представлены в виде разреженного вектора.
Обычно используется для чтения категориальных данных (например, слов), представленных одним горячим вектором.
Разреженные входные данные используются в двух распространенных целях:
- входные данные, которые внедряются; И
- Метки.
Внедрение — это коллекция векторов с плотными непрерывными значениями, индексируемых числовым идентификатором слова (или другого категориального элемента).
В CNTK эта операция с индексами выражается в виде матричного умножения с одним горячим представлением слова.
Например, второе слово в словаре будет представлено вектором w = (0, 1, 0, 0, ..., 0)^T
столбца , а матричное произведение E * w
эквивалентно получению второго столбца матрицы E
, где столбцы E
представляют собой векторы внедрения.
Формально, этот матричный продукт умножается с большим количеством нулей, но если w
представлен в разреженном формате, эта операция действительно просто равносильна операции индексирования, так что это дешево.
Обратите внимание, что входные данные ранга>1 не могут быть представлены в разреженном формате.
Разреженные метки
Как и разреженные входные данные, слова или другие категориальные метки можно представить в разреженной форме.
Однако обратите внимание, что разреженные метки в настоящее время не поддерживаются прямой формой CrossEntropyWithSoftmax()
.
Вместо этого необходимо использовать форму, написанную вручную, как показано здесь.
Обратите внимание, что данные меток ранга>1 не могут быть представлены в разреженном формате.
Входные данные изображения
Изображения считываются как тензоры тензоров ранга 3 с размерами [W x H x C]
тензоров с шириной W
, высотой H
и количеством цветовых каналов C
(3 для RGB или 1 для B&W).
Последовательности переменной длины
Входные данные могут быть отдельными примерами (например, изображениями) или последовательностью выборок (например, предложениями). Для CNTK они одинаковы (отдельный образец представляет собой последовательность длиной 1). Зависит от конкретных входных данных и читателя, получает ли входные данные отдельные выборки или последовательности.
Примеры
40-мерные векторы функций речи
features = Input{40}
Чтобы прочитать целое окно, включая 10 левых и 10 правых соседних кадров:
features = Input{(40:21)}
Word последовательностей, размер словаря 33124
words = Input{33124, sparse=true}
с соответствующим определением средства чтения (для чтения из CTF-файла):
reader = {
readerType = "CNTKTextFormatReader"
file = "my_text_corpus.ctf"
randomize = true
input = { words = { alias = "w" ; dim = 33124 ; format = "sparse" }}
}
Изображения CIFAR-10
images = Input{(32:32:3)}
labels = Input{10}
с соответствующим определением средства чтения:
reader = {
verbosity = 0 ; randomize = true
deserializers = ({
type = "ImageDeserializer" ; module = "ImageReader"
file = "$dataDir$/cifar-10-batches-py/train_map.txt"
input = {
images = { transforms = (
{ type = "Crop" ; cropType = "RandomSide" ; sideRatio = 0.8 ; jitterType = "UniRatio" } :
{ type = "Scale" ; width = 32 ; height = 32 ; channels = 3 ; interpolations = "linear" } :
{ type = "Transpose" }
)}
labels = { labelDim = 10 }
}
})
}