Delen via


CNTK Library Eval C++ API

De C++ CNTK Library for Evaluation is gebaseerd op CNTK Library-API. De volgende methoden worden gebruikt om een model te evalueren.


Een model laden


static FunctionPtr CNTK::Function::Load(const std::wstring& modelFile, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()

Met deze methode wordt een modelbestand geladen en wordt de aanwijzer geretourneerd naar de functie die het geladen model vertegenwoordigt. Een functie in CNTK geeft een berekeningsgrafiek aan die bestaat uit primitieve functies of samengestelde functies met nul of meer invoerargumenten en een of meer uitvoer. Het modelFile is het pad naar het modelbestand. Hiermee computeDevice geeft u het apparaat op om evaluatie uit te voeren.


static FunctionPtr CNTK::Function::Load(char *modelBuffer, size_t modelBufferLength, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()

Met deze methode wordt een model uit een geheugenbuffer geladen en wordt de aanwijzer geretourneerd naar de functie die het geladen model vertegenwoordigt. De modelBuffer buffer verwijst naar de buffer met de inhoud van het geserialiseerde model en de modelBufferLength bufferlengte. Hiermee computeDevice geeft u het apparaat op om evaluatie uit te voeren.


Een functie evalueren


void CNTK::Function::Evaluate(const std::unordered_map<Variable, ValuePtr>& arguments, std::unordered_map<Variable, ValuePtr>& outputs, const DeviceDescriptor& computeDevice = DeviceDescriptor::UseDefaultDevice()

Met deze methode wordt de evaluatie gestart van de this functie die het model vertegenwoordigt met opgegeven parameters. De arguments bevat waarden van alle invoervariabelen die vereist zijn voor evaluatie en het outputs opslaan van de waarden van uitvoervariabelen. De opslag van uitvoerwaarden kan vooraf worden toegewezen door de aanroeper of door het systeem als de WaardePtr-toewijzing wordt doorgegeven als null door de aanroeper. Hiermee computeDevice geeft u het apparaat op om evaluatie uit te voeren.


Een waarde maken met behulp van compacte invoer


template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(const NDShape& sampleShape, const std::vector<ElementType>& batchData, const DeviceDescriptor& device, bool readOnly = false

Hiermee maakt u een nieuw waardeobject met een batch voorbeelden. Het aantal steekproeven in de batch is het aantal elementen in batchData gedeeld door de grootte van sampleShape (er treedt een runtimefout op als de rest niet nul is). Het gemaakte waardeobject bevat een kopie van de opgegeven gegevens in batchData. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van het object Waarde.
  • batchData: de gegevens die moeten worden opgenomen in het waardeobject.
  • device: op welk apparaat het waardeobject moet worden gemaakt.
  • readOnly: het waardeobject is alleen-lezen als deze vlag is true.

template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(const NDShape& sampleShape, const std::vector<ElementType>& sequenceData, const DeviceDescriptor& device, bool readOnly = false

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden. Het gemaakte waardeobject bevat een kopie van de opgegeven gegevens in sequenceData. De lengte van de reeks is het aantal elementen in sequenceData gedeeld door de grootte van sampleShape (een runtimefout treedt op als de rest niet nul is). De gemaakte reeks is een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde.
  • sequenceData: de gegevens die moeten worden opgenomen in de waarde.
  • device: op welk apparaat het waardeobject moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden. Het gemaakte waardeobject bevat een kopie van de opgegeven gegevens in sequenceData. De lengte van de reeks is het aantal elementen in sequenceData gedeeld door de grootte van sampleShape (een runtimefout treedt op als de rest niet nul is). De sequenceStartFlag geeft aan of deze reeks een nieuwe reeks of voortzetting is van een vorige reeks in dezelfde index in de reeksenlijst van een vorige aanroep naar deze methode. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde.
  • sequenceData: de gegevens die moeten worden opgenomen in de waarde.
  • sequenceStartFlag: true geeft aan dat het een nieuwe reeks is. false betekent een voortzetting van een vorige reeks.
  • device: op welk apparaat het waardeobject moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een batch met variabele lengtereeksen. Het gemaakte waardeobject bevat een kopie van de opgegeven gegevens in batchOfSequences. Het aantal reeksen in de batch is de grootte van batchOfSequences. De lengte van elke reeks is het aantal elementen in de bijbehorende reeks gedeeld batchOfSequences door de grootte van sampleShape (er treedt een runtimefout op als de rest niet nul is). Elke reeks in batchOfSequences is een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde.
  • batchOfSequences: de gegevens die moeten worden opgeslagen in de waarde. Het buitenste vector vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenkant vector vertegenwoordigt elke afzonderlijke reeks.
  • device: op welk apparaat de waarde moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een batch met variabele lengtereeksen. Het gemaakte waardeobject bevat een kopie van de opgegeven gegevens in batchOfSequences. Het aantal reeksen in de batch is de grootte van batchOfSequences. De lengte van elke reeks is het aantal elementen in de bijbehorende reeks gedeeld batchOfSequences door de grootte van sampleShape (er treedt een runtimefout op als de rest niet nul is). ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde.
  • batchOfSequences: de gegevens die moeten worden opgeslagen in de waarde. Het buitenste vector vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenkant vector vertegenwoordigt elke afzonderlijke reeks.
  • sequenceStartFlags: Een verzameling booleaanse waarden. Elk element geeft aan of de bijbehorende reeks een nieuwe reeks batchOfSequences is (in het geval van true) of een vervolg van een vorige reeks (in het geval van false).
  • device: op welk apparaat de waarde moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is true.

Een waarde maken met behulp van een dynamische vectorinvoer


template <typename ElementType> static ValuePtr CNTK::Value::CreateBatch(size_t dimension, const std::vector<size_t>& batchData, const DeviceDescriptor& device, bool readOnly = false)

Hiermee maakt u een nieuw waardeobject met een batch voorbeelden. Elk voorbeeld wordt vertegenwoordigd door een indexwaarde die verwijst naar de niet-nulwaarde in de een-dynamische vector van dimension elementen. Het aantal steekproeven in de batch is het aantal elementen in batchData. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de een-dynamische vector.
  • batchData: de verzameling indexen die de batch met steekproeven vertegenwoordigen.
  • device: op welk apparaat het waardeobject moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is true.

template <typename ElementType> static ValuePtr CNTK::Value::CreateSequence(size_t dimension, const std::vector<size_t>& sequenceData, const DeviceDescriptor& device, bool readOnly = false)

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden. Elk voorbeeld wordt vertegenwoordigd door een indexwaarde die verwijst naar de niet-nulwaarde in de een-dynamische vector van dimension elementen. De reekslengte is het aantal elementen in sequenceData. Elke reeks is een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de een-dynamische vector.
  • sequenceData: de verzameling indexen die de reeks voorbeelden vertegenwoordigen.
  • device: op welk apparaat het waardeobject moet worden gemaakt.
  • readOnly: de waarde is alleen-lezen als deze vlag is 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)

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden. Elk voorbeeld wordt vertegenwoordigd door een indexwaarde die verwijst naar de niet-nulwaarde in de een-hot vector met dimension elementen. De seqStartFlag geeft aan of deze reeks een nieuwe reeks of voortzetting is van een eerdere reeks in dezelfde index in de reeksenlijst van een eerdere aanroep naar deze methode. De reekslengte is het aantal elementen in sequenceData. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de one-hot vector.
  • sequenceData: de verzameling indexen die de reeks voorbeelden vertegenwoordigen.
  • sequenceStartFlag: true geeft aan dat het een nieuwe reeks is. false betekent een voortzetting van een vorige reeks.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een batch variabele lengtereeksen. Elk voorbeeld wordt vertegenwoordigd door een indexwaarde die verwijst naar de niet-nulwaarde in de een-hot vector met dimension elementen. Het aantal reeksen is het aantal elementen in de buitenste lijst van batchOfSequences. De lengte van elke reeks is het aantal elementen van de bijbehorende reeks in de binnenste lijst van batchOfSequences. Elke reeks is batchOfSequences een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de one-hot vector.
  • batchOfSequences: de verzameling indexen die reeksen van steekproeven vertegenwoordigen. De buitenkant vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenste vectorvector vertegenwoordigt elke afzonderlijke reeks.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een batch variabele lengtereeksen. Elk voorbeeld wordt vertegenwoordigd door een indexwaarde die verwijst naar de niet-nulwaarde in de een-hot vector met dimension elementen. Het aantal reeksen is het aantal elementen in de buitenste lijst van batchOfSequences. De lengte van elke reeks is het aantal elementen van de bijbehorende reeks in de binnenste lijst van batchOfSequences. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de one-hot vector.
  • batchOfSequences: de verzameling indexen die reeksen van steekproeven vertegenwoordigen. De buitenkant vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenste vectorvector vertegenwoordigt elke afzonderlijke reeks.
  • sequenceStartFlags: Een verzameling booleaanse waarden. Elk element geeft aan of de bijbehorende reeks batchOfSequences een nieuwe reeks is (in het geval van true) of een voortzetting van een vorige reeks (in het geval van false).
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is true.

Een waarde maken met behulp van Sparse CSC-invoer

Momenteel wordt de gecomprimeerde Sparse-kolomindeling (CSC) ondersteund. De CSC-indeling slaat de matrix op in kolom-primaire indeling en de matrix met de kolomindexen wordt gecomprimeerd. Een matrix in CSC-indeling wordt vertegenwoordigd door de volgende parameters:

  • nonZeroValues: de gegevensmatrix met alle niet-nulwaarden van de matrix in kolom-primaire indeling.
  • rowIndices: de matrix die de rijindexen van de bijbehorende elementen in de matrix nonZeroValuesbevat.
  • colStarts: de matrix met indexen in de matrices rowIndices en nonZeroValues.

Hier vindt u een gedetailleerde beschrijving van de CSC-indeling.


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

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden met behulp van de SPARSE-invoerindeling van CSC. De reekslengte is het aantal rijen van de sparsematrix. De gemaakte reeks is een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde. Voor sparse-invoer moet de voorloopdimensionaliteit van de tensor-shape gelijk zijn aan de totale grootte van de tensor-shape.
  • sequenceLength: de reekslengte, dat ook het aantal rijen in de parseringsmatrix is.
  • colStarts: de matrix bevat indexen voor elke kolom in de matrices rowIndices en nonZeroValues.
  • rowIndices: de matrix die de rijindexen van de bijbehorende elementen in de matrix nonZeroValuesbevat.
  • nonZeroValues: de matrix die alle niet-nulwaarden in de sparsematrix bevat.
  • numNonZeroValues: het aantal niet-nulwaarden in de sparsematrix.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden met behulp van de SPARSE-invoerindeling van CSC. De reekslengte is het aantal rijen van de sparsematrix. De sequenceStartFlag geeft aan of deze reeks een nieuwe reeks of voortzetting is van een vorige reeks van een eerdere aanroep naar deze methode. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • sampleShape: de tensor-vorm van de waarde. Voor sparse-invoer moet de voorloopdimensionaliteit van de tensor-shape gelijk zijn aan de totale grootte van de tensor-shape.
  • sequenceLength: de reekslengte, dat ook het aantal rijen in de parseringsmatrix is.
  • colStarts: de matrix bevat indexen voor elke kolom in de matrices rowIndices en nonZeroValues.
  • rowIndices: de matrix die de rijindexen van de bijbehorende elementen in de matrix nonZeroValuesbevat.
  • nonZeroValues: de matrix die alle niet-nulwaarden in de sparsematrix bevat.
  • numNonZeroValues: het aantal niet-nulwaarden in de sparsematrix.
  • sequenceStartFlag: true geeft aan dat het een nieuwe reeks is. false betekent een voortzetting van een vorige reeks.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden met behulp van de SPARSE-invoerindeling van CSC. De reekslengte is het aantal rijen van de sparsematrix. De gemaakte reeks is een nieuwe reeks. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de one-hot vector.
  • sequenceLength: de reekslengte, dat ook het aantal rijen in de parseringsmatrix is.
  • colStarts: de matrix bevat indexen voor elke kolom in de matrices rowIndices en nonZeroValues.
  • rowIndices: de matrix die de rijindexen van de bijbehorende elementen in de matrix nonZeroValuesbevat.
  • nonZeroValues: de matrix die alle niet-nulwaarden in de sparsematrix bevat.
  • numNonZeroValues: het aantal niet-nulwaarden in de sparsematrix.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject met een reeks voorbeelden met behulp van de SPARSE-invoerindeling van CSC. De reekslengte is het aantal rijen van de sparsematrix. De sequenceStartFlag geeft aan of deze reeks een nieuwe reeks of voortzetting van een vorige reeks is. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • dimension: de grootte van de dimensie van de one-hot vector.
  • sequenceLength: de reekslengte, dat ook het aantal rijen in de parseringsmatrix is.
  • colStarts: de matrix bevat indexen voor elke kolom in de matrices rowIndices en nonZeroValues.
  • rowIndices: de matrix die de rijindexen van de bijbehorende elementen in de matrix nonZeroValuesbevat.
  • nonZeroValues: de matrix die alle niet-nulwaarden in de sparsematrix bevat.
  • numNonZeroValues: het aantal niet-nulwaarden in de sparsematrix.
  • sequenceStartFlag: true geeft aan dat het een nieuwe reeks is. false betekent een voortzetting van een vorige reeks.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is true.

Een waarde maken op basis van NDArrayView


static ValuePtr CNTK::Value::Create(const NDShape& sampleShape, const std::vector<NDArrayViewPtr>& sequences, const DeviceDescriptor& device, bool readOnly = false

Hiermee maakt u een nieuw waardeobject op basis van een verzameling NDArrayViews. Elke reeks is sequences een nieuwe reeks.

Parameters:

  • sampleShape: de tensorshape van de waarde die wordt gemaakt.
  • sequences: een verzameling reeksen die worden vertegenwoordigd door NDArrayView. Elke NDArrayView vertegenwoordigt een reeks.
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is 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

Hiermee maakt u een nieuw waardeobject op basis van een verzameling NDArrayViews. De sequenceStartFlags geeft aan of een reeks een nieuwe reeks of voortzetting van een vorige reeks is.

Parameters:

  • sampleShape: de tensorshape van de waarde die wordt gemaakt.
  • sequences: een verzameling reeksen die worden vertegenwoordigd door NDArrayView. Elke NDArrayView vertegenwoordigt een reeks.
  • sequenceStartFlags: Een verzameling booleaanse waarden. Elk element geeft aan of de bijbehorende reeks sequences een nieuwe reeks is (in het geval van true) of een voortzetting van een vorige reeks (in het geval van false).
  • device: op welk apparaat het object Value moet worden gemaakt.
  • readOnly: de waarde heeft het kenmerk Alleen-lezen als deze vlag is true.

Gegevens kopiëren uit een waardeobject


template <typename ElementType> void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<ElementType>>& sequences

Kopieert de gegevens die zijn opgeslagen in de waarde in de buffer van sequences. Het sequences is een lijst met reeksen met variabele lengte. Het aantal items in de buitenste lijst is sequences het aantal reeksen in de waarde. Elk element van de buitenste lijst vertegenwoordigt een reeks. Elke reeks, vertegenwoordigd door vector<ElementType>, bevat een variabel aantal steekproeven. Elk voorbeeld bestaat uit een vast aantal elementen met het type ElementType. Het aantal elementen van een steekproef wordt bepaald door de vorm van outputVariable. De vorm van de variabele moet overeenkomen met de vorm van de waarde. ElementType is het gegevenstype van het gemaakte waardeobject. float Momenteel en double worden ondersteund.

Parameters:

  • outputVariable: geeft de shape en dynamische assen aan bij het kopiëren van gegevens van deze waarde naar de sequences.
  • sequences: de uitvoerbuffer die wordt gebruikt voor het opslaan van de gegevens die zijn gekopieerd uit de waarde.

void CNTK::Value::CopyVariableValueTo(const Variable& outputVariable, std::vector<std::vector<size_t>>& sequences

Kopieert de gegevens die zijn opgeslagen in het object Waarde in de buffer die wordt geleverd door sequences. Het sequences is een lijst met reeksen met variabele lengte. Het aantal items in de buitenste lijst is sequences het aantal reeksen in de waarde. Elk element van de buitenste lijst vertegenwoordigt een reeks. Elke reeks, vertegenwoordigd door vector<size_t>, bevat een variabel aantal steekproeven. Elk voorbeeld wordt vertegenwoordigd door een index die verwijst naar de niet-nulwaarde in de one-hot vector. De dimensiegrootte van de een-hot vector moet overeenkomen met die in de outputVariable.

Parameters:

  • outputVariable: geeft de shape en dynamische assen aan bij het kopiëren van gegevens van deze waarde naar de sequences.
  • sequences: de uitvoerbuffer die wordt gebruikt voor het opslaan van de gegevens die zijn gekopieerd uit de waarde.

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)

Kopieer de gegevens die zijn opgeslagen in het waardeobject naar de buffers die een reeks vertegenwoordigen in de SPARSE-indeling van CSC. De volgordebuffer wordt indien nodig aangepast. De waarde moet dezelfde tensor-shape hebben als outputVariable. Bij retour sequenceLength wordt ingesteld op de lengte van de reeks die is opgeslagen in de waarde, en rowIndicescolStartsbevat de nonZeroValues gegevens van beginindexen van kolommen, rijindexen en niet-nulwaarden en numNonZeroValues is ingesteld op het aantal niet-nulwaarden in this Waarde.

Parameters:

  • outputVariable: geeft de shape en dynamische assen aan bij het kopiëren van gegevens van deze waarde naar de buffers.
  • sequenceLength: bij retour wordt deze ingesteld op de lengte van de reeks die is opgeslagen in de waarde.
  • colStarts: bij retour bevat het indexen in het nonZeorValues eerste niet-nulelement van elke kolom van de matrix.
  • rowIndices: bij return bevat het de rijindexen van elk element dat niet nul is van de matrix.
  • nonZeroValues: bij retour bevat het waarden van alle niet-nulelementen van de matrix.
  • numNonZeroValues: bij retour wordt het aantal niet-nulelementen van de matrix geretourneerd.

Helperfuncties voor het manipuleren van de functie die moet worden geëvalueerd


FunctionPtr CNTK::Function::Clone(ParameterCloningMethod parameterCloneMethod = ParameterCloningMethod::Clone, const std::unordered_map<Variable, Variable>& replacements = {}) const

Voor evaluatie wordt deze methode aangeroepen om een gekloonde functie te maken die vervolgens door een andere thread kan worden gebruikt om hetzelfde model te evalueren. Voor dit doel moet de parameterCloneMethod waarde worden ingesteld op de standaardwaarde ParameterCloningMethod::Share. De parameter replacements geeft eventuele variabelevervangingen op die worden toegepast in het gekloonde functie-exemplaar en is meestal niet nodig voor evaluatie.


FunctionPtr CNTK::Function::FindByName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false

Zoek een functie met de opgegeven name functie in de functiegrafiek onder 'deze' functie. Als er meer dan één functie met dezelfde naam bestaat, wordt er een uitzondering gegenereerd. Als nestedSearchInsideBlockFunction dit waar is, worden alle functies in blokfuncties ook doorzocht.


std::vector<FunctionPtr> CNTK::Function::FindAllWithName(const std::wstring& name, bool nestedSearchInsideBlockFunction = false

Zoek een lijst met functies met de opgegeven name functie in de functiegrafiek onder 'deze' functie. Als nestedSearchInsideBlockFunction dit waar is, worden alle functies in blokfuncties ook doorzocht.


FunctionPtr CNTK::Combine(const std::vector<Variable>& operands, const std::wstring& name = L""

Maak een nieuw functie-exemplaar waarin de uitvoer van de opgegeven lijst met operanden van Functions wordt gecombineerd. De uitvoer van de nieuwe functie is een samenvoeging van de uitvoer van elk van de opgegeven 'operands'-functies. Bij het maken van een classificatiemodel bestaat de functie CrossEntropy-verlies en de Functie ClassificationError doorgaans uit de hoofdmap van de rekengrafiek die 'Combineren' kan zijn om één functie met 2 uitvoer te maken; Viz. CrossEntropy-verlies en ClassificationError-uitvoer.


FunctionPtr CNTK::AsComposite(const FunctionPtr& rootFunction, const std::wstring& name = L""

Hiermee maakt u een samengestelde functie met de opgegeven rootFunction hoofdmap. De samengestelde waarde geeft een functie op een hoger niveau aan die de volledige grafiek van Functions inkapselt die onder de opgegeven functies is.rootFunction


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

Hiermee maakt u een nieuw functie-exemplaar dat slechts een alias is van de opgegeven operand.


Raadpleeg CNTKLibrary.h voor meer informatie over gegevenstypen die door de bovenstaande functies worden gebruikt.

Voorbeelden

De C++-voorbeelden CNTKLibraryCPPEvalCPUOnlyExamples en CNTKLibraryCPPEvalGPUExamples demonstreren het gebruik van CNTK Bibliotheek voor evaluatie. In de voorbeelden ziet u ook hoe u meerdere evaluaties parallel kunt uitvoeren met behulp van meerdere threads en modelparameters kunt delen tussen threads.