Merge branch 'e-fominov-faq-changes'

This commit is contained in:
Davis King 2016-07-06 09:48:00 -04:00
commit e20b6512f5

View File

@ -329,5 +329,52 @@ cross_validate_trainer_threaded(trainer,
<!-- ************************************************************************* -->
<questions group="Deep Learning">
<question text="Why can't I use DNN module with Visual Studio?">
The deep learning toolkit in dlib requires a C++11 compiler.
Unfortunately, as of July 2016, no versions of Visual Studio fully
support C++11, so not all the deep learning code will compile.
However, all the other modules in dlib can be used in Visual Studio
without any trouble.
</question>
<question text="Why can't I change the network architecture at runtime?">
A major design goal of this API is to let users create new loss
layers, computational layers, and solvers without needing to
understand or even look at the dlib internals. A lot of the API
decisions are based on what makes the interface a user needs to
implement to create new layers as simple as possible. In particular,
designing the API in this compile-time static way makes it simple for
these use cases.
<p>
Here is an example of one problem it addresses. Since dlib
exposes the entire network architecture to the C++ type system we
can get automatic serialization of networks. Without this, we
would have to resort to the kind of hacky global layer registry
used in other tools that compose networks entirely at runtime.
</p>
<p>
Another nice feature is that we get to use C++11 alias template
statements to create network sub-blocks, which we can then use to easily
define very large networks. There are examples of this in <a
href="dnn_introduction2_ex.cpp.html">this example program</a>. It
should also be pointed out that it takes days or even weeks to
train one network. So it isn't as if you will be writing a
program that loops over large numbers of networks and trains them
all. This makes the time needed to recompile a program to change
the network irrelevant compared to the entire training time.
Moreover, there are plenty of compile time constructs in C++ you
can use to enumerate network architectures (e.g. loop
over filter widths) if you really wanted to do so.
</p>
<p>
All that said, if you think you found a compelling use case that isn't supported
by the current API feel free to post a <a href="https://github.com/davisking/dlib/issues">github</a> issue.
</p>
</question>
</questions>
<!-- ************************************************************************* -->
</doc>