อังกฤษ | 中文
สำคัญ
เราดีใจที่งานของเราบน tensorflow.net สามารถดึงดูดผู้ใช้จำนวนมาก อย่างไรก็ตาม ในขณะนี้ ไม่มีผู้ดูแลหลักของ repo นี้ที่พร้อมใช้งานสำหรับคุณสมบัติใหม่และการแก้ไขข้อบกพร่อง เราจะไม่ปฏิเสธการประชาสัมพันธ์และจะช่วยตรวจสอบพวกเขา
หากคุณต้องการเป็นผู้มีส่วนร่วมหรือผู้ดูแล tensorflow.net เรายินดีที่จะช่วยคุณในการเริ่มต้น
เรารู้สึกเสียใจสำหรับสิ่งนั้น และเราจะดำเนินการบำรุงรักษาโปรเจ็กต์นี้ต่อเมื่อหนึ่งในพวกเรามีแบนด์วิธสำหรับมันแล้ว
สาขาหลักและ v0.100.x สอดคล้องกับ tensorflow v2.10 สาขา v0.6x มาจาก tensorflow v2.6, v0.15-tensorflow1.15 มาจาก tensorflow1.15 โปรดเพิ่ม https://www.myget.org/F/scisharp/api/v3/index.json
ลงในแหล่ง nuget เพื่อใช้การเปิดตัวทุกคืน
ภารกิจของ SciSharp STACK
คือการนำเทคโนโลยีวิทยาศาสตร์ข้อมูลยอดนิยมมาสู่โลก .NET และเพื่อให้นักพัฒนา .NET ได้รับชุดเครื่องมือ Machine Learning อันทรงพลัง โดยไม่ต้องคิดค้นสิ่งใหม่ขึ้นมาใหม่ เนื่องจาก API จะถูกเก็บไว้ให้คล้ายกันมากที่สุดเท่าที่จะเป็นไปได้ คุณจึงสามารถปรับโค้ด TensorFlow ที่มีอยู่ใน C# หรือ F# ได้ทันทีโดยไม่มีช่วงการเรียนรู้เป็นศูนย์ ลองดูภาพเปรียบเทียบและดูว่าสคริปต์ TensorFlow/Python แปลเป็นโปรแกรม C# ด้วย TensorFlow.NET ได้อย่างสะดวกสบายเพียงใด
ปรัชญาของ SciSharp ช่วยให้โค้ดการเรียนรู้ของเครื่องจำนวนมากที่เขียนด้วย Python สามารถโยกย้ายไปยัง .NET ได้อย่างรวดเร็ว ช่วยให้นักพัฒนา .NET สามารถใช้โมเดลการเรียนรู้ของเครื่องที่ล้ำสมัย และเข้าถึงทรัพยากร TensorFlow จำนวนมากซึ่งจะเป็นไปไม่ได้หากไม่มีโปรเจ็กต์นี้
เมื่อเปรียบเทียบกับโปรเจ็กต์อื่นๆ เช่น TensorFlowSharp ซึ่งให้บริการเฉพาะ C++ API ระดับต่ำของ TensorFlow และสามารถเรียกใช้โมเดลที่สร้างขึ้นโดยใช้ Python เท่านั้น Tensorflow.NET ทำให้สามารถสร้างไปป์ไลน์ของการฝึกอบรมและการอนุมานด้วย C# และ F# ล้วนๆ ได้ นอกจากนี้ Tensorflow.NET ยังมีการเชื่อมโยง Tensorflow.Keras เพื่อให้ง่ายต่อการถ่ายโอนโค้ดของคุณจาก python ไปยัง .NET
ML.NET ยังใช้ Tensorflow.NET เป็นหนึ่งในแบ็กเอนด์ในการฝึกและอนุมานโมเดลของคุณ ซึ่งให้การผสานรวมกับ .NET ได้ดียิ่งขึ้น
บทนำและตัวอย่างง่ายๆ:เอกสาร Tensorflow.NET
เอกสารรายละเอียด:คู่มือขั้นสุดท้ายสำหรับ Tensorflow.NET
ตัวอย่าง:ตัวอย่าง TensorFlow.NET
การแก้ไขปัญหาตัวอย่างการทำงานหรือการติดตั้ง:คำถามที่พบบ่อยของ Tensorflow.NET
คุณสามารถค้นหาชื่อแพ็คเกจใน NuGet Manager หรือใช้คำสั่งด้านล่างในคอนโซลตัวจัดการแพ็คเกจ
การติดตั้งประกอบด้วยสองส่วน ส่วนแรกคือส่วนหลัก:
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
ส่วนที่ 2 เป็นส่วนสนับสนุนด้านคอมพิวเตอร์ จำเป็นต้องใช้แพ็คเกจใดแพ็คเกจหนึ่งต่อไปนี้เท่านั้น ทั้งนี้ขึ้นอยู่กับอุปกรณ์และระบบของคุณ
### 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
มีตัวอย่างง่ายๆ สองตัวอย่างให้ไว้ที่นี่เพื่อแนะนำการใช้งานพื้นฐานของ Tensorflow.NET อย่างที่คุณเห็น การเขียนโค้ด C# แบบเดียวกับใน 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 ( ) } " ) ;
}
}
รันตัวอย่างนี้ใน Jupyter Notebook
ResNet
เวอร์ชันของเล่นใน API การทำงาน 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 " ) ;
ดูตัวอย่าง F# สำหรับการถดถอยเชิงเส้นได้ที่นี่
ตัวอย่างขั้นสูงเพิ่มเติมสามารถพบได้ในตัวอย่าง TensorFlow.NET
เวอร์ชัน TensorFlow.NET | เทนเซอร์โฟลว์ 1.14, cuda 10.0 | เทนเซอร์โฟลว์ 1.15, cuda 10.0 | เทนเซอร์โฟลว์ 2.3, cuda 10.1 | เทนเซอร์โฟลว์ 2.4, cuda 11 | เทนเซอร์โฟลว์ 2.7, cuda 11 | เทนเซอร์โฟลว์ 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
...
รู้สึกอยากมีส่วนร่วมกับหนึ่งในโปรเจ็กต์ที่ร้อนแรงที่สุดในสาขา Machine Learning หรือไม่? ต้องการทราบว่า Tensorflow สร้างกราฟการคำนวณอย่างน่าอัศจรรย์ได้อย่างไร
เราขอขอบคุณทุกการมีส่วนร่วมไม่ว่าจะเล็กน้อยก็ตาม! มีงานตั้งแต่มือใหม่จนถึงผู้เชี่ยวชาญ ถ้าทุกคนจัดการงานเล็กๆ เท่านั้น ผลรวมของการมีส่วนร่วมก็จะยิ่งใหญ่มาก
คุณสามารถ:
วิธีที่ดีที่สุดในการค้นหาว่าเหตุใด Unit Test จึงล้มเหลวคือทำขั้นตอนเดียวใน C# หรือ F# และ Python ที่เกี่ยวข้องพร้อมกันเพื่อดูว่ากระแสของการดำเนินการแยกออกที่ใดหรือที่ที่ตัวแปรแสดงค่าที่แตกต่างกัน Python IDE ที่ดีอย่าง PyCharm ช่วยให้คุณก้าวเข้าสู่โค้ดไลบรารี tensorflow ได้ในขั้นตอนเดียว
เพิ่ม SciSharp/TensorFlow.NET เป็นอัปสตรีมไปยัง repo ในพื้นที่ของคุณ ...
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
โปรดตรวจสอบให้แน่ใจว่าคุณได้อัปเดตส้อมของคุณอยู่เสมอโดยการดึงจากต้นน้ำเป็นประจำ
git pull upstream master
ซื้อหนังสือของเราเพื่อทำให้โครงการโอเพ่นซอร์สมีความยั่งยืน TensorFlow.NET实战
เข้าร่วมการแชทของเราบน Discord หรือ Gitter
ติดตามเราบน Twitter, Facebook, Medium, LinkedIn
TensorFlow.NET เป็นส่วนหนึ่งของ SciSharp STACK