Udostępnij przez


Dane wejściowe{}

Definiuje dane wejściowe, które są przekazywane przez czytnik.

Input (shape, sparse=false, dynamicAxis=DefaultAxis, tag='feature')

Parametry

  • shape: skalarny (jeśli dane wejściowe są wektorem) lub kształt tensorowy (jeśli dane wejściowe są wielowymiarowe). Na przykład 40 w przypadku 40-wymiarowych cech lub (640:480:3) obrazów kolorów o rozmiarze NVIDIA.
  • sparse (wartość domyślna: false): jeśli wartość true, dane wejściowe są przechowywane jako macierz rozrzedliwa
  • dynamicAxis (ustawienie domyślne: Brak): alternatywna oś dynamiczna do użycia przez te dane wejściowe

Wartość zwracana

Zmienna, która odbiera jej wartość ze reader strumienia o tej samej nazwie.

###Description

Input{} deklaruje zmienną reprezentującą dane wejściowe odczytane z czytnika. Dane wejściowe muszą być zadeklarowane na najbardziej zewnętrznym poziomie BrainScriptNetworkBuilder sekcji, a reader sekcja musi definiować strumień o tej samej nazwie.

####Sparse dane wejściowe

Opcja sparse=true deklaruje, że dane wejściowe są reprezentowane jako wektor rozrzedny. Jest to często używane do odczytywania danych kategorii (takich jak wyrazy) reprezentowanych przez wektory jednorazowe. Rozrzedne dane wejściowe mają dwa typowe zastosowania:

  • dane wejściowe, które są osadzone; I
  • Etykiety.

Osadzanie jest kolekcją gęstych wektorów o stałej wartości indeksowanych według identyfikatora liczbowego wyrazu (lub innego elementu podzielonego na kategorie). W CNTK ta operacja indeksu jest wyrażana jako mnożenie macierzy z jednogwiatkową reprezentacją wyrazu. Na przykład drugie słowo w słowniku będzie reprezentowane przez wektor w = (0, 1, 0, 0, ..., 0)^Tkolumny , a produkt E * w macierzy jest odpowiednikiem pobierania drugiej kolumny macierzy E, gdzie kolumny E są wektorami osadzania.

Formalnie ten produkt macierzy mnoży się z dużą liczbie zer, ale jeśli w jest reprezentowany w formacie rozrzedżonym, ta operacja rzeczywiście tylko wynosi operację indeksowania, więc jest to tanie.

Należy pamiętać, że dane wejściowe rangi>1 nie mogą być reprezentowane w formacie rozrzedłym.

Etykiety rozrzedne

Podobnie jak w przypadku rzadkich danych wejściowych, wyrazy lub inne etykiety podzielone na kategorie mogą być reprezentowane w postaci rozrzedowej.

Należy jednak pamiętać, że rozrzedne etykiety nie są obecnie obsługiwane przez bezpośrednią formę .CrossEntropyWithSoftmax() Zamiast tego należy użyć ręcznie napisanego formularza, jak podano tutaj

Należy pamiętać, że dane etykiet rangi>1 nie mogą być reprezentowane w formacie rozrzedzgę.

Dane wejściowe obrazu

Obrazy są odczytywane jako szereg 3 tensor wymiarów [W x H x C] tensor o szerokości W, wysokości Hi liczbie kanałów C kolorów (3 dla RGB lub 1 dla B&W).

Sekwencje o zmiennej długości

Dane wejściowe mogą być pojedynczymi próbkami (np. obrazami) lub sekwencjami próbek (np. zdaniami). W przypadku cnTK są one takie same (pojedyncza próbka jest sekwencją długości 1). Zależy to od konkretnych danych wejściowych i czytelnika, czy dane wejściowe odbierają poszczególne próbki lub sekwencje.

Przykłady

40-wymiarowe wektory funkcji mowy

features = Input{40}

Aby odczytać całe okno, w tym 10 z lewej i 10 ramek sąsiada po prawej stronie:

features = Input{(40:21)}

Word sekwencje, rozmiar słownictwa 33124

words = Input{33124, sparse=true}

z odpowiednią definicją czytnika (aby odczytać je z pliku CTF):

reader = {
    readerType = "CNTKTextFormatReader"
    file = "my_text_corpus.ctf"
    randomize = true
    input = { words = { alias = "w" ; dim = 33124 ;  format = "sparse" }}
}

Obrazy CIFAR-10

images = Input{(32:32:3)}
labels = Input{10}

z odpowiednią definicją czytnika:

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 }
        }
    })
}