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 istrue
.
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 istrue
.
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 istrue
.
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 buitenstevector
vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenkantvector
vertegenwoordigt elke afzonderlijke reeks.device
: op welk apparaat de waarde moet worden gemaakt.readOnly
: de waarde is alleen-lezen als deze vlag istrue
.
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 buitenstevector
vertegenwoordigt een verzameling reeksen met variabele lengte en de binnenkantvector
vertegenwoordigt elke afzonderlijke reeks.sequenceStartFlags
: Een verzameling booleaanse waarden. Elk element geeft aan of de bijbehorende reeks een nieuwe reeksbatchOfSequences
is (in het geval vantrue
) of een vervolg van een vorige reeks (in het geval vanfalse
).device
: op welk apparaat de waarde moet worden gemaakt.readOnly
: de waarde is alleen-lezen als deze vlag istrue
.
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 istrue
.
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 istrue
.
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 istrue
.
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 binnenstevector
vector
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 istrue
.
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 binnenstevector
vector
vertegenwoordigt elke afzonderlijke reeks.sequenceStartFlags
: Een verzameling booleaanse waarden. Elk element geeft aan of de bijbehorende reeksbatchOfSequences
een nieuwe reeks is (in het geval vantrue
) of een voortzetting van een vorige reeks (in het geval vanfalse
).device
: op welk apparaat het object Value moet worden gemaakt.readOnly
: de waarde heeft het kenmerk Alleen-lezen als deze vlag istrue
.
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 matrixnonZeroValues
bevat.colStarts
: de matrix met indexen in de matricesrowIndices
ennonZeroValues
.
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 matricesrowIndices
ennonZeroValues
.rowIndices
: de matrix die de rijindexen van de bijbehorende elementen in de matrixnonZeroValues
bevat.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 istrue
.
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 matricesrowIndices
ennonZeroValues
.rowIndices
: de matrix die de rijindexen van de bijbehorende elementen in de matrixnonZeroValues
bevat.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 istrue
.
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 matricesrowIndices
ennonZeroValues
.rowIndices
: de matrix die de rijindexen van de bijbehorende elementen in de matrixnonZeroValues
bevat.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 istrue
.
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 matricesrowIndices
ennonZeroValues
.rowIndices
: de matrix die de rijindexen van de bijbehorende elementen in de matrixnonZeroValues
bevat.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 istrue
.
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 istrue
.
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 reekssequences
een nieuwe reeks is (in het geval vantrue
) of een voortzetting van een vorige reeks (in het geval vanfalse
).device
: op welk apparaat het object Value moet worden gemaakt.readOnly
: de waarde heeft het kenmerk Alleen-lezen als deze vlag istrue
.
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 desequences
.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 desequences
.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 rowIndices
colStarts
bevat 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 hetnonZeorValues
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.