Tiny-dnn – A C++11 implementation of deep learning
github.com
github.com
https://msdn.microsoft.com/en-us/library/hh567368.aspx
Why they have been behind? Wild guess, Microsoft thought that C#/.NET would be the future for everything and scaled back on C++, but with Windows 10 they realized that the world still consist much of C++, so now it is a equal member again together with .NET and HTML5/JavaScript, i.e Universal Windows Platform.
http://en.cppreference.com/w/cpp/compiler_support
And C++ compiler support page doesn't provide information about the likes of TI and similar embedded OEMs, otherwise that reddish colour would be even bigger.
The VC team blog provides fairly decent information with regards to reasoning and progress behind this.
Actually it is a bit more complex than that.
.NET used to belong to DevTools and C++ to WindowsDev.
WindowsDev lost the political wars to DevTools when MS went full .NET, but given the technical and political battles that caused Longhorn failure, WindowsDev gained ground.
Hence why starting with Vista the "Going Native" motto was born, and COM gained ground as the way to get more OS APIs to user space.
Alongside this, "Going Native" wave, Singularity and Midori meant bringing those efforts back to .NET thus creating .NET Native.
UWP original design, WinRT, can actually be traced back to .NET before the CLR was created. When they were designing COM 2.0 Runtime, as the future way to use VB, C++ on Windows.
Also before you rejoice too much about C++'s role, check how many C++ related talks are there at Build, Ignite and Connect().
C++ is seen as the official systems programming language for kernel programming, drivers, games and GPGPU. For everything else, the documentation or conference sessions tend to focus on .NET languages.
And none of those variants as good as C++ Builder, in RAD and OO library design experience.
Kernel and driver development is still very much C.
And the addition of UDMF with COM APIs.
https://herbsutter.com/2012/05/03/reader-qa-what-about-vc-an...
The modern C support has only been done to the extent required by ANSI C++, and by integrating clang frontend with VC++ backend (C2).
Microsoft is doing with C2 something similar to LLVM for all their languages (.NET Native, VC++, clang frontend).
Worked reasonably, solved my problem as well as I hoped it would. It is rather limited in features though- no training on GPU, single-threaded by design, etc.
tiny-dnn appears to have a lot more choices regarding network architecture, parallelization options. Would definitely have tried tiny-dnn first if I had known about it.
But for very specific uses, right? DCNN excel at image and video, but are DCNN also common for other tasks?
Why is this taking so long?
Really? There are certainly frameworks that you can use to achieve this performance in that amount of code, but I would be really interested to see that in vanilla JS/Python.
```js
const dotSign = (v1, v2) => v1.reduce((prev, x, i) => prev + x * v2[i], 1) > 0 ? 1 : -1
module.exports = (data, weights = Array(data[0].content.length).fill(0)) => {
for(const {label, content} of data) {
const delta = (label - dotSign(content, weights)) / 2;
weights = weights.map((x, i) => x + delta * content[i]);
}
return { perceive: vector => dotSign(vector, weights), weights };
}
```I can upload an electron app that does this with mnist if interested.
MNIST has 60k training samples and 10k test samples. Are you using only 400 of them? Is 95% the accuracy on the test samples or on the same set of training samples? I believe when we talk about MNIST accuracy, we always refer to the accuracy on the 10k test samples.
When looking through the code I saw that BP for LRN is not implemented yet, so you cannot pick a model using LRN (or you have to implement it).
[1] https://github.com/chaosmail/caffejs/blob/master/docs/assets...
20+ years ago, I made my living on C++, but dropped it. Looking at the example programs using C++11 features, I am motivated to get up to speed on C++11. I put writing a NLP example for tiny-dnn and sending a pull request on my todo list.
[1] http://chaosmail.github.io/deeplearning/2016/10/22/intro-to-...
And Udacity offers a course on deep learning: https://www.udacity.com/course/deep-learning--ud730