Compartir a través de


API de CNTK Library Eval de C++

La biblioteca de CNTK de C++ para evaluación se basa en CNTK Library API. Los métodos siguientes se usan para evaluar un modelo.


Carga de un modelo


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

Este método carga un archivo de modelo y devuelve el puntero a la función que representa el modelo cargado. Una función en CNTK denota un gráfico de cálculo compuesto por funciones primitivas o funciones compuestas con cero o más argumentos de entrada y una o varias salidas. modelFile es la ruta de acceso del archivo de modelo. computeDevice especifica el dispositivo que se va a ejecutar la evaluación.


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

Este método carga un modelo desde un búfer de memoria y devuelve el puntero a la función que representa el modelo cargado. modelBuffer apunta al búfer que contiene el contenido del modelo serializado y modelBufferLength es la longitud del búfer. computeDevice especifica el dispositivo que se va a ejecutar la evaluación.


Evaluación de una función


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

Este método inicia la evaluación de la this función que representa el modelo con parámetros especificados. arguments contiene los valores de todas las variables de entrada necesarias para la evaluación y outputs almacenan los valores de las variables de salida. El autor de la llamada puede asignar previamente el almacenamiento de valores de salida o el sistema si el autor de la llamada pasa la asignación valuePtr como null. computeDevice especifica el dispositivo que se va a ejecutar la evaluación.


Creación de un valor mediante una entrada densa


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

Crea un nuevo objeto Value que contiene un lote de muestras. El número de muestras del lote es el número de elementos divididos batchData por el tamaño de sampleShape (se produce un error en tiempo de ejecución si el resto no es cero). El objeto Value creado contiene una copia de los datos especificados en batchData. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del objeto Value.
  • batchData: los datos que se incluirán en el objeto Value.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el objeto Value es de solo lectura si esta marca es true.

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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos. El objeto Value creado contiene una copia de los datos especificados en sequenceData. La longitud de la secuencia es el número de elementos divididos sequenceData por el tamaño de sampleShape (se produce un error en tiempo de ejecución si el resto no es cero). La secuencia creada es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor.
  • sequenceData: los datos que se incluirán en el valor.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos. El objeto Value creado contiene una copia de los datos especificados en sequenceData. La longitud de la secuencia es el número de elementos divididos sequenceData por el tamaño de sampleShape (se produce un error en tiempo de ejecución si el resto no es cero). SequenceStartFlag especifica si esta secuencia es una nueva secuencia o una continuación de una secuencia anterior en el mismo índice de la lista de secuencias de una llamada anterior a este método. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor.
  • sequenceData: los datos que se incluirán en el valor.
  • sequenceStartFlag: true indica que es una nueva secuencia. false significa una continuación de una secuencia anterior.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene un lote de secuencias de longitud variable. El objeto Value creado contiene una copia de los datos especificados en batchOfSequences. El número de secuencias del lote es el tamaño de batchOfSequences. La longitud de cada secuencia es el número de elementos de la secuencia correspondiente dividida batchOfSequences por el tamaño de sampleShape (se produce un error en tiempo de ejecución si el resto no es cero). Cada secuencia de batchOfSequences es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor.
  • batchOfSequences: los datos que se van a almacenar en el valor. El exterior vector representa una colección de secuencias con longitud variable y el interior vector representa cada secuencia individual.
  • device: en qué dispositivo se debe crear el valor.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene un lote de secuencias de longitud variable. El objeto Value creado contiene una copia de los datos especificados en batchOfSequences. El número de secuencias del lote es el tamaño de batchOfSequences. La longitud de cada secuencia es el número de elementos de la secuencia correspondiente dividida batchOfSequences por el tamaño de sampleShape (se produce un error en tiempo de ejecución si el resto no es cero). ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor.
  • batchOfSequences: los datos que se van a almacenar en el valor. El exterior vector representa una colección de secuencias con longitud variable y el interior vector representa cada secuencia individual.
  • sequenceStartFlags: colección de valores booleanos. Cada elemento representa si la secuencia correspondiente de batchOfSequences es una nueva secuencia (en caso de true) o una continuación de una secuencia anterior (en el caso de false).
  • device: en qué dispositivo se debe crear el valor.
  • readOnly: el valor es de solo lectura si esta marca es true.

