TensorFlowSharp 1.5.0

.NET Bindings for TensorFlow

There is a newer version of this package available.
See the version list below for details.
Install-Package TensorFlowSharp -Version 1.5.0
dotnet add package TensorFlowSharp --version 1.5.0
<PackageReference Include="TensorFlowSharp" Version="1.5.0" />
For projects that support PackageReference, copy this XML node into the project file to reference the package.
paket add TensorFlowSharp --version 1.5.0
The NuGet Team does not provide support for this client. Please contact its maintainers for support.

Your best source of information right now are the SampleTest that exercises various APIs of TensorFlowSharp, or the stand-alone samples located in "Examples".

You can also access the API documentation.

This API binding is closer design-wise to the Java and Go bindings which use explicit TensorFlow graphs and sessions. Your application will typically create a graph (TFGraph) and setup the operations there, then create a session from it (TFSession), then use the session runner to setup inputs and outputs and execute the pipeline.

Something like this:

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];
}

In scenarios where you do not need to setup the graph independently, the session will create one for you. The following example shows how to abuse TensorFlow to compute the addition of two numbers:

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);
}

Here is an F# scripting version of the same example, you can use this in F# Interactive:

#r @"packages\TensorFlowSharp.1.5.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)

Your best source of information right now are the SampleTest that exercises various APIs of TensorFlowSharp, or the stand-alone samples located in "Examples".

You can also access the API documentation.

This API binding is closer design-wise to the Java and Go bindings which use explicit TensorFlow graphs and sessions. Your application will typically create a graph (TFGraph) and setup the operations there, then create a session from it (TFSession), then use the session runner to setup inputs and outputs and execute the pipeline.

Something like this:

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];
}

In scenarios where you do not need to setup the graph independently, the session will create one for you. The following example shows how to abuse TensorFlow to compute the addition of two numbers:

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);
}

Here is an F# scripting version of the same example, you can use this in F# Interactive:

#r @"packages\TensorFlowSharp.1.5.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)

Release Notes

Adds support for TensorFlow 1.5

* No longer a -pre release
* Ships the latest official 1.5 packages (January 26th, Build #80 Mac, Linux, #59 Windows)
* This brings support for the TensorFlow 1.5 API
* New transpose overload without explicit perm parameter (Cesar Souza)
* New ReduceProd method (Cesar Souza)
* Supports for TensorFlow.Cond (Cesar Souza)
* Ships the latest official 1.5 packages.

Showing the top 1 GitHub repositories that depend on TensorFlowSharp:

Repository Stars
cesarsouza/keras-sharp
An ongoing effort to port the Keras deep learning library to C#, supporting both TensorFlow and CNTK

Version History

Version Downloads Last updated
1.13.0 5,244 5/1/2019
1.12.0 17,833 12/6/2018
1.11.0 7,383 10/2/2018
1.10.0 3,690 9/7/2018
1.9.0 3,629 8/7/2018
1.9.0-pre1 374 8/2/2018
1.8.0-pre1 2,717 5/25/2018
1.7.0 10,867 4/15/2018
1.7.0-pre1 590 4/3/2018
1.6.0-pre1 855 3/11/2018
1.5.1-pre1 448 3/1/2018
1.5.0 9,183 1/27/2018
1.5.0-pre2 386 1/24/2018
1.5.0-pre1 416 1/14/2018
1.4.0 9,506 11/22/2017
1.4.0-pre1 894 11/5/2017
1.3.1-pre1 423 9/15/2017
1.3.0 2,711 9/15/2017
1.3.0-pre1 1,069 8/26/2017
1.2.2 9,333 6/28/2017
1.2.1 504 6/28/2017
0.96.0 7,586 5/21/2017
0.95.0 447 5/21/2017
0.94.0 492 5/21/2017
0.13.0 83 5/1/2019
Show less