TensorFlowSharp 是对 TensorFlow C 语言版 API 的封装,绑定为 .NET API,也是 TensorFlow 的 C# 语言表述,以此来方便 C# 和 F# 开发人员使用 TensorFlow。
目前它与 TensoFlow 接口的绑定工作已经进入尾声,作者正在对 API 做一些优化。
最简单的入门方法是使用 TensorFlowSharp 的 NuGet 包,它包含了 .NET API 和 64 位 Linux、Mac 和 Windows 的原生库。
nuget install TensorFlowSharp
或者你也可以在 Visual Studio 中的 NuGet 包 UI 中选择它。
在 VS 中,要先确保你的环境是 .NET 4.6.1 或者更高版本,因为这个软件包使用了一些新的 .NET 特性。
当然,你也可以直接点击这里下载。
最好的学习方式是阅读 SampleTest 和 Examples 目录下的 stand-alone 这两个demo,它们使用了大量 TensorFlowSharp 的 API 。
这种 API 绑定在设计上更接近使用显式 TensorFlow 图形和会话的 Java 和 Go 绑定。
通常会先创建一个图形(TFGraph)并在那里设置操作,然后从中创建会话(TFSession),接着使用会话运行器设置输入和输出并执行。
例如:
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]; }
在不需要独立设置图形的情况下,可以在会话中创建一个。以下示例显示如何滥用 TensorFlow 来计算两个数字的相加:
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# 的同一个例子:
#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)
如果你想推进 TensorFlowSharp 的发展,可以阅读 CONTRIBUTING.md 。