Creación de un valor mediante la entrada de vector de un solo uso


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

Crea un nuevo objeto Value que contiene un lote de muestras. Cada muestra se representa mediante un valor de índice que apunta al valor distinto de cero en el vector de un solo uso de dimension elementos. El número de muestras del lote es el número de elementos de batchData. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • batchData: la colección de índices que representan el lote de muestras.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es true.

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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos. Cada muestra se representa mediante un valor de índice que apunta al valor distinto de cero en el vector de un solo uso de dimension elementos. La longitud de la secuencia es el número de elementos de sequenceData. Cada secuencia es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • sequenceData: colección de índices que representan la secuencia de muestras.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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)

Crea un nuevo objeto Value que contiene una secuencia de ejemplos. Cada muestra se representa mediante un valor de índice que apunta al valor distinto de cero en el vector de un solo uso de dimension elementos. SeqStartFlag especifica si esta secuencia es una nueva secuencia o una continuación de una secuencia anterior en el mismo índice de la lista de secuencias de una llamada anterior a este método. La longitud de la secuencia es el número de elementos de sequenceData. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • sequenceData: colección de índices que representan la secuencia de muestras.
  • sequenceStartFlag: true indica que es una nueva secuencia. false significa una continuación de una secuencia anterior.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene un lote de secuencias de longitud variable. Cada muestra se representa mediante un valor de índice que apunta al valor distinto de cero en el vector de un solo uso de dimension elementos. El número de secuencias es el número de elementos de la lista externa de batchOfSequences. La longitud de cada secuencia es el número de elementos de la secuencia correspondiente en la lista interna de batchOfSequences. Cada secuencia de batchOfSequences es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • batchOfSequences: la colección de índices que representan secuencias de muestras. El exterior vector representa una colección de secuencias con longitud variable y el interior vector representa cada secuencia individual.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene un lote de secuencias de longitud variable. Cada muestra se representa mediante un valor de índice que apunta al valor distinto de cero en el vector de un solo uso de dimension elementos. El número de secuencias es el número de elementos de la lista externa de batchOfSequences. La longitud de cada secuencia es el número de elementos de la secuencia correspondiente en la lista interna de batchOfSequences. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • batchOfSequences: la colección de índices que representan secuencias de muestras. El exterior vector representa una colección de secuencias con longitud variable y el interior vector representa cada secuencia individual.
  • sequenceStartFlags: colección de valores booleanos. Cada elemento representa si la secuencia correspondiente de batchOfSequences es una nueva secuencia (en caso de true) o una continuación de una secuencia anterior (en el caso de false).
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es true.

Creación de un valor mediante la entrada de CSC dispersa

Actualmente, se admite el formato de columna dispersa comprimida (CSC). El formato CSC almacena la matriz en formato principal de columna y la matriz que contiene los índices de columna se comprime. Una matriz en formato CSC se representa mediante los parámetros siguientes:

  • nonZeroValues: matriz de datos que contiene todos los valores distintos de cero de la matriz en formato principal de columna.
  • rowIndices: matriz que contiene los índices de fila de los elementos correspondientes de la matriz nonZeroValues.
  • colStarts: matriz que contiene índices en las matrices rowIndices y nonZeroValues.

