TensorFlowSharp - 用于 .NET 语言的 TensorFlow API

简介

TensorFlowSharp - 用于 .NET 语言的 TensorFlow API。TensorFlowSharp 是运行现有模型的良好运行时,并且主要是与底层 TensorFlow 运行时的直接绑定

安装

最简单的入门方法是使用 TensorFlowSharp 的 NuGet 包,其中包含 .NET API 以及使用 CPU 后端的 64 位 Linux、Mac 和 Windows 的本机库。

nuget install TensorFlowSharp

使用

这个 API 绑定在设计上更接近于使用显式 TensorFlow 图和会话的 Java 和 Go 绑定。您的应用程序通常会创建一个图 (TFGraph) 并在那里设置操作,然后从中创建一个会话 (TFSession),然后使用会话运行器设置输入和输出并执行管道。代码如下

using (var graph = new TFGraph ())
{
    // Load the model
    graph.Import (File.ReadAllBytes ("MySavedModel"));
    using (var session = new TFSession (graph))
    {
        // Setup the runner
        var runner = session.GetRunner ();
        runner.AddInput (graph ["input"] [0], tensor);
        runner.Fetch (graph ["output"] [0]);

        // Run the model
        var output = runner.Run ();

        // Fetch the results from output:
        TFTensor result = output [0];
    }
}

如果您的应用程序对 GC 周期很敏感,您可以按如下方式运行您的模型。然后,该Run方法将仅在第一次调用时分配托管内存,并在以后重用它。请注意,这要求您重用Runner实例而不是更改输入数据的形状:

// Some input matrices
var inputs = new float[][,] {
    new float[,] { { 1, 2 }, { 3, 4 } },
    new float[,] { { 2, 4 }, { 6, 8 } }
};

// Assumes all input matrices have identical shape
var shape = new long[] { inputs[0].GetLongLength(0), inputs[0].GetLongLength(1) };
var size = inputs[0].Length * sizeof(float);

// Empty input and output tensors
var input = new TFTensor(TFDataType.Float, shape, size);
var output = new TFTensor[1];

// Result array for a single run
var result = new float[1, 1];

using (var graph = new TFGraph())
{
    // Load the model
    graph.Import(File.ReadAllBytes("MySavedModel"));
    using (var session = new TFSession(graph))
    {
        // Setup the runner
        var runner = session.GetRunner();
        runner.AddInput(graph["input"][0], input);
        runner.Fetch(graph["output"][0]);

        // Run the model on each input matrix
        for (int i = 0; i < inputs.Length; i++)
        {
            // Mutate the input tensor
            input.SetValue(inputs[i]);

            // Run the model
            runner.Run(output);

            // Fetch the result from output into `result`
            output[0].GetValue(result);
        }
    }
}

在您不需要单独设置图表的情况下,会话将为您创建一个。以下示例展示了如何使用 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);
}

Github地址

https://github.com/migueldeicaza/TensorFlowSharp

如果大家喜欢我的文章,还麻烦给个关注并点个赞, 希望net生态圈越来越好!

3a11d886499704051e754a816657d68e.png

技术群:添加小编微信并备注进群

小编微信:mm1552923   

公众号:dotNet编程大全    

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值