TensorFlowSharpTensorFlow 的 .NET 綁定
TensorFlowSharp 是對(duì) TensorFlow C 語(yǔ)言版 API 的封裝,綁定為 .NET API,也是 TensorFlow 的 C# 語(yǔ)言表述,以此來方便 C# 和 F# 開發(fā)人員使用 TensorFlow。
目前它與 TensoFlow 接口的綁定工作已經(jīng)進(jìn)入尾聲,作者正在對(duì) API 做一些優(yōu)化。
使用 TensorFlowSharp
安裝
最簡(jiǎn)單的入門方法是使用 TensorFlowSharp 的 NuGet 包,它包含了 .NET API 和 64 位 Linux、Mac 和 Windows 的原生庫(kù)。
nuget install TensorFlowSharp
或者你也可以在 Visual Studio 中的 NuGet 包 UI 中選擇它。
在 VS 中,要先確保你的環(huán)境是 .NET 4.6.1 或者更高版本,因?yàn)檫@個(gè)軟件包使用了一些新的 .NET 特性。
當(dāng)然,你也可以直接點(diǎn)擊這里下載。
使用 TensorFlowSharp
最好的學(xué)習(xí)方式是閱讀 SampleTest 和 Examples 目錄下的 stand-alone 這兩個(gè)demo,它們使用了大量 TensorFlowSharp 的 API 。
這種 API 綁定在設(shè)計(jì)上更接近使用顯式 TensorFlow 圖形和會(huì)話的 Java 和 Go 綁定。
通常會(huì)先創(chuàng)建一個(gè)圖形(TFGraph)并在那里設(shè)置操作,然后從中創(chuàng)建會(huì)話(TFSession),接著使用會(huì)話運(yùn)行器設(shè)置輸入和輸出并執(zhí)行。
例如:
using(var graph = new TFGraph ())
{
graph.Import (File.ReadAllBytes ("MySavedModel"));
var session = new TFSession (graph);
var runner = session.GetRunner ();
runner.AddInput (graph ["input"] [0], tensor);
runner.Fetch (graph ["output"] [0]);
var output = runner.Run ();
// Fetch the results from output:
TFTensor result = output [0];
}
在不需要獨(dú)立設(shè)置圖形的情況下,可以在會(huì)話中創(chuàng)建一個(gè)。以下示例顯示如何濫用 TensorFlow 來計(jì)算兩個(gè)數(shù)字的相加:
using (var session = new TFSession())
{
var graph = session.Graph;
var a = graph.Const(2);
var b = graph.Const(3);
Console.WriteLine("a=2 b=3");
// Add two constants
var addingResults = session.GetRunner().Run(graph.Add(a, b));
var addingResultValue = addingResults.GetValue();
Console.WriteLine("a+b={0}", addingResultValue);
// Multiply two constants
var multiplyResults = session.GetRunner().Run(graph.Mul(a, b));
var multiplyResultValue = multiplyResults.GetValue();
Console.WriteLine("a*b={0}", multiplyResultValue);
}
下邊是使用 F# 的同一個(gè)例子:
#r @"packages\TensorFlowSharp.1.4.0\lib\net461\TensorFlowSharp.dll"
open System
open System.IO
open TensorFlow
// set the path to find the native DLL
Environment.SetEnvironmentVariable("Path",
Environment.GetEnvironmentVariable("Path") + ";" + __SOURCE_DIRECTORY__ + @"/packages/TensorFlowSharp.1.2.2/native")
module AddTwoNumbers =
let session = new TFSession()
let graph = session.Graph
let a = graph.Const(new TFTensor(2))
let b = graph.Const(new TFTensor(3))
Console.WriteLine("a=2 b=3")
// Add two constants
let addingResults = session.GetRunner().Run(graph.Add(a, b))
let addingResultValue = addingResults.GetValue()
Console.WriteLine("a+b={0}", addingResultValue)
// Multiply two constants
let multiplyResults = session.GetRunner().Run(graph.Mul(a, b))
let multiplyResultValue = multiplyResults.GetValue()
Console.WriteLine("a*b={0}", multiplyResultValue)
推進(jìn) TensorFlowSharp
如果你想推進(jìn) TensorFlowSharp 的發(fā)展,可以閱讀 CONTRIBUTING.md 。
