영어 | 중국어
중요한
tensorflow.net에 대한 우리의 작업이 많은 사용자를 끌어 모은 것을 기쁘게 생각합니다. 그러나 현재 이 저장소의 주요 관리자 중 누구도 새로운 기능과 버그 수정을 제공할 수 없습니다. 우리는 PR을 거부하지 않으며 검토를 돕습니다.
tensorflow.net의 기여자 또는 유지관리자가 되기를 원하신다면, 저희는 귀하가 시작하는 데 도움을 드리고 싶습니다.
이에 대해 유감스럽게 생각하며, 우리 중 한 사람이 여유를 갖게 되면 이 프로젝트에 대한 유지 관리를 재개할 것입니다.
master 브랜치와 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
너겟 소스에 추가하세요.
SciSharp STACK
의 임무는 대중적인 데이터 과학 기술을 .NET 세계에 도입하고 바퀴를 다시 개발하지 않고도 .NET 개발자에게 강력한 기계 학습 도구 세트를 제공하는 것입니다. API는 최대한 유사하게 유지되므로 학습 곡선이 전혀 없는 C# 또는 F#의 기존 TensorFlow 코드를 즉시 적용할 수 있습니다. 비교 사진을 보고 TensorFlow.NET을 사용하여 TensorFlow/Python 스크립트가 C# 프로그램으로 얼마나 편안하게 변환되는지 확인하세요.
SciSharp의 철학을 통해 Python으로 작성된 다수의 기계 학습 코드를 .NET으로 신속하게 마이그레이션할 수 있으므로 .NET 개발자는 최첨단 기계 학습 모델을 사용하고 이 프로젝트 없이는 불가능했던 방대한 TensorFlow 리소스에 액세스할 수 있습니다.
TensorFlow의 하위 수준 C++ API만 제공하고 Python을 사용하여 구축된 모델만 실행할 수 있는 TensorFlowSharp와 같은 다른 프로젝트와 비교할 때 Tensorflow.NET을 사용하면 순수 C# 및 F#을 사용하여 학습 및 추론 파이프라인을 구축할 수 있습니다. 게다가 Tensorflow.NET은 Python에서 .NET으로 코드를 쉽게 전송할 수 있도록 Tensorflow.Keras 바인딩을 제공합니다.
ML.NET은 또한 모델을 학습하고 추론하기 위한 백엔드 중 하나로 Tensorflow.NET을 사용하여 .NET과 더 나은 통합을 제공합니다.
소개 및 간단한 예:Tensorflow.NET 문서
자세한 문서: Tensorflow.NET에 대한 최종 가이드
예: TensorFlow.NET 예
예제 실행 또는 설치 문제 해결: Tensorflow.NET FAQ
NuGet 관리자에서 패키지 이름을 검색하거나 패키지 관리자 콘솔에서 아래 명령을 사용할 수 있습니다.
설치에는 두 부분이 포함되어 있으며 첫 번째 부분은 본체입니다.
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
두 번째 부분은 컴퓨팅 지원 부분입니다. 장치 및 시스템에 따라 다음 패키지 중 하나만 필요합니다.
### 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의 기본 사용법을 소개하기 위해 두 가지 간단한 예가 여기에 제공됩니다. 보시다시피 Python에서와 같이 C# 코드를 작성하는 것은 쉽습니다.
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에서 이 예제를 실행하세요.
Keras
기능 API의 ResNet
토이 버전 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, 쿠다 10.0 | 텐서플로우 1.15, 쿠다 10.0 | 텐서플로우 2.3, 쿠다 10.1 | 텐서플로우 2.4, 쿠다 11 | 텐서플로우 2.7, 쿠다 11 | 텐서플로우 2.10, 쿠다 11 |
---|---|---|---|---|---|---|
tf.net 0.10x, tf.keras 0.10 | 엑스 | |||||
tf.net 0.7x, tf.keras 0.7 | 엑스 | |||||
tf.net 0.4x, tf.keras 0.5 | 엑스 | |||||
tf.net 0.3x, tf.keras 0.4 | 엑스 | |||||
tf.net 0.2x | 엑스 | 엑스 | ||||
tf.net 0.15 | 엑스 | 엑스 | ||||
tf.net 0.14 | 엑스 |
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
...
머신러닝 분야에서 가장 인기 있는 프로젝트 중 하나에 기여하고 싶으신가요? Tensorflow가 마술처럼 계산 그래프를 생성하는 방법을 알고 싶으십니까?
아무리 작더라도 모든 기여에 감사드립니다! 초보자부터 전문가까지 모두를 위한 작업이 있습니다. 모두가 작은 작업만 수행한다면 기여의 총액은 엄청날 것입니다.
다음을 수행할 수 있습니다.
단위 테스트가 실패하는 이유를 알아내는 가장 좋은 방법은 C# 또는 F#과 해당 Python에서 동시에 단일 단계를 실행하여 실행 흐름이 어디에서 벗어나거나 변수가 다른 값을 나타내는지 확인하는 것입니다. PyCharm과 같은 훌륭한 Python IDE를 사용하면 tensorflow 라이브러리 코드를 한 단계씩 실행할 수 있습니다.
SciSharp/TensorFlow.NET을 로컬 저장소에 업스트림으로 추가하세요.
git remote add upstream [email protected]:SciSharp/TensorFlow.NET.git
정기적으로 업스트림에서 포크를 가져와서 포크를 최신 상태로 유지하세요.
git pull upstream master
오픈소스 프로젝트를 지속 가능하게 만들려면 책을 구입하세요. TensorFlow.NET实战
Discord 또는 Gitter에서 채팅에 참여하세요.
트위터, 페이스북, 미디엄, 링크드인에서 우리를 팔로우하세요.
TensorFlow.NET은 SciSharp STACK의 일부입니다.