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