Skip to main content

Gradient: Full TensorFlow binding for Asp.Net C#

I know there's a rule against self-promotion, but I am hoping my work will actually be very useful for C# and .NET lovers, who also want to get into machine learning.

TL;DR; Over the past 2 years I've made a .NET binding to the full TensorFlow Python API, including Keras, tf.contrib, and, basically, everything else. It's called Gradient, its on NuGet, and you can read the guide here: https://github.com/losttech/Gradient/#getting-started

It started with the desire to explore deep learning, where I quickly discovered you basically have to use Python for the "latest and greatest" frameworks and SotA. And I don't like dynamic languages, and love C#. There was CNTK, which worked nicely, but never gained enough community. It was (and still is) very hard to find advanced sample code for it.

It would take enormous effort to manually port TensorFlow in its entirety to .NET. Projects like TensorFlowSharp and TensorFlow.NET are trying to get to that state, but so far they only provide bindings to the low-level operations and graph construction, while barely touching any high-level features like Keras-like APIs, TensorBoard integration, data pipelines, etc.

So I choose a different approach: automatic source-to-source translation (also because I have quite a bit of experience in this). Originally, the goal was to make a full port, but Python (as any other dynamic languages) is notoriously hard to analyze, and, as it turned out, TensorFlow does not have the cleanest implementation, which made it 5x harder :) About a year ago that forced scope reduction, and currently the project is just making a mostly statically-typed binding for TensorFlow for Python via a great Python embedding library for .NET called Python.NET. To render C# Gradient, of course, uses Roslyn. (BTW, guess which part of Roslyn is the slowest? ... code formatting. Of 30 minutes total build time, about 8 is Python static analysis, and another 12 (!) are spent to convert C# AST into text. Remember that, when you ever feel Visual Studio C# refactoring is slow when it touches many files).

The latest preview (v5) has been out for a bit now, and as the project is closing to RC and official release, I though it is time to share it with a larger community. I am training various models with it right now, including a couple for Kaggle competitions. Even got GPT-2 working and fine-tuning (see samples) - will soon release an open-source song lyrics generator on top of it, so stay tuned ;)

Some links:

Comments

Popular posts from this blog

Machine Learning with ML.NET 1.0

As a person coming from .NET world, it was quite hard to get into  machine learning  right away. One of the main reasons was the fact that I couldn’t start Visual Studio and  try out  these new things in the technologies I am proficient with. I had to solve another obstacle and learn other  programming languages  more fitting for the job like Python and R. You can imagine my happiness when more than a year ago,  Microsoft  announced that as a part of  .NET Core 3 , a new feature will be available –  ML.NET . In fact it made me so happy that this is the third time I write similar  guide . Basically, I wrote one when ML.NET was a  version 0.2  and one when it was  version 0.10 . Both times, guys from Microsoft decided to modify the  API  and make my articles obsolete. That is why I have to do it once again. But hey, third time is the charm, so hopefully I will not have to do this again until ML.NET 2.0   Anyhow, with  .NET Core 3  we got a new toy to play around. With this tool we ar

Integrating Tensor flow API into ASP.net Web applications for Image detection

Introduction Tensor flow provides advanced Machine Learning API. For the example here we will provide a solution for the Image recognition. The same can be applied to other use cases such as Text recognition or any other data set that needs to solve the problems of AI and Machine Learning such as: Predictive Analytics Cognitive Processes and its Automation e.g. NLP Virtual Agents (Bot’s) Camera Image detection and processing e.g. Industrial Robotics and Drones Text Knowledge Analytics Application Development Steps In the first step we create an ASP.NET application for connecting the camera feed or input data. In the next step Install Tensor flow as per instructions on the website –>  Click here To begin using Tensor flow we need to decide on the model to use for processing input data – There is an option to use either ready-made models or develop on own depending on the problem at hand. For simplicity we will use ready-made model called a deep  convolutional neu

Using Tensorflow Object Detection API to build a Toy detector

Here I extend the API to train on a new object that is not part of the COCO dataset. In this case I chose a toy that was lying around. See gif below. So far, I have been impressed by the performance of the API. The steps highlighted here can be extended to any single or multiple object detector that you want to build. Tensorflow Toy Detector~ You can find the code on my  Github  repo Collecting data The first step is collecting images for your project. You could download them from google ensuring you have a wide variation in angles, brightness, scale etc. In my case I created a video of the little aeroplane toy and used  Opencv  to extract images from the video. This saved me a lot of time. I ensured that images were taken from multiple angles. You can also randomly change brightness for some of the images so that the detector can work under different conditions of lightning. Overall 100–150 pics will suffice. See some sample images below: Sample images P