Inglés | 中文
Importante
Estamos felices de que nuestro trabajo en tensorflow.net haya atraído a muchos usuarios. Sin embargo, en este momento, ninguno de los mantenedores principales de este repositorio está disponible para nuevas funciones y corrección de errores. No rechazaremos las relaciones públicas y ayudaremos a revisarlas.
Si desea ser colaborador o mantenedor de tensorflow.net, nos gustaría ayudarle a comenzar.
Lo sentimos y reanudaremos el mantenimiento de este proyecto una vez que uno de nosotros tenga ancho de banda para ello.
rama maestra y v0.100.x corresponde a tensorflow v2.10, la rama v0.6x es de tensorflow v2.6, v0.15-tensorflow1.15 es de tensorflow1.15. Agregue https://www.myget.org/F/scisharp/api/v3/index.json
al código fuente de Nuget para utilizar la versión nocturna.
La misión de SciSharp STACK
es llevar la tecnología popular de ciencia de datos al mundo .NET y proporcionar a los desarrolladores .NET un potente conjunto de herramientas de aprendizaje automático sin reinventar la rueda. Dado que las API se mantienen lo más similares posible, puede adaptar inmediatamente cualquier código TensorFlow existente en C# o F# con una curva de aprendizaje cero. Eche un vistazo a una imagen comparativa y vea con qué comodidad un script de TensorFlow/Python se traduce en un programa C# con TensorFlow.NET.
La filosofía de SciSharp permite migrar rápidamente una gran cantidad de código de aprendizaje automático escrito en Python a .NET, lo que permite a los desarrolladores de .NET utilizar modelos de aprendizaje automático de vanguardia y acceder a una gran cantidad de recursos de TensorFlow que no serían posibles sin este proyecto.
En comparación con otros proyectos, como por ejemplo TensorFlowSharp, que solo proporciona la API C++ de bajo nivel de TensorFlow y solo puede ejecutar modelos creados con Python, Tensorflow.NET hace posible construir el canal de entrenamiento e inferencia con C# y F# puros. Además, Tensorflow.NET proporciona enlace de Tensorflow.Keras para facilitar la transferencia de su código de Python a .NET.
ML.NET también utiliza Tensorflow.NET como uno de los backends para entrenar e inferir su modelo, lo que proporciona una mejor integración con .NET.
Introducción y ejemplos simples: Documentos Tensorflow.NET
Documentación detallada: La guía definitiva de Tensorflow.NET
Ejemplos: ejemplos de TensorFlow.NET
Solución de problemas de ejecución de ejemplo o instalación: Preguntas frecuentes sobre Tensorflow.NET
Puede buscar el nombre del paquete en NuGet Manager o utilizar los siguientes comandos en la consola del administrador de paquetes.
La instalación consta de dos partes, la primera es el cuerpo principal:
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
La segunda parte es la parte de soporte informático. Solo se necesita uno de los siguientes paquetes, según su dispositivo y sistema.
### CPU version for Windows and Linux
PM> Install-Package SciSharp.TensorFlow.Redist
### CPU version for MacOS
PM> Install-Package SciSharp.TensorFlow.Redist-OSX
### GPU version for Windows (CUDA and cuDNN are required)
PM> Install-Package SciSharp.TensorFlow.Redist-Windows-GPU
### GPU version for Linux (CUDA and cuDNN are required)
PM> Install-Package SciSharp.TensorFlow.Redist-Linux-GPU
Aquí se dan dos ejemplos simples para presentar el uso básico de Tensorflow.NET. Como puede ver, es fácil escribir código C# así en Python.
Eager
using static Tensorflow . Binding ;
using static Tensorflow . KerasApi ;
using Tensorflow ;
using Tensorflow . NumPy ;
// Parameters
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 ( ) } " ) ;
}
}
Ejecute este ejemplo en Jupyter Notebook.
ResNet
en la API funcional Keras
using static Tensorflow . Binding ;
using static Tensorflow . KerasApi ;
using Tensorflow ;
using Tensorflow . NumPy ;
var layers = keras . layers ;
// input layer
var inputs = keras . Input ( shape : ( 32 , 32 , 3 ) , name : " img " ) ;
// convolutional layer
var x = layers . Conv2D ( 32 , 3 , activation : " relu " ) . Apply ( inputs ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " ) . Apply ( x ) ;
var block_1_output = layers . MaxPooling2D ( 3 ) . Apply ( x ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " , padding : " same " ) . Apply ( block_1_output ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " , padding : " same " ) . Apply ( x ) ;
var block_2_output = layers . Add ( ) . Apply ( new Tensors ( x , block_1_output ) ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " , padding : " same " ) . Apply ( block_2_output ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " , padding : " same " ) . Apply ( x ) ;
var block_3_output = layers . Add ( ) . Apply ( new Tensors ( x , block_2_output ) ) ;
x = layers . Conv2D ( 64 , 3 , activation : " relu " ) . Apply ( block_3_output ) ;
x = layers . GlobalAveragePooling2D ( ) . Apply ( x ) ;
x = layers . Dense ( 256 , activation : " relu " ) . Apply ( x ) ;
x = layers . Dropout ( 0.5f ) . Apply ( x ) ;
// output layer
var outputs = layers . Dense ( 10 ) . Apply ( x ) ;
// build keras model
var model = keras . Model ( inputs , outputs , name : " toy_resnet " ) ;
model . summary ( ) ;
// compile keras model in tensorflow static graph
model . compile ( optimizer : keras . optimizers . RMSprop ( 1e-3f ) ,
loss : keras . losses . SparseCategoricalCrossentropy ( from_logits : true ) ,
metrics : new [ ] { " acc " } ) ;
// prepare dataset
var ( ( x_train , y_train ) , ( x_test , y_test ) ) = keras . datasets . cifar10 . load_data ( ) ;
// normalize the input
x_train = x_train / 255.0f ;
// training
model . fit ( x_train [ new Slice ( 0 , 2000 ) ] , y_train [ new Slice ( 0 , 2000 ) ] ,
batch_size : 64 ,
epochs : 10 ,
validation_split : 0.2f ) ;
// save the model
model . save ( " ./toy_resnet_model " ) ;
El ejemplo de F# para regresión lineal está disponible aquí.
Se pueden encontrar ejemplos más avanzados en Ejemplos de TensorFlow.NET.
Versiones de TensorFlow.NET | tensorflow 1.14, cuda 10.0 | tensorflow 1.15, cuda 10.0 | tensorflow 2.3, cuda 10.1 | tensorflow 2.4, cuda 11 | tensorflow 2.7, cuda 11 | tensorflow 2.10, cuda 11 |
---|---|---|---|---|---|---|
tf.net 0.10x, tf.keras 0.10 | incógnita | |||||
tf.net 0.7x, tf.keras 0.7 | incógnita | |||||
tf.net 0.4x, tf.keras 0.5 | incógnita | |||||
tf.net 0.3x, tf.keras 0.4 | incógnita | |||||
tf.net 0.2x | incógnita | incógnita | ||||
tf.net 0.15 | incógnita | incógnita | ||||
tf.net 0.14 | incógnita |
tf.net 0.4x -> tf native 2.4
tf.net 0.6x -> tf native 2.6
tf.net 0.7x -> tf native 2.7
tf.net 0.10x -> tf native 2.10
...
¿Tiene ganas de contribuir a uno de los proyectos más candentes en el campo del aprendizaje automático? ¿Quieres saber cómo Tensorflow crea mágicamente el gráfico computacional?
¡Apreciamos cada contribución por pequeña que sea! Hay tareas tanto para principiantes como para expertos; si cada uno aborda sólo una pequeña tarea, la suma de las contribuciones será enorme.
Puede:
La mejor manera de descubrir por qué falla una prueba unitaria es realizar un solo paso en C# o F# y su correspondiente Python al mismo tiempo para ver dónde se desvía el flujo de ejecución o dónde las variables exhiben valores diferentes. Los buenos IDE de Python como PyCharm le permiten acceder en un solo paso al código de la biblioteca de tensorflow.
Agregue SciSharp/TensorFlow.NET como ascendente a su repositorio local...
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
Asegúrese de mantener su bifurcación actualizada extrayendo periódicamente desde aguas arriba.
git pull upstream master
Compre nuestro libro para hacer que un proyecto de código abierto sea sostenible TensorFlow.NET实战
Únase a nuestro chat en Discord o Gitter.
Síguenos en Twitter, Facebook, Medium, LinkedIn.
TensorFlow.NET es parte de SciSharp STACK