csharp-tensorflow-net

Integrando TensorFlow en C# con TensorFlow.NET

TensorFlow.NET es una biblioteca de C# que permite a los desarrolladores integrar TensorFlow, una popular biblioteca de aprendizaje automático de Google, en aplicaciones .NET.

Esta herramienta facilita el uso de capacidades avanzadas de aprendizaje automático y redes neuronales directamente desde el entorno de desarrollo de .NET.

TensorFlow.NET es una versión .NET de TensorFlow que permite a los desarrolladores de .NET utilizar las capacidades de TensorFlow sin tener que cambiar a Python u otros lenguajes. Con TensorFlow.NET, puedes crear, entrenar y desplegar modelos de aprendizaje automático directamente en tu aplicación .NET.

Principales Características,

  • Compatibilidad Completa: Proporciona una API casi idéntica a la de TensorFlow en Python.
  • Interoperabilidad: Permite la integración con otras bibliotecas de .NET y facilita la implementación en entornos de producción.
  • Facilidad de Uso: Simplifica el proceso de aprendizaje automático en aplicaciones .NET, manteniendo la familiaridad del ecosistema de .NET.

Instalación y Configuración

Para comenzar a utilizar TensorFlow.NET en tu proyecto .NET, sigue estos pasos:

  1. Crear un Nuevo Proyecto

Puedes crear un nuevo proyecto de consola en Visual Studio o utilizando la CLI de .NET:

dotnet new console -n MyTensorFlowApp
cd MyTensorFlowApp
  1. Agregar TensorFlow.NET a tu Proyecto

Instala el paquete NuGet de TensorFlow.NET utilizando la CLI de .NET:

Install-Package TensorFlow.NET
Install-Package TensorFlow.Keras

Alternativamente, puedes agregar el paquete mediante el Administrador de Paquetes NuGet en Visual Studio.

  1. Agregar los binarios de TensorFlow

Finalmente deberemos instalar los binarios de TensorFlow. Para ello, tenemos que elegir el adecuado a nuestra máquina, entre los siguientes.

### Install tensorflow binary
### For CPU version
Install-Package SciSharp.TensorFlow.Redist

### For GPU version (CUDA and cuDNN are required)
Install-Package SciSharp.TensorFlow.Redist-Windows-GPU

Cómo Usar TensorFlow.NET

TensorFlow.NET facilita la creación y el entrenamiento de modelos de aprendizaje automático. A continuación, te mostramos cómo construir un modelo simple de regresión lineal.

Ejemplo de Regresión Lineal

using static Tensorflow.Binding;
using static Tensorflow.KerasApi;
using Tensorflow;
using Tensorflow.NumPy;

var training_steps = 1000;
var learning_rate = 0.01f;
var display_step = 100;

// Sample data
var X = np.array(3.3f, 4.4f, 5.5f, 6.71f, 6.93f, 4.168f, 9.779f, 6.182f, 7.59f, 2.167f,
		 7.042f, 10.791f, 5.313f, 7.997f, 5.654f, 9.27f, 3.1f);

var Y = np.array(1.7f, 2.76f, 2.09f, 3.19f, 1.694f, 1.573f, 3.366f, 2.596f, 2.53f, 1.221f,
		 2.827f, 3.465f, 1.65f, 2.904f, 2.42f, 2.94f, 1.3f);
var n_samples = X.shape[0];

// We can set a fixed init value in order to demo
var W = tf.Variable(-0.06f, name: "weight");
var b = tf.Variable(-0.73f, name: "bias");
var optimizer = keras.optimizers.SGD(learning_rate);

// Run training for the given number of steps.
foreach (var step in range(1, training_steps + 1))
{
// Run the optimization to update W and b values.
// Wrap computation inside a GradientTape for automatic differentiation.
using var g = tf.GradientTape();
// Linear regression (Wx + b).
var pred = W * X + b;
// Mean square error.
var loss = tf.reduce_sum(tf.pow(pred - Y, 2)) / (2 * n_samples);
// should stop recording
// Compute gradients.
var gradients = g.gradient(loss, (W, b));

// Update W and b following gradients.
optimizer.apply_gradients(zip(gradients, (W, b)));

if (step % display_step == 0)
{
	pred = W * X + b;
	loss = tf.reduce_sum(tf.pow(pred - Y, 2)) / (2 * n_samples);
	print($"step: {step}, loss: {loss.numpy()}, W: {W.numpy()}, b: {b.numpy()}");
}
}

En este ejemplo,

  • Definición de Datos: Se definen los datos de entrada x_data y y_data.
  • Variables del Modelo: W y b son las variables que se ajustarán durante el entrenamiento.
  • Modelo de Regresión Lineal: Se define una función linear_model que representa la ecuación de la regresión lineal.
  • Función de Pérdida: La función de pérdida loss calcula el error cuadrático medio entre los valores predichos y los reales.
  • Optimizador: Se utiliza el optimizador de descenso de gradiente para minimizar la función de pérdida.
  • Entrenamiento: Se entrena el modelo ajustando W y b para minimizar la función de pérdida.