Freigeben über


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 lautet true.

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 lautet true.

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 lautet true.

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ßere vector stellt eine Auflistung von Sequenzen mit variabler Länge dar, und das Innere vector stellt jede einzelne Sequenz dar.
  • device: Auf welchem Gerät der Wert erstellt werden soll.
  • readOnly: Der Wert ist schreibgeschützt, wenn dieses Flag lautet true.

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ßere vector stellt eine Auflistung von Sequenzen mit variabler Länge dar, und das Innere vector stellt jede einzelne Sequenz dar.
  • sequenceStartFlags: Eine Sammlung boolescher Werte. Jedes Element stellt dar, ob es sich bei der entsprechenden Sequenz batchOfSequences um eine neue Sequenz (im Fall von true) oder eine Fortsetzung einer vorherigen Sequenz (im Fall von false).
  • device: Auf welchem Gerät der Wert erstellt werden soll.
  • readOnly: Der Wert ist schreibgeschützt, wenn dieses Flag lautet true.

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 lautet true.

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 lautet true.

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 lautet true.

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ßere vector stellt eine Sammlung von Sequenzen mit variabler Länge dar, und das Innere vector 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 lautet true.

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ßere vector stellt eine Sammlung von Sequenzen mit variabler Länge dar, und das Innere vector 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 (im trueFall von ) oder eine Fortsetzung einer vorherigen Sequenz batchOfSequences (bei falseFall von ).
  • device: Auf welchem Gerät das Value-Objekt erstellt werden soll.
  • readOnly: Der Wert ist schreibgeschützt, wenn dieses Flag lautet true.

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 Array nonZeroValuesenthält.
  • colStarts: das Array, das Indizes in den Arrays rowIndices und nonZeroValues.

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 Arrays rowIndices und nonZeroValues.
  • rowIndices: das Array, das die Zeilenindizes der entsprechenden Elemente im Array nonZeroValuesenthä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 lautet true.

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 Arrays rowIndices und nonZeroValues.
  • rowIndices: das Array, das die Zeilenindizes der entsprechenden Elemente im Array nonZeroValuesenthä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 lautet true.

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 Arrays rowIndices und nonZeroValues.
  • rowIndices: das Array, das die Zeilenindizes der entsprechenden Elemente im Array nonZeroValuesenthä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 lautet true.

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 Arrays rowIndices und nonZeroValues.
  • rowIndices: das Array, das die Zeilenindizes der entsprechenden Elemente im Array nonZeroValuesenthä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 lautet true.

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 lautet true.

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 Sequenz sequences um eine neue Sequenz (im Fall von true) oder eine Fortsetzung einer vorherigen Sequenz (im Fall von false).
  • device: Auf welchem Gerät das Value-Objekt erstellt werden soll.
  • readOnly: Der Wert ist schreibgeschützt, wenn dieses Flag lautet true.

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 outputVariablebestimmt. 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 den sequencesWert 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 outputVariableBereich definiert sind.

Parameter:

  • outputVariable: zeigt die Form und die dynamischen Achsen an, wenn Daten aus diesem Wert in den sequencesWert 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 colStartsrowIndices 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 das nonZeorValues 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::Sharefestgelegt 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 rootFunctionliegt.


FunctionPtr CNTK::Alias(const Variable& operand, const std::wstring& name = L""

Erstellt eine neue Funktionsinstanz, die nur ein Alias der angegebenen operandist.


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.