Puede encontrar una descripción detallada del formato CSC aquí.


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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos mediante el formato de entrada dispersa de CSC. La longitud de la secuencia es el número de filas de la matriz dispersa. La secuencia creada es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor. Para la entrada dispersa, la dimensionalidad de la forma tensor debe ser la misma que el tamaño total de la forma tensor.
  • sequenceLength: la longitud de la secuencia, que también es el número de filas de la matriz dispersa.
  • colStarts: la matriz contiene índices para cada columna en las matrices rowIndices y nonZeroValues.
  • rowIndices: matriz que contiene los índices de fila de los elementos correspondientes de la matriz nonZeroValues.
  • nonZeroValues: matriz que contiene todos los valores distintos de cero en la matriz dispersa.
  • numNonZeroValues: número de valores distintos de cero en la matriz dispersa.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos mediante el formato de entrada dispersa de CSC. La longitud de la secuencia es el número de filas de la matriz dispersa. SequenceStartFlag especifica si esta secuencia es una nueva secuencia o una continuación de una secuencia anterior de una llamada anterior a este método. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • sampleShape: la forma tensor del valor. Para la entrada dispersa, la dimensionalidad de la forma tensor debe ser la misma que el tamaño total de la forma tensor.
  • sequenceLength: la longitud de la secuencia, que también es el número de filas de la matriz dispersa.
  • colStarts: la matriz contiene índices para cada columna en las matrices rowIndices y nonZeroValues.
  • rowIndices: matriz que contiene los índices de fila de los elementos correspondientes de la matriz nonZeroValues.
  • nonZeroValues: matriz que contiene todos los valores distintos de cero en la matriz dispersa.
  • numNonZeroValues: número de valores distintos de cero en la matriz dispersa.
  • sequenceStartFlag: true indica que es una nueva secuencia. false significa una continuación de una secuencia anterior.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos mediante el formato de entrada dispersa de CSC. La longitud de la secuencia es el número de filas de la matriz dispersa. La secuencia creada es una nueva secuencia. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • sequenceLength: la longitud de la secuencia, que también es el número de filas de la matriz dispersa.
  • colStarts: la matriz contiene índices para cada columna en las matrices rowIndices y nonZeroValues.
  • rowIndices: matriz que contiene los índices de fila de los elementos correspondientes de la matriz nonZeroValues.
  • nonZeroValues: matriz que contiene todos los valores distintos de cero en la matriz dispersa.
  • numNonZeroValues: número de valores distintos de cero en la matriz dispersa.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value que contiene una secuencia de ejemplos mediante el formato de entrada dispersa de CSC. La longitud de la secuencia es el número de filas de la matriz dispersa. SequenceStartFlag especifica si esta secuencia es una nueva secuencia o una continuación de una secuencia anterior. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • dimension: el tamaño de la dimensión del vector de un solo uso.
  • sequenceLength: la longitud de la secuencia, que también es el número de filas de la matriz dispersa.
  • colStarts: la matriz contiene índices para cada columna en las matrices rowIndices y nonZeroValues.
  • rowIndices: la matriz que contiene los índices de fila de los elementos correspondientes de la matriz nonZeroValues.
  • nonZeroValues: matriz que contiene todos los valores distintos de cero en la matriz dispersa.
  • numNonZeroValues: el número de valores distintos de cero en la matriz dispersa.
  • sequenceStartFlag: true indica que es una nueva secuencia. false significa una continuación de una secuencia anterior.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es true.

Creación de un valor a partir de NDArrayView


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

Crea un nuevo objeto Value basado en una colección de NDArrayViews. Cada secuencia de sequences es una nueva secuencia.

Parámetros:

  • sampleShape: la forma tensor del valor que se va a crear.
  • sequences: una colección de secuencias representadas por NDArrayView. Cada NDArrayView representa una secuencia.
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es 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

Crea un nuevo objeto Value basado en una colección de NDArrayViews. SequenceStartFlags especifica si una secuencia es una nueva secuencia o una continuación de una secuencia anterior.

Parámetros:

  • sampleShape: la forma tensor del valor que se va a crear.
  • sequences: una colección de secuencias representadas por NDArrayView. Cada NDArrayView representa una secuencia.
  • sequenceStartFlags: colección de valores booleanos. Cada elemento representa si la secuencia correspondiente de sequences es una nueva secuencia (en caso de true) o una continuación de una secuencia anterior (en el caso de false).
  • device: en qué dispositivo se debe crear el objeto Value.
  • readOnly: el valor es de solo lectura si esta marca es true.

Copia de datos de un objeto Value


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

Copia los datos almacenados en el valor en el búfer proporcionado por sequences. sequences es una lista de secuencias con longitud variable. El número de elementos contenidos en la lista externa de sequences es el número de secuencias del valor. Cada elemento de la lista externa representa una secuencia. Cada secuencia, representada por vector<ElementType>, contiene un número variable de muestras. Cada ejemplo consta de un número fijo de elementos con el tipo de ElementType. El número de elementos de una muestra viene determinado por la forma de outputVariable. La forma de la variable debe coincidir con la forma del valor. ElementType es el tipo de datos del objeto Value creado. Actualmente, float y double se admiten.

