Anglais | Chine
Important
Nous sommes heureux que notre travail sur tensorflow.net ait attiré de nombreux utilisateurs. Cependant, pour le moment, aucun des principaux responsables de ce référentiel n'est disponible pour les nouvelles fonctionnalités et la correction de bugs. Nous ne refuserons pas les PR et aiderons à les examiner.
Si vous souhaitez contribuer ou maintenir tensorflow.net, nous aimerions vous aider à démarrer.
Nous en sommes désolés et nous reprendrons la maintenance de ce projet une fois que l'un de nous aura la bande passante nécessaire.
la branche master et v0.100.x correspondent à tensorflow v2.10, la branche v0.6x provient de tensorflow v2.6, v0.15-tensorflow1.15 provient de tensorflow1.15. Veuillez ajouter https://www.myget.org/F/scisharp/api/v3/index.json
à la source nuget pour utiliser la version nocturne.
La mission de SciSharp STACK
est d'introduire la technologie populaire de science des données dans le monde .NET et de fournir aux développeurs .NET un puissant ensemble d'outils d'apprentissage automatique sans réinventer la roue. Étant donné que les API restent aussi similaires que possible, vous pouvez immédiatement adapter n'importe quel code TensorFlow existant en C# ou F# avec une courbe d'apprentissage nulle. Jetez un œil à une image comparative et voyez avec quelle facilité un script TensorFlow/Python se traduit en un programme C# avec TensorFlow.NET.
La philosophie de SciSharp permet de migrer rapidement un grand nombre de codes d'apprentissage automatique écrits en Python vers .NET, permettant ainsi aux développeurs .NET d'utiliser des modèles d'apprentissage automatique de pointe et d'accéder à un grand nombre de ressources TensorFlow, ce qui ne serait pas possible sans ce projet.
Par rapport à d'autres projets, comme par exemple TensorFlowSharp qui ne fournit que l'API C++ de bas niveau de TensorFlow et ne peut exécuter que des modèles construits à l'aide de Python, Tensorflow.NET permet de créer le pipeline de formation et d'inférence avec du C# et du F# purs. En outre, Tensorflow.NET fournit la liaison de Tensorflow.Keras pour faciliter le transfert de votre code de Python vers .NET.
ML.NET utilise également Tensorflow.NET comme l'un des backends pour entraîner et déduire votre modèle, ce qui offre une meilleure intégration avec .NET.
Introduction et exemples simples:Documents Tensorflow.NET
Documentation détaillée:Le guide définitif de Tensorflow.NET
Exemples:Exemples TensorFlow.NET
Dépannage de l'exemple en cours d'exécution ou de l'installation:FAQ Tensorflow.NET
Vous pouvez rechercher le nom du package dans NuGet Manager ou utiliser les commandes ci-dessous dans la console du gestionnaire de packages.
L'installation contient deux parties, la première est le corps principal :
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
La deuxième partie est la partie support informatique. Un seul des packages suivants est nécessaire, en fonction de votre appareil et de votre système.
### 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
Deux exemples simples sont donnés ici pour présenter l'utilisation de base de Tensorflow.NET. Comme vous pouvez le constater, il est facile d'écrire du code C# comme celui-ci 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 ( ) } " ) ;
}
}
Exécutez cet exemple dans Jupyter Notebook.
ResNet
dans l'API fonctionnelle 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 " ) ;
L'exemple F# de régression linéaire est disponible ici.
Des exemples plus avancés peuvent être trouvés dans Exemples TensorFlow.NET.
Versions 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 | x | |||||
tf.net 0,7x, tf.keras 0,7 | x | |||||
tf.net 0,4x, tf.keras 0,5 | x | |||||
tf.net 0,3x, tf.keras 0,4 | x | |||||
tf.net 0,2x | x | x | ||||
tf.net 0,15 | x | x | ||||
tf.net 0.14 | x |
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
...
Envie de contribuer à l'un des projets les plus en vogue dans le domaine du Machine Learning ? Vous voulez savoir comment Tensorflow crée comme par magie le graphe informatique ?
Nous apprécions chaque contribution, aussi petite soit-elle ! Il existe des tâches pour les novices comme pour les experts, si chacun ne s'attaque qu'à une petite tâche, la somme des contributions sera énorme.
Tu peux:
La meilleure façon de découvrir pourquoi un test unitaire échoue est de l'exécuter en une seule étape en C# ou F# et son Python correspondant en même temps pour voir où le flux d'exécution s'écarte ou où les variables présentent des valeurs différentes. Les bons IDE Python comme PyCharm vous permettent d'accéder en un seul pas au code de la bibliothèque Tensorflow.
Ajoutez SciSharp/TensorFlow.NET en amont à votre dépôt local...
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
Veuillez vous assurer de garder votre fork à jour en tirant régulièrement depuis l'amont.
git pull upstream master
Achetez notre livre pour rendre les projets open source durables TensorFlow.NET实战
Rejoignez notre chat sur Discord ou Gitter.
Suivez-nous sur Twitter, Facebook, Medium, LinkedIn.
TensorFlow.NET fait partie de SciSharp STACK