interfejs API języka C++ biblioteki CNTK
Biblioteka CNTK języka C++ do oceny jest oparta na interfejsie API biblioteki CNTK. Poniższe metody służą do oceny modelu.
Ładowanie modelu
static FunctionPtr CNTK::Function::Load(const std::wstring& modelFile, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Ta metoda ładuje plik modelu i zwraca wskaźnik do funkcji reprezentującej załadowany model. Funkcja w CNTK określa graf obliczeniowy składający się z pierwotnych funkcji lub funkcji złożonych z zerowymi lub większą częścią argumentów wejściowych i co najmniej jednym wyjściem. Jest modelFile
to ścieżka pliku modelu. Określa computeDevice
urządzenie do uruchomienia oceny.
static FunctionPtr CNTK::Function::Load(char *modelBuffer, size_t modelBufferLength, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Ta metoda ładuje model z buforu pamięci i zwraca wskaźnik do funkcji reprezentującej załadowany model. Wskazuje modelBuffer
bufor zawierający zawartość modelu serializowanego, a modelBufferLength
wartość to długość buforu. Określa computeDevice
urządzenie do uruchomienia oceny.
Ocena funkcji
void CNTK::Function::Evaluate(const std::unordered_map<Variable, ValuePtr>& arguments, std::unordered_map<Variable, ValuePtr>& outputs, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Ta metoda rozpoczyna ocenę funkcji reprezentującej this
model z określonymi parametrami. Zawiera arguments
wartości wszystkich zmiennych wejściowych wymaganych do oceny i outputs
przechowują wartości zmiennych wyjściowych. Magazyn wartości wyjściowych może być wstępnie przydzielony przez obiekt wywołujący lub przez system, jeśli mapowanie ValuePtr jest przekazywane jako null przez obiekt wywołujący. Określa computeDevice
urządzenie do uruchomienia oceny.
Tworzenie wartości przy użyciu gęstych danych wejściowych
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(const NDShape& sampleShape, const std::vector<ElementType>& batchData, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający partię przykładów. Liczba próbek w partii jest liczbą elementów batchData
podzielonych przez rozmiar sampleShape
(błąd środowiska uruchomieniowego występuje, jeśli reszta nie jest równa zero). Utworzony obiekt Value zawiera kopię określonych danych w pliku batchData
. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensor obiektu Value.batchData
: dane, które mają być zawarte w obiekcie Value.device
: na którym urządzeniu powinien zostać utworzony obiekt Value.readOnly
: obiekt Value jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję przykładów. Utworzony obiekt Value zawiera kopię określonych danych w pliku sequenceData
. Długość sekwencji to liczba elementów sequenceData
podzielonych przez rozmiar sampleShape
(błąd środowiska uruchomieniowego występuje, jeśli pozostała część nie jest równa zero). Utworzona sekwencja jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensoru wartości.sequenceData
: dane, które mają być zawarte w wartości.device
: na którym urządzeniu powinien zostać utworzony obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję przykładów. Utworzony obiekt Value zawiera kopię określonych danych w pliku sequenceData
. Długość sekwencji to liczba elementów sequenceData
podzielonych przez rozmiar sampleShape
(błąd środowiska uruchomieniowego występuje, jeśli pozostała część nie jest równa zero). SekwencjaStartFlag określa, czy ta sekwencja jest nową sekwencją, czy kontynuacją poprzedniej sekwencji w tym samym indeksie na liście sekwencji z poprzedniego wywołania do tej metody. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensoru wartości.sequenceData
: dane, które mają być zawarte w wartości.sequenceStartFlag
:true
wskazuje, że jest to nowa sekwencja.false
oznacza kontynuację poprzedniej sekwencji.device
: na którym urządzeniu powinien zostać utworzony obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(const NDShape& sampleShape, const std::vector<std::vector<ElementType>>& batchOfSequences, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający partię sekwencji o zmiennej długości. Utworzony obiekt Value zawiera kopię określonych danych w pliku batchOfSequences
. Liczba sekwencji w partii to rozmiar batchOfSequences
. Długość każdej sekwencji to liczba elementów w odpowiedniej sekwencji batchOfSequences
podzielonej przez rozmiar sampleShape
(błąd środowiska uruchomieniowego występuje, jeśli reszta nie jest równa zero). Każda sekwencja w programie batchOfSequences
jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensoru wartości.batchOfSequences
: dane, które mają być przechowywane w wartości. Zewnętrznyvector
reprezentuje kolekcję sekwencji o zmiennej długości, a wewnętrznavector
reprezentuje każdą pojedynczą sekwencję.device
: na którym urządzeniu ma zostać utworzona wartość.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(const NDShape& sampleShape, const std::vector<std::vector<ElementType>>& batchOfSequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający partię sekwencji o zmiennej długości. Utworzony obiekt Value zawiera kopię określonych danych w pliku batchOfSequences
. Liczba sekwencji w partii to rozmiar batchOfSequences
. Długość każdej sekwencji to liczba elementów w odpowiedniej sekwencji batchOfSequences
podzielonej przez rozmiar sampleShape
(błąd środowiska uruchomieniowego występuje, jeśli reszta nie jest równa zero). ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensoru wartości.batchOfSequences
: dane, które mają być przechowywane w wartości. Zewnętrznyvector
reprezentuje kolekcję sekwencji o zmiennej długości, a wewnętrznavector
reprezentuje każdą pojedynczą sekwencję.sequenceStartFlags
: kolekcja wartości logicznych. Każdy element reprezentuje, czy odpowiednia sekwencja jestbatchOfSequences
nową sekwencją (w przypadkutrue
) lub kontynuacją poprzedniej sekwencji (w przypadkufalse
).device
: na którym urządzeniu ma zostać utworzona wartość.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
Tworzenie wartości przy użyciu danych wejściowych z jednym gorącym wektorem
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(size_t dimension, const std::vector<size_t>& batchData, const DeviceDescriptor& device, bool readOnly = false)
Tworzy nowy obiekt Value zawierający partię przykładów. Każda próbka jest reprezentowana przez wartość indeksu wskazującą wartość niezerową w wektorze jednego gorącego dimension
elementów. Liczba próbek w partii to liczba elementów w batchData
elemecie . ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jedno-gorącego.batchData
: kolekcja indeksów reprezentujących partię przykładów.device
: na którym urządzeniu powinien zostać utworzony obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, const DeviceDescriptor& device, bool readOnly = false)
Tworzy nowy obiekt Value zawierający sekwencję przykładów. Każda próbka jest reprezentowana przez wartość indeksu wskazującą wartość niezerową w wektorze jednego gorącego dimension
elementów. Długość sekwencji to liczba elementów w sequenceData
elemecie . Każda sekwencja jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jedno-gorącego.sequenceData
: kolekcja indeksów reprezentujących sekwencję przykładów.device
: na którym urządzeniu powinien zostać utworzony obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false)
Tworzy nowy obiekt Value zawierający sekwencję próbek. Każda próbka jest reprezentowana przez wartość indeksu, która wskazuje wartość niezerową w wektorze z gorącą jedyną wartością dimension
elementów. SeqStartFlag określa, czy ta sekwencja jest nową sekwencją lub kontynuacją poprzedniej sekwencji w tym samym indeksie na liście sekwencji z poprzedniego wywołania tej metody. Długość sekwencji to liczba elementów w elemecie sequenceData
. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jednorazowego.sequenceData
: kolekcja indeksów reprezentujących sekwencję przykładów.sequenceStartFlag
:true
wskazuje, że jest to nowa sekwencja.false
oznacza kontynuację poprzedniej sekwencji.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(size_t dimension, const std::vector<std::vector<size_t>>& batchOfSequences, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający partię sekwencji o zmiennej długości. Każda próbka jest reprezentowana przez wartość indeksu, która wskazuje wartość niezerową w wektorze z gorącą jedyną wartością dimension
elementów. Liczba sekwencji to liczba elementów na zewnętrznej liście .batchOfSequences
Długość każdej sekwencji to liczba elementów odpowiedniej sekwencji na wewnętrznej liście .batchOfSequences
Każda sekwencja w programie batchOfSequences
jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jednorazowego.batchOfSequences
: kolekcja indeksów reprezentujących sekwencje przykładów. Zewnętrznavector
reprezentuje kolekcję sekwencji o zmiennej długości, a wewnętrznavector
reprezentuje każdą pojedynczą sekwencję.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(size_t dimension, const std::vector<std::vector<size_t>>& batchOfSequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający partię sekwencji o zmiennej długości. Każda próbka jest reprezentowana przez wartość indeksu, która wskazuje wartość niezerową w wektorze z gorącą jedyną wartością dimension
elementów. Liczba sekwencji to liczba elementów na zewnętrznej liście .batchOfSequences
Długość każdej sekwencji to liczba elementów odpowiedniej sekwencji na wewnętrznej liście .batchOfSequences
ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jednorazowego.batchOfSequences
: kolekcja indeksów reprezentujących sekwencje przykładów. Zewnętrznavector
reprezentuje kolekcję sekwencji o zmiennej długości, a wewnętrznavector
reprezentuje każdą pojedynczą sekwencję.sequenceStartFlags
: kolekcja wartości logicznych. Każdy element reprezentuje, czy odpowiednia sekwencja wbatchOfSequences
programie jest nową sekwencją (w przypadku ),true
czy kontynuacją poprzedniej sekwencji (w przypadku elementufalse
).device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
Tworzenie wartości przy użyciu rzadkich danych wejściowych CSC
Obecnie obsługiwany jest skompresowany format kolumny rozrzedzonej (CSC). Format CSC przechowuje macierz w formacie głównym kolumny, a tablica zawierająca indeksy kolumn jest kompresowana. Macierz w formacie CSC jest reprezentowana przez następujące parametry:
nonZeroValues
: tablica danych, która zawiera wszystkie wartości niezerowe macierzy w formacie głównym kolumny.rowIndices
: tablica zawierająca indeksy wierszy odpowiednich elementów w tablicynonZeroValues
.colStarts
: tablica zawierająca indeksy w tablicachrowIndices
inonZeroValues
.
Szczegółowy opis formatu CSC można znaleźć tutaj.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję próbek przy użyciu formatu wejściowego CSC rozrzedzeniowego. Długość sekwencji to liczba wierszy macierzy rozrzedowej. Utworzona sekwencja jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensora wartości. W przypadku rzadkich danych wejściowych wymiarowość wiodącego kształtu tensora musi być taka sama jak całkowity rozmiar kształtu tensora.sequenceLength
: długość sekwencji, która jest również liczbą wierszy w macierzy rozrzedowej.colStarts
: tablica zawiera indeksy dla każdej kolumny w tablicachrowIndices
inonZeroValues
.rowIndices
: tablica zawierająca indeksy wierszy odpowiednich elementów w tablicynonZeroValues
.nonZeroValues
: tablica, która zawiera wszystkie wartości inne niżzerowe w macierzy rozrzedzeniu.numNonZeroValues
: liczba wartości niezerowych w macierzy rozrzedzanej.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję próbek przy użyciu formatu wejściowego CSC rozrzedzeniowego. Długość sekwencji to liczba wierszy macierzy rozrzedowej. SekwencjaStartFlag określa, czy ta sekwencja jest nową sekwencją, czy kontynuacją poprzedniej sekwencji z poprzedniego wywołania tej metody. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
sampleShape
: kształt tensora wartości. W przypadku rzadkich danych wejściowych wymiarowość wiodącego kształtu tensora musi być taka sama jak całkowity rozmiar kształtu tensora.sequenceLength
: długość sekwencji, która jest również liczbą wierszy w macierzy rozrzedowej.colStarts
: tablica zawiera indeksy dla każdej kolumny w tablicachrowIndices
inonZeroValues
.rowIndices
: tablica zawierająca indeksy wierszy odpowiednich elementów w tablicynonZeroValues
.nonZeroValues
: tablica, która zawiera wszystkie wartości inne niżzerowe w macierzy rozrzedzeniu.numNonZeroValues
: liczba wartości niezerowych w macierzy rozrzedzanej.sequenceStartFlag
:true
wskazuje, że jest to nowa sekwencja.false
oznacza kontynuację poprzedniej sekwencji.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję próbek przy użyciu formatu wejściowego CSC rozrzedzeniowego. Długość sekwencji to liczba wierszy macierzy rozrzedowej. Utworzona sekwencja jest nową sekwencją. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jednorazowego.sequenceLength
: długość sekwencji, która jest również liczbą wierszy w macierzy rozrzedowej.colStarts
: tablica zawiera indeksy dla każdej kolumny w tablicachrowIndices
inonZeroValues
.rowIndices
: tablica zawierająca indeksy wierszy odpowiednich elementów w tablicynonZeroValues
.nonZeroValues
: tablica, która zawiera wszystkie wartości inne niżzerowe w macierzy rozrzedzeniu.numNonZeroValues
: liczba wartości niezerowych w macierzy rozrzedzanej.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, size_t sequenceLength, const SparseIndexType* colStarts, const SparseIndexType* rowIndices, const ElementType* nonZeroValues, size_t numNonZeroValues, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value zawierający sekwencję próbek przy użyciu formatu wejściowego CSC rozrzedzeniowego. Długość sekwencji to liczba wierszy macierzy rozrzedowej. SekwencjaStartFlag określa, czy ta sekwencja jest nową sekwencją, czy kontynuacją poprzedniej sekwencji. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
dimension
: rozmiar wymiaru wektora jednorazowego.sequenceLength
: długość sekwencji, która jest również liczbą wierszy w macierzy rozrzedowej.colStarts
: tablica zawiera indeksy dla każdej kolumny w tablicachrowIndices
inonZeroValues
.rowIndices
: tablica zawierająca indeksy wierszy odpowiednich elementów w tablicynonZeroValues
.nonZeroValues
: tablica, która zawiera wszystkie wartości inne niżzerowe w macierzy rozrzedzeniu.numNonZeroValues
: liczba wartości niezerowych w macierzy rozrzedzanej.sequenceStartFlag
:true
wskazuje, że jest to nowa sekwencja.false
oznacza kontynuację poprzedniej sekwencji.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
Tworzenie wartości na podstawie elementu NDArrayView
static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const DeviceDescriptor& device, bool readOnly = false
Tworzy nowy obiekt Value na podstawie kolekcji obiektów NDArrayViews. Każda sekwencja w programie sequences
jest nową sekwencją.
Parametry:
sampleShape
: kształt tensora tworzonej wartości.sequences
: kolekcja sekwencji reprezentowanych przez element NDArrayView. Każdy element NDArrayView reprezentuje sekwencję.device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const std::vector<bool>& sequenceStartFlags, const DeviceDescriptor& device, bool readOnly, bool createNewCopy
Tworzy nowy obiekt Value na podstawie kolekcji obiektów NDArrayViews. SekwencjaStartFlags określa, czy sekwencja jest nową sekwencją, czy kontynuacją poprzedniej sekwencji.
Parametry:
sampleShape
: kształt tensora tworzonej wartości.sequences
: kolekcja sekwencji reprezentowanych przez element NDArrayView. Każdy element NDArrayView reprezentuje sekwencję.sequenceStartFlags
: kolekcja wartości logicznych. Każdy element reprezentuje, czy odpowiednia sekwencja wsequences
programie jest nową sekwencją (w przypadku ),true
czy kontynuacją poprzedniej sekwencji (w przypadku elementufalse
).device
: na którym urządzeniu należy utworzyć obiekt Value.readOnly
: wartość jest tylko do odczytu, jeśli ta flaga totrue
.
Kopiowanie danych z obiektu Value
template <typename ElementType> void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<ElementType>>& sequences
Kopiuje dane przechowywane w wartości do buforu dostarczonego przez sequences
program . Jest sequences
to lista sekwencji o zmiennej długości. Liczba elementów znajdujących się na zewnętrznej liście sequences
to liczba sekwencji w wartości. Każdy element listy zewnętrznej reprezentuje sekwencję. Każda sekwencja reprezentowana przez vector<ElementType>
element zawiera zmienną liczbę próbek. Każda próbka składa się ze stałej liczby elementów o typie ElementType
. Liczba elementów próbki jest określana przez kształt outputVariable
. Kształt zmiennej powinien odpowiadać kształtowi wartości. ElementType
to typ danych utworzonego obiektu Value. float
Obecnie i double
są obsługiwane.
Parametry:
outputVariable
: określa kształt i osie dynamiczne podczas kopiowania danych z tej wartości do .sequences
sequences
: bufor wyjściowy używany do przechowywania danych skopiowanych z wartości.
void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<size_t>>& sequences
Kopiuje dane przechowywane w obiekcie Value do buforu dostarczonego przez sequences
program . Jest sequences
to lista sekwencji o zmiennej długości. Liczba elementów znajdujących się na zewnętrznej liście sequences
to liczba sekwencji w wartości. Każdy element listy zewnętrznej reprezentuje sekwencję. Każda sekwencja reprezentowana przez vector<size_t>
element zawiera zmienną liczbę próbek. Każda próbka jest reprezentowana przez indeks wskazujący wartość niezerową w wektorze z gorącą jedyną wartością. Rozmiar wymiaru wektora jednorazowego powinien być zgodny z rozmiarem zdefiniowanym w obiekcie outputVariable
.
Parametry:
outputVariable
: określa kształt i osie dynamiczne podczas kopiowania danych z tej wartości do .sequences
sequences
: bufor wyjściowy używany do przechowywania danych skopiowanych z wartości.
template <typename ElementType> void CopyVariableValueTo(const Variable& outputVariable, size_t& sequenceLength, std::vector<SparseIndexType>& colStarts, std::vector<SparseIndexType>& rowIndices, std::vector<ElementType>& nonZeroValues, size_t& numNonZeroValues)
Skopiuj dane przechowywane w obiekcie Value do buforów reprezentujących sekwencję w formacie rozrzedzeniowym CSC. W razie potrzeby rozmiar bufora sekwencji zostanie zmieniony. Wartość powinna mieć ten sam kształt tensor co outputVariable. Po powrocie sequenceLength
parametr jest ustawiany na długość sekwencji przechowywanej w wartościach i colStarts
, rowIndices
i nonZeroValues
zawiera dane indeksów początkowych kolumn, indeksów wierszy i wartości innych niż zero, a numNonZeroValues
wartość jest ustawiona na liczbę wartości innych niż zero zawartych w kolumnie this
Value.
Parametry:
outputVariable
: określa kształt i osie dynamiczne podczas kopiowania danych z tej wartości do buforów.sequenceLength
: po powrocie jest ustawiona na długość sekwencji przechowywanej w wartości.colStarts
: po powrocie zawiera indeksy dononZeorValues
pierwszego elementu niezerowego każdej kolumny macierzy.rowIndices
: po powrocie zawiera indeksy wierszy każdego elementu niezerowego macierzy.nonZeroValues
: po powrocie zawiera wartości wszystkich elementów niezerowych macierzy.numNonZeroValues
: po powrocie zwraca liczbę niezerowych elementów macierzy.
Funkcje pomocnicze do manipulowania funkcją do oceny
FunctionPtr CNTK::Function::Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod::Clone, const std::unordered_map<Variable, Variable>& replacements = {}) const
W celu oceny ta metoda jest wywoływana w celu utworzenia sklonowanej funkcji, która może być następnie używana przez inny wątek do oceny tego samego modelu. W tym celu parameterCloneMethod
parametr powinien być ustawiony na wartość ParameterCloningMethod::Share
domyślną . Parametr replacements
określa wszelkie zamiany zmiennych, które są stosowane w sklonowanym wystąpieniu funkcji, i zwykle nie jest wymagane do oceny.
FunctionPtr CNTK::Function::FindByName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Znajdź funkcję z daną name
wartością na grafie funkcji bazowej "this" Function. Jeśli istnieje więcej niż jedna funkcja o tej samej nazwie, zgłaszany jest wyjątek. Jeśli nestedSearchInsideBlockFunction
wartość ma wartość true, przeszukiwane są również wszystkie funkcje wewnątrz funkcji blokowych.
std::vector<FunctionPtr> CNTK::Function::FindAllWithName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Znajdź listę funkcji z wartością name
podaną na grafie funkcji bazowej "this". Jeśli nestedSearchInsideBlockFunction
wartość ma wartość true, przeszukiwane są również wszystkie funkcje wewnątrz funkcji blokowych.
FunctionPtr CNTK::Combine(const std::vector<Variable>& operands, const std::wstring& name = L""
Utwórz nowe wystąpienie funkcji, które łączy dane wyjściowe określonej listy "operandów" funkcji. "Dane wyjściowe" nowej funkcji są częścią "Outputs" każdej z określonych funkcji "operandów". Na przykład podczas tworzenia modelu klasyfikacji zazwyczaj funkcja utraty CrossEntropy i funkcja ClassificationError składają się z korzeni grafu obliczeniowego, który może mieć wartość "Combine"d w celu utworzenia pojedynczej funkcji z 2 danymi wyjściowymi; Viz. Dane wyjściowe funkcji CrossEntropy loss i ClassificationError.
FunctionPtr CNTK::AsComposite(const FunctionPtr& rootFunction, const std::wstring& name = L""
Tworzy funkcję złożoną, która ma określony rootFunction
element główny. Złożony oznacza funkcję wyższego poziomu hermetyzując cały graf funkcji będących podstawą określonego elementu rootFunction
.
FunctionPtr CNTK::Alias(const Variable& operand, const std::wstring& name = L""
Tworzy nowe wystąpienie funkcji, które jest tylko aliasem określonego operand
elementu .
Szczegółowe informacje o typach danych używanych przez powyższe funkcje można znaleźć w pliku CNTKLibrary.h .
Przykłady
Przykłady języka C++ CNTKLibraryCPPEvalCPUOnlyExamples i CNTKLibraryCPPEvalGPUExamples pokazują użycie biblioteki CNTK do oceny. W przykładach pokazano również, jak wykonać wiele ocen równolegle przy użyciu wielu wątków i współużytkować parametry modelu między wątkami.