Parámetros:

  • outputVariable: indica la forma y los ejes dinámicos al copiar datos de este valor a sequences.
  • sequences: el búfer de salida usado para almacenar los datos copiados del valor.

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

Copia los datos almacenados en el objeto Value en el búfer proporcionado por sequences. sequences es una lista de secuencias con longitud variable. El número de elementos contenidos en la lista externa de sequences es el número de secuencias del valor. Cada elemento de la lista externa representa una secuencia. Cada secuencia, representada por vector<size_t>, contiene un número variable de muestras. Cada muestra se representa mediante un índice que apunta al valor distinto de cero en el vector de un solo acceso. El tamaño de dimensión del vector de un solo uso debe coincidir con el definido en .outputVariable

Parámetros:

  • outputVariable: indica la forma y los ejes dinámicos al copiar datos de este valor a sequences.
  • sequences: el búfer de salida usado para almacenar los datos copiados del valor.

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)

Copie los datos almacenados en el objeto Value en los búferes que representan una secuencia en formato disperso de CSC. Si es necesario, se cambiará el tamaño del búfer de secuencia. El valor debe tener la misma forma tensor que outputVariable. En la devolución, sequenceLength se establece en la longitud de la secuencia almacenada en value y colStarts, rowIndices y nonZeroValues contiene los datos de índices de inicio de columna, índices de fila y valores distintos de cero, y numNonZeroValues se establece en el número de valores distintos de cero contenidos en this Value.

Parámetros:

  • outputVariable: indica la forma y los ejes dinámicos al copiar datos de este valor a los búferes.
  • sequenceLength: en la devolución, se establece en la longitud de la secuencia almacenada en value.
  • colStarts: en la devolución, contiene índices en del nonZeorValues primer elemento distinto de cero de cada columna de la matriz.
  • rowIndices: en la devolución, contiene los índices de fila de cada elemento distinto de cero de la matriz.
  • nonZeroValues: en la devolución, contiene valores de todos los elementos distintos de cero de la matriz.
  • numNonZeroValues: en la devolución, devuelve el número de elementos distintos de cero de la matriz.

Funciones auxiliares para manipular la función que se va a evaluar


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

Para la evaluación, se llama a este método para crear una función clonada que otro subproceso puede usar para evaluar el mismo modelo. Para ello, parameterCloneMethod debe establecerse en su valor ParameterCloningMethod::Sharepredeterminado . El parámetro replacements especifica los reemplazos de variables que se aplican en la instancia de Function clonada y, por lo general, no es necesario para la evaluación.


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

Busque una función con el especificado name en el gráfico de funciones subyacente "this". Si existe más de una función con el mismo nombre, se produce una excepción. Si nestedSearchInsideBlockFunction es true, también se buscan todas las funciones dentro de las funciones de bloque.


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

Busque una lista de funciones con el especificado name en el gráfico de funciones subyacente "this". Si nestedSearchInsideBlockFunction es true, también se buscan todas las funciones dentro de las funciones de bloque.


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

Cree una nueva instancia de Function que combine las salidas de la lista especificada de "operandos" de Functions. Las "Salidas" de la nueva "Función" son una unión de las "Salidas" de cada una de las funciones "operandos" especificadas. Por ejemplo, al crear un modelo de clasificación, normalmente la función de pérdida crossEntropy y la función ClassificationError componen las raíces del gráfico de cálculo que pueden ser "Combinar"d para crear una sola función con dos salidas; Viz. Pérdida de crossEntropy y salida ClassificationError.


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

Crea una función compuesta que tiene el especificado rootFunction como raíz. La composición denota una función de nivel superior que encapsula todo el gráfico de Functions subyacente al especificado rootFunction.


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

Crea una nueva instancia de Function que es solo un alias del especificado operand.


Consulte CNTKLibrary.h para obtener más información sobre los tipos de datos usados por las funciones anteriores.

Ejemplos

Los ejemplos de CNTKLibraryCPPEvalCPUOnlyExamples y CNTKLibraryCPPEvalGPUExamples muestran el uso de CNTK Library para su evaluación. Los ejemplos también muestran cómo realizar varias evaluaciones en paralelo mediante varios subprocesos y compartir parámetros de modelo entre subprocesos.