Skip to content

NiklasGustafsson/TorchSharp

Repository files navigation

Build Status

TorchSharp

TorchSharp is a .NET library that provides access to the library that powers PyTorch.

The focus is to bind the API surfaced by libtorch with a particular focus on tensors.

The technology is a "wrapper library" no more no less. DiffSharp uses this repository extensively and has been a major factor in iterating support.

Things that you can try:

using TorchSharp;
using TorchSharp.Tensor;
using TorchSharp.NN;
using static TorchSharp.Tensor.Modules;

var lin1 = Linear(1000, 100);
var lin2 = Linear(100, 10);
var seq = Sequential(lin1, Relu(), lin2);

var x = Float32Tensor.RandomN(new long[] { 64, 1000 }, device: "cpu:0");
var y = Float32Tensor.RandomN(new long[] { 64, 10 }, device: "cpu:0");

double learning_rate = 0.00004f;
float prevLoss = float.MaxValue;
var optimizer = Optimizer.Adam(seq.Parameters(), learning_rate);
var loss = Losses.MSE(NN.Reduction.Sum);

for (int i = 0; i < 10; i++)
{
    var eval = seq.Forward(x);
    var output = loss(eval, y);
    var lossVal = output.ToSingle();

    Assert.True(lossVal < prevLoss);
    prevLoss = lossVal;

    optimizer.ZeroGrad();

    output.Backward();

    optimizer.Step();
}

Memory management

See docfx/articles/memory.md.

Developing

See DEVGUIDE.md.

Uses

DiffSharp also uses this repository extensively and has been a major factor in iterating support.

About

.NET bindings for the Pytorch engine

Resources

License

Code of conduct

Stars

Watchers

Forks

Packages

No packages published

Languages

  • C# 91.8%
  • C++ 4.4%
  • C 2.6%
  • F# 0.4%
  • Python 0.3%
  • Jupyter Notebook 0.2%
  • Other 0.3%