Bahasa Inggris | tidak
Penting
Kami senang bahwa pekerjaan kami di Tensorflow.net telah menarik banyak pengguna. Namun, saat ini, tidak ada pengelola utama repo ini yang tersedia untuk fitur baru dan perbaikan bug. Kami tidak akan menolak PR dan akan membantu meninjaunya.
Jika Anda ingin menjadi kontributor atau pengelola tensorflow.net, kami ingin membantu Anda untuk memulai.
Kami merasa kasihan atas hal itu dan kami akan melanjutkan pemeliharaan proyek ini setelah salah satu dari kami memiliki bandwidth untuk itu.
cabang master dan v0.100.x sesuai dengan tensorflow v2.10, cabang v0.6x dari tensorflow v2.6, v0.15-tensorflow1.15 dari tensorflow1.15. Harap tambahkan https://www.myget.org/F/scisharp/api/v3/index.json
ke sumber nuget untuk menggunakan rilis malam.
Misi SciSharp STACK
adalah menghadirkan teknologi ilmu data populer ke dunia .NET dan menyediakan seperangkat alat Pembelajaran Mesin yang kuat kepada pengembang .NET tanpa harus menciptakan kembali rodanya. Karena API dibuat semirip mungkin, Anda dapat segera mengadaptasi kode TensorFlow yang ada di C# atau F# dengan kurva pembelajaran nol. Lihat gambar perbandingan dan lihat betapa nyamannya skrip TensorFlow/Python diterjemahkan ke dalam program C# dengan TensorFlow.NET.
Filosofi SciSharp memungkinkan sejumlah besar kode pembelajaran mesin yang ditulis dengan Python dengan cepat dimigrasikan ke .NET, memungkinkan pengembang .NET menggunakan model pembelajaran mesin yang canggih dan mengakses sejumlah besar sumber daya TensorFlow yang tidak akan mungkin terjadi tanpa proyek ini.
Dibandingkan dengan proyek lain, misalnya TensorFlowSharp yang hanya menyediakan API C++ tingkat rendah TensorFlow dan hanya dapat menjalankan model yang dibuat menggunakan Python, Tensorflow.NET memungkinkan pembuatan alur pelatihan dan inferensi dengan C# dan F# murni. Selain itu, Tensorflow.NET menyediakan pengikatan Tensorflow.Keras untuk memudahkan transfer kode Anda dari python ke .NET.
ML.NET juga menggunakan Tensorflow.NET sebagai salah satu backend untuk melatih dan menyimpulkan model Anda, yang memberikan integrasi lebih baik dengan .NET.
Pengenalan dan contoh sederhana:Dokumen Tensorflow.NET
Dokumentasi mendetail:Panduan Definitif untuk Tensorflow.NET
Contoh:Contoh TensorFlow.NET
Pemecahan masalah contoh atau instalasi yang berjalan:FAQ Tensorflow.NET
Anda dapat mencari nama paket di NuGet Manager, atau menggunakan perintah di bawah ini di konsol manajer paket.
Instalasi berisi dua bagian, yang pertama adalah bagian utama:
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
Bagian kedua adalah bagian dukungan komputasi. Hanya satu dari paket berikut yang diperlukan, bergantung pada perangkat dan sistem Anda.
### 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
Dua contoh sederhana diberikan di sini untuk memperkenalkan penggunaan dasar Tensorflow.NET. Seperti yang Anda lihat, sangat mudah untuk menulis kode C# seperti itu dengan 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 ( ) } " ) ;
}
}
Jalankan contoh ini di Jupyter Notebook.
ResNet
versi mainan di API fungsional 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 " ) ;
Contoh F# untuk regresi linier tersedia di sini.
Contoh lanjutan lainnya dapat ditemukan di Contoh TensorFlow.NET.
Versi TensorFlow.NET | tensorflow 1.14, sekarang 10.0 | tensorflow 1.15, cuda 10.0 | tensorflow 2.3, sekarang 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
...
Ingin berkontribusi pada salah satu proyek terhangat di bidang Machine Learning? Ingin tahu bagaimana Tensorflow secara ajaib membuat grafik komputasi?
Kami menghargai setiap kontribusi betapapun kecilnya! Ada tugas untuk pemula hingga ahli, jika setiap orang hanya menangani tugas kecil, jumlah kontribusinya akan sangat besar.
Anda dapat:
Cara terbaik untuk mengetahui mengapa pengujian unit gagal adalah dengan melakukan satu langkah dalam C# atau F# dan Python terkait secara bersamaan untuk melihat di mana aliran eksekusi menyimpang atau di mana variabel menunjukkan nilai yang berbeda. IDE Python yang bagus seperti PyCharm memungkinkan Anda masuk ke dalam kode pustaka tensorflow.
Tambahkan SciSharp/TensorFlow.NET sebagai upstream ke repo lokal Anda ...
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
Harap pastikan Anda selalu memperbarui fork Anda dengan menarik secara teratur dari hulu.
git pull upstream master
Beli buku kami untuk membuat proyek open source menjadi TensorFlow.NET yang berkelanjutan
Bergabunglah dengan obrolan kami di Discord atau Gitter.
Ikuti kami di Twitter, Facebook, Medium, LinkedIn.
TensorFlow.NET adalah bagian dari SciSharp STACK