CNTK Library Eval C++-API
Die C++-CNTK Library for Evaluation basiert auf CNTK Bibliotheks-API. Die folgenden Methoden werden verwendet, um ein Modell auszuwerten.
Laden eines Modells
static FunctionPtr CNTK::Function::Load(const std::wstring& modelFile, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Diese Methode lädt eine Modelldatei und gibt den Zeiger auf die Funktion zurück, die das geladene Modell darstellt. Eine Funktion in CNTK bezeichnet ein Berechnungsdiagramm, das aus primitiven Funktionen oder zusammengesetzten Funktionen mit null oder mehr Eingabeargumenten und mindestens einer Ausgabe besteht. Dies modelFile
ist der Modelldateipfad. Dies computeDevice
gibt das Gerät an, das die Auswertung ausführen soll.
static FunctionPtr CNTK::Function::Load(char *modelBuffer, size_t modelBufferLength, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Diese Methode lädt ein Modell aus einem Speicherpuffer und gibt den Zeiger auf die Funktion zurück, die das geladene Modell darstellt. Die modelBuffer
Punkte auf den Puffer, der den serialisierten Modellinhalt enthält, und dies modelBufferLength
ist die Pufferlänge. Dies computeDevice
gibt das Gerät an, das die Auswertung ausführen soll.
Auswerten einer Funktion
void CNTK::Function::Evaluate(const std::unordered_map<Variable, ValuePtr>& arguments, std::unordered_map<Variable, ValuePtr>& outputs, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()
Diese Methode startet die Auswertung der Funktion, die this
das Modell mit angegebenen Parametern darstellt. Die arguments
werte aller für die Auswertung erforderlichen Eingabevariablen und speichern die outputs
Werte von Ausgabevariablen. Der Speicher von Ausgabewerten kann entweder vom Aufrufer vorab zugewiesen werden, oder vom System, wenn die ValuePtr-Zuordnung vom Aufrufer als NULL übergeben wird. Dies computeDevice
gibt das Gerät an, das die Auswertung ausführen soll.
Erstellen eines Werts mit dichter Eingabe
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(const NDShape& sampleShape, const std::vector<ElementType>& batchData, const DeviceDescriptor& device, bool readOnly = false
Erstellt ein neues Value-Objekt, das einen Batch von Beispielen enthält. Die Anzahl der Beispiele im Batch ist die Anzahl der Elemente, batchData
die durch die Größe sampleShape
geteilt werden (Ein Laufzeitfehler tritt auf, wenn der Rest nicht null ist). Das erstellte Value-Objekt enthält eine Kopie der angegebenen Daten in batchData
. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensorform des Value-Objekts.batchData
: die Daten, die im Value-Objekt enthalten sind.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Das Value-Objekt ist schreibgeschützt, wenn dieses Flag lautettrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, const DeviceDescriptor& device, bool readOnly = false
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält. Das erstellte Value-Objekt enthält eine Kopie der angegebenen Daten in sequenceData
. Die Sequenzlänge ist die Anzahl der Elemente, sequenceData
die durch die Größe sampleShape
geteilt werden (Ein Laufzeitfehler tritt auf, wenn der Rest nicht null ist). Die erstellte Sequenz ist eine neue Sequenz. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensorform des Werts.sequenceData
: die Daten, die im Wert enthalten sind.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, bool sequenceStartFlag, const DeviceDescriptor& device, bool readOnly = false
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält. Das erstellte Value-Objekt enthält eine Kopie der angegebenen Daten in sequenceData
. Die Sequenzlänge ist die Anzahl der Elemente, sequenceData
die durch die Größe sampleShape
geteilt werden (Ein Laufzeitfehler tritt auf, wenn der Rest nicht null ist). Die SequenceStartFlag gibt an, ob es sich bei dieser Sequenz um eine neue Sequenz oder Fortsetzung einer vorherigen Sequenz im gleichen Index in der Liste der Sequenzen aus einem vorherigen Aufruf dieser Methode handelt. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensorform des Werts.sequenceData
: die Daten, die im Wert enthalten sind.sequenceStartFlag
:true
gibt an, dass es sich um eine neue Sequenz handelt.false
bedeutet eine Fortsetzung einer vorherigen Sequenz.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatchOfSequences(const NDShape& sampleShape, const std::vector<std::vector<ElementType>>& batchOfSequences, const DeviceDescriptor& device, bool readOnly = false
Erstellt ein neues Value-Objekt, das eine Reihe von Variablenlängensequenzen enthält. Das erstellte Value-Objekt enthält eine Kopie der angegebenen Daten in batchOfSequences
. Die Anzahl der Sequenzen im Batch ist die Größe von batchOfSequences
. Die Länge jeder Sequenz ist die Anzahl der Elemente in der entsprechenden Sequenz batchOfSequences
, die durch die Größe sampleShape
geteilt wird (Ein Laufzeitfehler tritt auf, wenn der Rest nicht null ist). Jede Sequenz in batchOfSequences
ist eine neue Sequenz. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensorform des Werts.batchOfSequences
: die Daten, die im Wert gespeichert werden sollen. Das Äußerevector
stellt eine Auflistung von Sequenzen mit variabler Länge dar, und das Innerevector
stellt jede einzelne Sequenz dar.device
: Auf welchem Gerät der Wert erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das eine Reihe von Variablenlängensequenzen enthält. Das erstellte Value-Objekt enthält eine Kopie der angegebenen Daten in batchOfSequences
. Die Anzahl der Sequenzen im Batch ist die Größe von batchOfSequences
. Die Länge jeder Sequenz ist die Anzahl der Elemente in der entsprechenden Sequenz batchOfSequences
, die durch die Größe sampleShape
geteilt wird (Ein Laufzeitfehler tritt auf, wenn der Rest nicht null ist). ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensorform des Werts.batchOfSequences
: die Daten, die im Wert gespeichert werden sollen. Das Äußerevector
stellt eine Auflistung von Sequenzen mit variabler Länge dar, und das Innerevector
stellt jede einzelne Sequenz dar.sequenceStartFlags
: Eine Sammlung boolescher Werte. Jedes Element stellt dar, ob es sich bei der entsprechenden SequenzbatchOfSequences
um eine neue Sequenz (im Fall vontrue
) oder eine Fortsetzung einer vorherigen Sequenz (im Fall vonfalse
).device
: Auf welchem Gerät der Wert erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
Erstellen eines Werts mithilfe einer Vektoreingabe mit einem Hot-Vector
template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(size_t dimension, const std::vector<size_t>& batchData, const DeviceDescriptor& device, bool readOnly = false)
Erstellt ein neues Value-Objekt, das einen Batch von Beispielen enthält. Jedes Beispiel wird durch einen Indexwert dargestellt, der auf den Nicht-Null-Wert im Vektor der dimension
Elemente verweist. Die Anzahl der Beispiele im Batch ist die Anzahl der Elemente in batchData
. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: Die Größe der Dimension des Vektors mit einem heißen Vektor.batchData
: die Sammlung von Indizes, die den Batch von Beispielen darstellen.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, const DeviceDescriptor& device, bool readOnly = false)
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält. Jedes Beispiel wird durch einen Indexwert dargestellt, der auf den Nicht-Null-Wert im Vektor der dimension
Elemente verweist. Die Sequenzlänge ist die Anzahl der Elemente in sequenceData
. Jede Sequenz ist eine neue Sequenz. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: Die Größe der Dimension des Vektors mit einem heißen Vektor.sequenceData
: die Sammlung von Indizes, die die Abfolge von Beispielen darstellen.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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)
Erstellt ein neues Value-Objekt mit einer Sequenz von Beispielen. Jedes Beispiel wird durch einen Indexwert dargestellt, der auf den Nicht-Null-Wert im 1-heißen Vektor von dimension
Elementen verweist. Der seqStartFlag gibt an, ob diese Sequenz eine neue Sequenz oder Fortsetzung einer vorherigen Sequenz in der Liste der Sequenzen aus einem vorherigen Aufruf dieser Methode ist. Die Sequenzlänge ist die Anzahl der Elemente in sequenceData
. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: die Größe der Dimension des Vektors mit einem heißen Vektor.sequenceData
: die Sammlung von Indizes, die die Sequenz von Beispielen darstellen.sequenceStartFlag
:true
gibt an, dass es eine neue Sequenz ist.false
bedeutet eine Fortsetzung einer vorherigen Sequenz.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das einen Batch mit variablen Längensequenzen enthält. Jedes Beispiel wird durch einen Indexwert dargestellt, der auf den Nicht-Null-Wert im 1-heißen Vektor von dimension
Elementen verweist. Die Anzahl der Sequenzen ist die Anzahl der Elemente in der äußeren Liste von batchOfSequences
. Die Länge jeder Sequenz ist die Anzahl der Elemente der entsprechenden Sequenz in der inneren Liste der batchOfSequences
. Jede Sequenz ist eine neue Sequenz batchOfSequences
. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: die Größe der Dimension des Vektors mit einem heißen Vektor.batchOfSequences
: die Sammlung von Indizes, die Sequenzen von Beispielen darstellen. Das Äußerevector
stellt eine Sammlung von Sequenzen mit variabler Länge dar, und das Innerevector
stellt jede einzelne Sequenz dar.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das einen Batch mit variablen Längensequenzen enthält. Jedes Beispiel wird durch einen Indexwert dargestellt, der auf den Nicht-Null-Wert im 1-heißen Vektor von dimension
Elementen verweist. Die Anzahl der Sequenzen ist die Anzahl der Elemente in der äußeren Liste von batchOfSequences
. Die Länge jeder Sequenz ist die Anzahl der Elemente der entsprechenden Sequenz in der inneren Liste der batchOfSequences
. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: die Größe der Dimension des Vektors mit einem heißen Vektor.batchOfSequences
: die Sammlung von Indizes, die Sequenzen von Beispielen darstellen. Das Äußerevector
stellt eine Sammlung von Sequenzen mit variabler Länge dar, und das Innerevector
stellt jede einzelne Sequenz dar.sequenceStartFlags
: Eine Sammlung von booleschen Werten. Jedes Element stellt dar, ob es sich bei der entsprechenden Sequenz um eine neue Sequenz (imtrue
Fall von ) oder eine Fortsetzung einer vorherigen SequenzbatchOfSequences
(beifalse
Fall von ).device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
Erstellen eines Werts mithilfe von sparse CSC-Eingaben
Derzeit wird das komprimierte Spaltenformat (CSC) unterstützt. Das CSC-Format speichert die Matrix im Spalten-Hauptformat, und das Array, das die Spaltenindizes enthält, wird komprimiert. Eine Matrix im CSC-Format wird durch die folgenden Parameter dargestellt:
nonZeroValues
: das Datenarray, das alle nichtzero-Werte der Matrix im Spalten-Hauptformat enthält.rowIndices
: das Array, das die Zeilenindizes der entsprechenden Elemente im ArraynonZeroValues
enthält.colStarts
: das Array, das Indizes in den ArraysrowIndices
undnonZeroValues
.
Eine detaillierte Beschreibung des CSC-Formats finden Sie hier.
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
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält, die das CSC-Sparse-Eingabeformat verwenden. Die Sequenzlänge ist die Anzahl der Zeilen der sparse Matrix. Die erstellte Sequenz ist eine neue Sequenz. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensor-Form des Werts. Für die geringe Eingabe muss die führende Shape-Form mit der Gesamtgröße der Tensor-Form identisch sein.sequenceLength
: die Sequenzlänge, die auch die Anzahl der Zeilen in der sparse Matrix ist.colStarts
: Das Array enthält Indizes für jede Spalte in den ArraysrowIndices
undnonZeroValues
.rowIndices
: das Array, das die Zeilenindizes der entsprechenden Elemente im ArraynonZeroValues
enthält.nonZeroValues
: das Array, das alle Nichtzero-Werte in der Sparsematrix enthält.numNonZeroValues
: die Anzahl der nichtzero-Werte in der sparse Matrix.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält, die das CSC-Sparse-Eingabeformat verwenden. Die Sequenzlänge ist die Anzahl der Zeilen der sparse Matrix. Der sequenceStartFlag gibt an, ob diese Sequenz eine neue Sequenz oder Fortsetzung einer vorherigen Sequenz aus einem vorherigen Aufruf dieser Methode ist. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
sampleShape
: die Tensor-Form des Werts. Für die geringe Eingabe muss die führende Shape-Form mit der Gesamtgröße der Tensor-Form identisch sein.sequenceLength
: die Sequenzlänge, die auch die Anzahl der Zeilen in der sparse Matrix ist.colStarts
: Das Array enthält Indizes für jede Spalte in den ArraysrowIndices
undnonZeroValues
.rowIndices
: das Array, das die Zeilenindizes der entsprechenden Elemente im ArraynonZeroValues
enthält.nonZeroValues
: das Array, das alle Nichtzero-Werte in der Sparsematrix enthält.numNonZeroValues
: die Anzahl der nichtzero-Werte in der sparse Matrix.sequenceStartFlag
:true
gibt an, dass es eine neue Sequenz ist.false
bedeutet eine Fortsetzung einer vorherigen Sequenz.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält, die das CSC-Sparse-Eingabeformat verwenden. Die Sequenzlänge ist die Anzahl der Zeilen der sparse Matrix. Die erstellte Sequenz ist eine neue Sequenz. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: die Größe der Dimension des Vektors mit einem heißen Vektor.sequenceLength
: die Sequenzlänge, die auch die Anzahl der Zeilen in der sparse Matrix ist.colStarts
: Das Array enthält Indizes für jede Spalte in den ArraysrowIndices
undnonZeroValues
.rowIndices
: das Array, das die Zeilenindizes der entsprechenden Elemente im ArraynonZeroValues
enthält.nonZeroValues
: das Array, das alle Nichtzero-Werte in der Sparsematrix enthält.numNonZeroValues
: die Anzahl der nichtzero-Werte in der sparse Matrix.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt, das eine Sequenz von Beispielen enthält, die das CSC-Sparse-Eingabeformat verwenden. Die Sequenzlänge ist die Anzahl der Zeilen der sparse Matrix. Die SequenzStartFlag gibt an, ob diese Sequenz eine neue Sequenz oder Fortsetzung einer vorherigen Sequenz ist. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
dimension
: Die Größe der Dimension des Vektors mit einem heißen Vektor.sequenceLength
: die Sequenzlänge, die auch die Anzahl der Zeilen in der sparsamen Matrix ist.colStarts
: Das Array enthält Indizes für jede Spalte in den ArraysrowIndices
undnonZeroValues
.rowIndices
: das Array, das die Zeilenindizes der entsprechenden Elemente im ArraynonZeroValues
enthält.nonZeroValues
: das Array, das alle Nichtzerowerte in der sparse Matrix enthält.numNonZeroValues
: die Anzahl der Nichtzerowerte in der sparse Matrix.sequenceStartFlag
:true
gibt an, dass es sich um eine neue Sequenz handelt.false
bedeutet eine Fortsetzung einer vorherigen Sequenz.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
Erstellen eines Werts aus NDArrayView
static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const DeviceDescriptor& device, bool readOnly = false
Erstellt ein neues Value-Objekt basierend auf einer Auflistung von NDArrayViews. Jede Sequenz in sequences
ist eine neue Sequenz.
Parameter:
sampleShape
: die Tensorform des zu erstellenden Werts.sequences
: eine Sammlung von Sequenzen, die durch NDArrayView dargestellt werden. Jede NDArrayView stellt eine Sequenz dar.device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
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
Erstellt ein neues Value-Objekt basierend auf einer Auflistung von NDArrayViews. Die SequenceStartFlags gibt an, ob eine Sequenz eine neue Sequenz oder Fortsetzung einer vorherigen Sequenz ist.
Parameter:
sampleShape
: die Tensorform des zu erstellenden Werts.sequences
: eine Sammlung von Sequenzen, die durch NDArrayView dargestellt werden. Jede NDArrayView stellt eine Sequenz dar.sequenceStartFlags
: Eine Sammlung boolescher Werte. Jedes Element stellt dar, ob es sich bei der entsprechenden Sequenzsequences
um eine neue Sequenz (im Fall vontrue
) oder eine Fortsetzung einer vorherigen Sequenz (im Fall vonfalse
).device
: Auf welchem Gerät das Value-Objekt erstellt werden soll.readOnly
: Der Wert ist schreibgeschützt, wenn dieses Flag lautettrue
.
Kopieren von Daten aus einem Value-Objekt
template <typename ElementType> void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<ElementType>>& sequences
Kopiert die im Wert gespeicherten Daten in den von sequences
. Dies sequences
ist eine Liste der Sequenzen mit variabler Länge. Die Anzahl der Elemente, die in der äußeren Liste sequences
enthalten sind, ist die Anzahl der Sequenzen im Wert. Jedes Element der äußeren Liste stellt eine Sequenz dar. Jede Sequenz, dargestellt durch vector<ElementType>
, enthält eine variable Anzahl von Beispielen. Jedes Beispiel besteht aus einer festen Anzahl von Elementen mit Typ von ElementType
. Die Anzahl der Elemente eines Beispiels wird durch die Form von outputVariable
bestimmt. Die Form der Variablen sollte mit der Form des Werts übereinstimmen. ElementType
ist der Datentyp des erstellten Value-Objekts. float
Derzeit und double
werden unterstützt.
Parameter:
outputVariable
: zeigt die Form und die dynamischen Achsen an, wenn Daten aus diesem Wert in densequences
Wert kopiert werden.sequences
: Der Ausgabepuffer, der zum Speichern der aus dem Wert kopierten Daten verwendet wird.
void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<size_t>>& sequences
Kopiert die im Value-Objekt gespeicherten Daten in den von sequences
. Dies sequences
ist eine Liste der Sequenzen mit variabler Länge. Die Anzahl der Elemente, die in der äußeren Liste sequences
enthalten sind, ist die Anzahl der Sequenzen im Wert. Jedes Element der äußeren Liste stellt eine Sequenz dar. Jede Sequenz, dargestellt durch vector<size_t>
, enthält eine variable Anzahl von Beispielen. Jedes Beispiel wird durch einen Index dargestellt, der auf den Nicht-Null-Wert im vektor zeigt. Die Bemaßungsgröße des 1:0-Vektors sollte übereinstimmen, die im outputVariable
Bereich definiert sind.
Parameter:
outputVariable
: zeigt die Form und die dynamischen Achsen an, wenn Daten aus diesem Wert in densequences
Wert kopiert werden.sequences
: Der Ausgabepuffer, der zum Speichern der aus dem Wert kopierten Daten verwendet wird.
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)
Kopieren Sie die im Value-Objekt gespeicherten Daten in die Puffer, die eine Sequenz im CSC-Sparformat darstellen. Der Sequenzpuffer wird bei Bedarf geändert. Der Wert sollte dieselbe Tensorform wie outputVariable aufweisen. Bei der Rückgabe wird die Länge der sequenz festgelegt, sequenceLength
die im Wert gespeichert ist, und colStarts
rowIndices
enthält nonZeroValues
die Daten von Spaltenstartindizes, Zeilenindizes und Nicht-Null-Werten und numNonZeroValues
wird auf die Anzahl der in this
Value enthaltenen Nicht-Null-Werte festgelegt.
Parameter:
outputVariable
: kennzeichnet die Form und die dynamischen Achsen beim Kopieren von Daten aus diesem Wert in die Puffer.sequenceLength
: Für die Rückgabe wird sie auf die Länge der sequenz festgelegt, die im Wert gespeichert ist.colStarts
: bei der Rückgabe enthält sie Indizes in dasnonZeorValues
erste Nicht-Null-Element jeder Spalte der Matrix.rowIndices
: bei der Rückgabe enthält sie die Zeilenindizes jedes Nicht-Null-Elements der Matrix.nonZeroValues
: für die Rückgabe enthält sie Werte aller Nicht-Null-Elemente der Matrix.numNonZeroValues
: gibt die Anzahl der Nicht-Null-Elemente der Matrix zurück.
Hilfsfunktionen zum Bearbeiten der zu bewertenden Funktion
FunctionPtr CNTK::Function::Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod::Clone, const std::unordered_map<Variable, Variable>& replacements = {}) const
Für die Auswertung wird diese Methode aufgerufen, um eine geklonte Funktion zu erstellen, die dann von einem anderen Thread verwendet werden kann, um dasselbe Modell auszuwerten. Für diesen Zweck sollte der parameterCloneMethod
Standardwert auf den Standardwert ParameterCloningMethod::Share
festgelegt werden. Der Parameter replacements
gibt alle Variablenersetzungen an, die in der Klonfunktionsinstanz angewendet werden, und ist in der Regel nicht für die Auswertung erforderlich.
FunctionPtr CNTK::Function::FindByName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Suchen Sie eine Funktion mit der im name
Funktionsdiagramm zugrunde liegenden Funktion "this". Wenn mehrere Funktionen mit demselben Namen vorhanden sind, wird eine Ausnahme ausgelöst. Ist nestedSearchInsideBlockFunction
dies der Fall, werden auch alle Funktionen innerhalb von Blockfunktionen durchsucht.
std::vector<FunctionPtr> CNTK::Function::FindAllWithName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false
Suchen Sie eine Liste der Funktionen, die im Funktionsdiagramm zugrunde liegenden Funktion "this" angegeben name
sind. Ist nestedSearchInsideBlockFunction
dies der Fall, werden auch alle Funktionen innerhalb von Blockfunktionen durchsucht.
FunctionPtr CNTK::Combine(const std::vector<Variable>& operands, const std::wstring& name = L""
Erstellen Sie eine neue Funktionsinstanz, die die Ausgabe der angegebenen Liste von "Operanden" von Funktionen kombiniert. Die "Outputs" der neuen Funktion sind die Union der "Outputs" jeder der angegebenen "operands"-Funktionen. Beispiel: Beim Erstellen eines Klassifizierungsmodells umfassen normalerweise die CrossEntropy Loss Function und die ClassificationError-Funktion die Wurzeln des Berechnungsdiagramms, das "Kombinieren"d sein kann, um eine einzelne Funktion mit 2 Ausgaben zu erstellen; Nämlich. CrossEntropy Loss and ClassificationError output.
FunctionPtr CNTK::AsComposite(const FunctionPtr& rootFunction, const std::wstring& name = L""
Erstellt eine zusammengesetzte Funktion, die als Stamm angegeben rootFunction
ist. Das Zusammengesetzte bezeichnet eine Funktion mit höherer Ebene, die das gesamte Diagramm von Funktionen kapselt, das dem angegebenen zugrunde rootFunction
liegt.
FunctionPtr CNTK::Alias(const Variable& operand, const std::wstring& name = L""
Erstellt eine neue Funktionsinstanz, die nur ein Alias der angegebenen operand
ist.
Weitere Informationen zu Datentypen, die von den oben genannten Funktionen verwendet werden, finden Sie unter "CNTKLibrary.h ".
Beispiele
Die C++-Beispiele CNTKLibraryCPPEvalCPUOnlyExamples und CNTKLibraryCPPEvalGPUExamples zeigen die Verwendung von CNTK Library zur Auswertung. In den Beispielen wird auch gezeigt, wie mehrere Auswertungen parallel mithilfe mehrerer Threads und Freigabemodellparameter unter Threads ausgeführt werden.