英語 | 中国語
重要
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
を nuget ソースに追加してください。
SciSharp STACK
の使命は、一般的なデータ サイエンス テクノロジを .NET の世界に導入し、車輪の再発明を行わずに、強力な機械学習ツール セットを .NET 開発者に提供することです。 API は可能な限り類似しているため、学習曲線を必要とせずに、C# または F# の既存の TensorFlow コードをすぐに適応させることができます。比較画像を見て、TensorFlow/Python スクリプトが TensorFlow.NET を使用して C# プログラムにどれほど快適に変換されるかを確認してください。
SciSharp の理念により、Python で書かれた多数の機械学習コードを .NET に迅速に移行できるため、.NET 開発者は最先端の機械学習モデルを使用し、このプロジェクトなしでは不可能だった膨大な数の TensorFlow リソースにアクセスできるようになります。
TensorFlow の低レベル C++ API のみを提供し、Python を使用して構築されたモデルのみを実行できる TensorFlowSharp などの他のプロジェクトと比較して、Tensorflow.NET では、純粋な C# と F# を使用してトレーニングと推論のパイプラインを構築できます。さらに、Tensorflow.NET は Tensorflow.Keras のバインディングを提供し、コードを Python から .NET に簡単に転送できるようにします。
ML.NET は、モデルのトレーニングと推論のためのバックエンドの 1 つとして Tensorflow.NET も採用しており、これにより .NET との統合が強化されます。
概要と簡単な例:Tensorflow.NET ドキュメント
詳細ドキュメント:The Definitive Guide to Tensorflow.NET
例:TensorFlow.NETの例
サンプル実行またはインストールのトラブルシューティング:Tensorflow.NET FAQ
NuGet マネージャーでパッケージ名を検索するか、パッケージ マネージャー コンソールで以下のコマンドを使用できます。
インストールには 2 つの部分が含まれており、最初の部分は本体です。
# ## Install Tensorflow.NET
PM > Install-Package TensorFlow.NET
# ## Install Tensorflow.Keras
PM > Install-Package TensorFlow.Keras
2 番目の部分はコンピューティング サポートの部分です。デバイスとシステムに応じて、次のパッケージのうち 1 つだけが必要です。
### 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 の基本的な使用法を紹介するために、2 つの簡単な例を示します。ご覧のとおり、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、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 | × | |||||
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
...
機械学習分野で最も注目されているプロジェクトの 1 つに貢献してみませんか? 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 でチャットに参加してください。
Twitter、Facebook、Medium、LinkedIn でフォローしてください。
TensorFlow.NET は SciSharp STACK の一部です