omówienie użycia CNTK

Aby użyć CNTK należy pobrać pliki binarne wykonywalne lub pobrać kod źródłowy i skompilować go na maszynie (szczegóły). Istnieją trzy główne zadania (lub akcje), które są obsługiwane przez CNTK:

  • Trenowanie — definiowanie sieci i trenowanie jej w celu utworzenia wytrenowanego modelu przy użyciu danych szkoleniowych
  • Evaluate — testowanie wytrenowanego modelu w celu oceny wydajności przy użyciu danych testowych
  • Wdrażanie — używanie wytrenowanego modelu, np. we własnym rozwiązaniu, do klasyfikowania nowych wystąpień

Poniżej przedstawiono krótkie omówienie każdego z tych zadań i podano wskaźniki do bardziej szczegółowego opisu. Ponadto istnieją inne zadania, które CNTK obsługują, takie jak edytowanie istniejących modeli i zapisywanie danych wyjściowych węzła do pliku. Opis tych informacji znajduje się w sekcji Tematy zaawansowane na stronie Poleceń najwyższego poziomu .

Trenowanie modelu przy użyciu CNTK

Trenowanie sieci neuronowej przy użyciu CNTK obejmuje trzy składniki, które należy skonfigurować:

  • sieć: sieć neuronowa, w tym jej struktura/formuła, parametry modelu. W tym miejscu uwzględniono również kryteria szkolenia i metryki oceny.
  • czytelnik: jak odczytywane są dane szkoleniowe
  • SGD: hiperparatyk procesu stochastycznego gradientu

Te informacje należy podać za pośrednictwem pliku konfiguracji jako pierwszego argumentu podczas wywoływania pliku wykonywalnego CNTK. Plik konfiguracji używa określonej składni. Aby uzyskać szczegółowe informacje na temat plików konfiguracji, zobacz Omówienie pliku konfiguracji.

W poniższym przykładzie używamy konfiguracji CNTK i wyników z przykładu MNIST, w szczególności konfiguracji "01_OneHidden_ndl_deprecated.cntk" (zobacz Image/GettingStarted i 01_OneHidden.cntk, aby uzyskać szczegółowe informacje).

W tym przykładzie CNTK wiersz polecenia to cntk configFile=01_OneHidden_ndl_deprecated.cntk. Poniższy fragment kodu zawiera omówienie zawartości pliku konfiguracji, które są istotne dla trenowania.

modelDir = "$OutputDir$/Models"
deviceId = 0
command = MNISTtrain

modelPath = "$modelDir$/01_OneHidden"

MNISTtrain = [
    action = "train"

    # network definition   
    BrainScriptNetworkBuilder = (new ComputationNetwork
        include "$ConfigDir$/01_OneHidden.bs"
    )

    # learner configuration       
    SGD = [
        ...
    ]

    # reader configuration   
    reader = [
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Train-28x28_cntk_text.txt"
        ...
    ]    
]

Powyższy fragment kodu definiuje polecenie o nazwie MNISTtrain .action = "train" Inne obsługiwane akcje to na przykład test lub write. Parametr deviceId określa, czy używać procesora CPU, czy procesora GPU. Po ustawieniu wartości "auto"CNTK wybierze najlepsze dostępne urządzenie. Ustaw ją na -1 użycie procesora CPU lub wartości >=0, aby użyć określonego procesora GPU. Definiuje modelPath miejsce przechowywania pośrednich i końcowych wytrenowanych modeli. W tym przykładzie używa ModelDir zmiennej zdefiniowanej na początku pliku konfiguracji.

Trzy główne bloki konfiguracji do trenowania definiują samą sieć oraz parametry algorytmu trenowania i czytnika danych.

  • Konstruktor sieci — tutaj definiujesz topologię i szczegóły sieci, takie jak rozmiar i liczba warstw oraz typ węzłów. Możesz użyć prostego konstruktora sieci dla standardowych modeli lub konstruktora sieci BrainScript dla niestandardowych. Aby uzyskać szczegółowe informacje, zapoznaj się z odpowiednimi stronami.
  • SGD — ten blok umożliwia sparametryzowanie algorytmu trenowania (spadek gradientu stochastycznego). Konfigurowalne opcje obejmują rozmach, adaptacyjny współczynnik uczenia, adaptacyjny rozmiar minibatch, trenowanie równoległe. Aby uzyskać więcej informacji, zobacz blok SGD .
  • reader — blok czytelnika definiuje, który czytnik ma być używany i gdzie znajdują się odpowiednie pliki wejściowe. CNTK udostępnia kilka czytników danych dla różnych formatów i zadań (zobacz Blok czytelnika).

Na koniec wiersz command = MNISTtrain określa, które z zdefiniowanych zadań należy wykonać. Aby wykonać kilka zadań po kolei, np. trenowanie i ewaluację, wystarczy dodać więcej zadań do polecenia oddzielonego dwukropkiem: command = "MNISTtrain:MNISTtest".

Ocenianie wytrenowanego modelu

Aby ocenić dokładność wytrenowanego modelu, użyj eval polecenia lub test (zobacz również Train, Test, Eval, aby uzyskać szczegółowe informacje). Odpowiednia konfiguracja w przykładzie MNIST 01_OneHidden.cntk wygląda następująco.

testNetwork = {
    action = "test"
    minibatchSize = 1024    # reduce this if you run out of memory

    reader = {
        readerType = "CNTKTextFormatReader"
        file = "$DataDir$/Test-28x28_cntk_text.txt"
        input = {
            features = { dim = 784 ; format = "dense" }
            labels =   { dim = 10  ; format = "dense" }
        }
    }
}

Blok MNISTtest używa metody action = "test". test W przypadku akcji należy zdefiniować model, który powinien być używany do testowania przy użyciu parametru modelPath . W tym przykładzie modelPath element nie jest zdefiniowany wewnątrz MNISTtest bloku, ale na najwyższym poziomie (zobacz część trenowania powyżej) i jest używany zarówno przez akcje, jak train i test . reader W bloku określ plik danych, który ma być używany do testowania, Test-28x28.txt w przykładzie. Na koniec musisz ustawić command = MNISTtest i uruchomić polecenie cntk configFile=01_OneHidden_ndl_deprecated.cntk , aby wykonać testy. Wynik w wierszu polecenia to:

Final Results: Minibatch[1-625]: errs = 2.39% * 10000; ce = 0.076812531 * 10000; Perplexity = 1.0798396
COMPLETED!

Używanie wytrenowanego modelu we własnym kodzie

Po wytrenowanym modelu potrzebne są funkcje do oceny modelu w środowisku docelowym. CNTK oferuje wiele sposobów obsługi modeli w różnych scenariuszach. Możesz użyć wytrenowanego modelu z języków C++, Python, C# lub innych języków platformy .NET. Możesz uruchomić ocenę na maszynie lub na platformie Azure. Sekcja Ocena modeli CNTK (zobacz pasek boczny) zawiera wiele szczegółów, w tym ocenę przy użyciu języka C++/Python/C#/Azure.

Następne kroki