Englisch | 中文
Wichtig
Wir freuen uns, dass unsere Arbeit auf tensorflow.net viele Benutzer angezogen hat. Derzeit steht jedoch keiner der Hauptbetreuer dieses Repos für neue Funktionen und Fehlerbehebungen zur Verfügung. Wir lehnen PRs nicht ab und helfen bei der Überprüfung.
Wenn Sie Mitwirkender oder Betreuer von tensorflow.net sein möchten, helfen wir Ihnen gerne beim Start.
Das tut uns leid und wir werden die Wartung dieses Projekts wieder aufnehmen, sobald einer von uns die Bandbreite dafür hat.
Der Hauptzweig und v0.100.x entsprechen Tensorflow v2.10, der Zweig v0.6x stammt von Tensorflow v2.6, v0.15-tensorflow1.15 stammt von tensorflow1.15. Bitte fügen Sie https://www.myget.org/F/scisharp/api/v3/index.json
zur Nuget-Quelle hinzu, um die nächtliche Veröffentlichung zu verwenden.
Die Mission von SciSharp STACK
besteht darin, beliebte Data-Science-Technologie in die .NET-Welt zu bringen und .NET-Entwicklern ein leistungsstarkes Tool-Set für maschinelles Lernen zur Verfügung zu stellen, ohne das Rad neu erfinden zu müssen. Da die APIs so ähnlich wie möglich gehalten werden, können Sie jeden vorhandenen TensorFlow-Code in C# oder F# sofort und ohne Lernaufwand anpassen. Schauen Sie sich ein Vergleichsbild an und sehen Sie, wie bequem sich ein TensorFlow/Python-Skript mit TensorFlow.NET in ein C#-Programm übersetzen lässt.
Die Philosophie von SciSharp ermöglicht die schnelle Migration einer großen Anzahl von in Python geschriebenen Codes für maschinelles Lernen nach .NET, sodass .NET-Entwickler modernste Modelle für maschinelles Lernen verwenden und auf eine große Anzahl von TensorFlow-Ressourcen zugreifen können, was ohne dieses Projekt nicht möglich wäre.
Im Vergleich zu anderen Projekten wie beispielsweise TensorFlowSharp, die nur die Low-Level-C++-API von TensorFlow bereitstellen und nur Modelle ausführen können, die mit Python erstellt wurden, ermöglicht Tensorflow.NET den Aufbau der Trainings- und Inferenzpipeline mit reinem C# und F#. Darüber hinaus bietet Tensorflow.NET die Bindung von Tensorflow.Keras, um die Übertragung Ihres Codes von Python nach .NET zu vereinfachen.
ML.NET verwendet Tensorflow.NET auch als eines der Backends zum Trainieren und Ableiten Ihres Modells, was eine bessere Integration mit .NET ermöglicht.
Einführung und einfache Beispiele: Tensorflow.NET-Dokumente
Ausführliche Dokumentation: Der endgültige Leitfaden zu Tensorflow.NET
Beispiele: TensorFlow.NET-Beispiele
Fehlerbehebung beim Ausführen von Beispielen oder Installationen: Tensorflow.NET FAQ
Sie können den Paketnamen im NuGet-Manager suchen oder die folgenden Befehle in der Paket-Manager-Konsole verwenden.
Die Installation besteht aus zwei Teilen, der erste ist der Hauptteil:
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
Der zweite Teil ist der Computerunterstützungsteil. Abhängig von Ihrem Gerät und System ist nur eines der folgenden Pakete erforderlich.
### 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
Hier werden zwei einfache Beispiele gegeben, um die grundlegende Verwendung von Tensorflow.NET vorzustellen. Wie Sie sehen, ist es in Python einfach, C#-Code einfach so zu schreiben.
Eager
-Modus 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 ( ) } " ) ;
}
}
Führen Sie dieses Beispiel in Jupyter Notebook aus.
ResNet
in Keras
Funktions-API 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 " ) ;
Das F#-Beispiel für die lineare Regression ist hier verfügbar.
Weitere Beispiele für Fortgeschrittene finden Sie in den TensorFlow.NET-Beispielen.
TensorFlow.NET-Versionen | 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
...
Haben Sie Lust, an einem der heißesten Projekte im Bereich maschinelles Lernen mitzuwirken? Möchten Sie wissen, wie Tensorflow auf magische Weise den Rechengraphen erstellt?
Wir freuen uns über jeden noch so kleinen Beitrag! Es gibt Aufgaben sowohl für Anfänger als auch für Experten. Wenn jeder nur eine kleine Aufgabe in Angriff nimmt, wird die Summe der Beiträge riesig sein.
Du kannst:
Der beste Weg, um herauszufinden, warum ein Komponententest fehlschlägt, besteht darin, ihn gleichzeitig in C# oder F# und dem entsprechenden Python auszuführen, um zu sehen, wo der Ausführungsfluss abweicht oder wo Variablen unterschiedliche Werte aufweisen. Mit guten Python-IDEs wie PyCharm können Sie in einem Schritt in den Tensorflow-Bibliothekscode einsteigen.
Fügen Sie SciSharp/TensorFlow.NET als Upstream zu Ihrem lokalen Repository hinzu ...
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
Bitte stellen Sie sicher, dass Sie Ihren Fork auf dem neuesten Stand halten, indem Sie ihn regelmäßig vom Upstream abrufen.
git pull upstream master
Kaufen Sie unser Buch, um Open-Source-Projekte nachhaltig zu gestalten TensorFlow.NET实战
Nehmen Sie an unserem Chat auf Discord oder Gitter teil.
Folgen Sie uns auf Twitter, Facebook, Medium, LinkedIn.
TensorFlow.NET ist Teil von SciSharp STACK