mirror of
https://github.com/davisking/dlib.git
synced 2024-11-01 10:14:53 +08:00
Worked on this page.
--HG-- extra : convert_revision : svn%3Afdd8eb12-d10e-0410-9acb-85c331704f74/trunk%403466
This commit is contained in:
parent
b90b5f15d0
commit
e766b30d71
@ -9,6 +9,23 @@
|
||||
<!-- ************************************************************************* -->
|
||||
|
||||
<body>
|
||||
|
||||
<br/><br/>
|
||||
<p>
|
||||
One of the major goals of dlib is to have documentation that enables
|
||||
someone to easily make use of its various components. Ideally,
|
||||
you would read a short description of something, understand it immediately,
|
||||
and begin using it in your application without any difficulty. Obviously, this
|
||||
depends partly on the background of the user. For example, if you have
|
||||
never written software before then it probably isn't going to be this easy.
|
||||
</p>
|
||||
<p>
|
||||
This page contains references to books, along with my commentary, which explain most of
|
||||
the subjects needed to understand the various parts of the library. In most cases these are
|
||||
the books I learned from during the process
|
||||
of creating dlib. As always, if you disagree with anything or think I have left out an important
|
||||
text then shoot me an <a href="mailto:davis@dlib.net">email</a>.
|
||||
</p>
|
||||
<br/><br/>
|
||||
|
||||
|
||||
@ -16,33 +33,84 @@
|
||||
<ul>
|
||||
<h3>C++</h3>
|
||||
<ul>
|
||||
<li> <i>Programming: Principles and Practice Using C++</i> by Bjarne Stroustrup </li>
|
||||
<li> <i>Effective C++: 55 Specific Ways to Improve Your Programs and Designs</i> (3rd Edition) by Scott Meyers </li>
|
||||
<li> <i>More Effective C++: 35 New Ways to Improve Your Programs and Designs</i> by Scott Meyers </li>
|
||||
<li> <i>The C++ Standard Library: A Tutorial and Reference</i> by Nicolai M. Josuttis </li>
|
||||
<li> <a href="http://stdcxx.apache.org/doc/stdlibref/index.html">Apache C++ Standard Library Reference</a></li>
|
||||
<li> <i>Programming: Principles and Practice Using C++</i> by Bjarne Stroustrup
|
||||
<ul> This is the sort of book you would use in a freshman introduction-to-programming class.
|
||||
So if you are just beginning to study programming and interested in C++ then I think
|
||||
it is probably safe to say this is one of the best books you could read. It is both
|
||||
recent (2009) and written by the creator of C++. </ul> <br/>
|
||||
</li>
|
||||
<li> <i>Effective C++: 55 Specific Ways to Improve Your Programs and Designs</i> (3rd Edition) by Scott Meyers
|
||||
<ul> This is a great intermediate level C++ book. Most people have heard the jokes about
|
||||
how easy it is to shoot yourself in the foot with C++. This book explains many things you
|
||||
need to know about the language to avoid doing so on a regular basis. So if you are
|
||||
writing C++ software then this is a MUST read. I would go as far as to claim that
|
||||
you are a danger to the C++ software you touch unless you know what is in this book.
|
||||
I'm not kidding. However, the book isn't just about the quirks of C++. It also discusses many general
|
||||
software engineering ideas which have wide applicability. So in this
|
||||
respect it is a great book for any software developer to read.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>More Effective C++: 35 New Ways to Improve Your Programs and Designs</i> by Scott Meyers
|
||||
<ul> Consider this an expansion to Effective C++. If you are going to read the above
|
||||
book then you would almost certainly benefit from reading this one as well.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>The C++ Standard Library: A Tutorial and Reference</i> by Nicolai M. Josuttis
|
||||
<ul> If you are going to buy a reference book on the C++ standard library then this
|
||||
is the one to get. I think you
|
||||
will find it is better than any of the available online references. So if you find
|
||||
yourself frustrated with the online resources, then this is the book for you.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <a href="http://stdcxx.apache.org/doc/stdlibref/index.html">Apache C++ Standard Library Reference</a>
|
||||
<ul> What I said aside, this is a good online reference. I often find myself referring to it
|
||||
when I do not have the Josuttis book on hand.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
<h3>Multithreading</h3>
|
||||
<ul>
|
||||
<li> <i>Programming with POSIX(R) Threads</i> by David R. Butenhof </li>
|
||||
<li> <i>Programming with POSIX Threads</i> by David R. Butenhof
|
||||
<ul> When I was an undergrad, this book was my main resource for learning about multithreading.
|
||||
It was enjoyable to read (as are all the books on this list I think) and covered everything
|
||||
in great depth without becoming overbearing. Also, despite what the title may suggest,
|
||||
this book is useful for understanding multithreading broadly, not just multithreading
|
||||
on POSIX systems.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>Network Programming</h3>
|
||||
<ul>
|
||||
<li> <i>Unix Network Programming, Volume 1: The Sockets Networking API</i> (3rd Edition)
|
||||
by W. Richard Stevens</li>
|
||||
by W. Richard Stevens
|
||||
<ul> A lot of people call this book the network programming Bible and
|
||||
this praise is well deserved. If you want a deep understanding of how computer networks
|
||||
function, including the Internet, then this is the book to read. As with
|
||||
the Butenhof book above, this is excellent even for people who do not
|
||||
intend to write software for Unix systems.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
<h3>WIN32 Programming</h3>
|
||||
<ul>
|
||||
<li> <i>Win32 Programming</i> by Brent E. Rector and Joseph M. Newcomer
|
||||
</li>
|
||||
<li>
|
||||
<i>Programming Windows</i> by Charles Petzold
|
||||
It has been a long time since I needed to refer to these two books. However,
|
||||
they contained information that I couldn't find elsewhere no matter
|
||||
how hard I looked. So I recommend them in case you need to create or understand
|
||||
some low level win32 code.
|
||||
<br/>
|
||||
<br/>
|
||||
<ul>
|
||||
<li> <i>Win32 Programming</i> by Brent E. Rector and Joseph M. Newcomer </li>
|
||||
<li> <i>Programming Windows</i> by Charles Petzold </li>
|
||||
<li> <a href="http://msdn.microsoft.com/en-us/library/default.aspx">MSDN Library</a>
|
||||
<ul> This is Microsoft's online reference documentation. It is very large and sometimes
|
||||
confusing. But at the end of the day you should be able to find the documentation
|
||||
for just about every function in the entire Windows API.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <a href="http://msdn.microsoft.com/en-us/library/default.aspx">MSDN Library</a> is great </li>
|
||||
</ul>
|
||||
</ul>
|
||||
|
||||
@ -53,26 +121,79 @@
|
||||
<h2>Computer Science: Algorithms and Data Structures</h2>
|
||||
<ul>
|
||||
<li> <i>Introduction to Algorithms</i> by Cormen, Leiserson, Rivest and Stein
|
||||
<ul> You should get this book if you are looking for a good discussion of the classic computer science
|
||||
algorithms and data structures (e.g. most of the components on the <a href="containers.html">containers</a>
|
||||
page).
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching</i>
|
||||
(3rd Edition) by Robert Sedgewick
|
||||
<ul> This is another good algorithms book. If you are going to get only one book on this
|
||||
subject then get the one above. However, when I was learning about these topics I
|
||||
used both these books and on many occasions I found it helpful to read the description
|
||||
of an algorithm or data structure in both. Where one description was a little vague or
|
||||
confusing the other generally filled in the gaps.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching</i> (3rd Edition) by Robert Sedgewick </li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
<h2>Lossless Data Compression</h2>
|
||||
<ul>
|
||||
<li> <i>Text Compression</i> by Bell, Cleary, and Witten </li>
|
||||
<li> <i>Text Compression</i> by Bell, Cleary, and Witten
|
||||
<ul> When I was studying data compression this was my most useful
|
||||
resource. So if you are looking to understand how lossless data compression
|
||||
algorithms work then this is the book you want. It is completely self-contained
|
||||
and an absolute joy to read. Note that contrary to one of the reviews on
|
||||
amazon.com, the book <i>Managing Gigabytes</i> is not the second edition of this book;
|
||||
if this topic interests you then be sure you get the 318 page
|
||||
book published in 1990.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>General Math</h2>
|
||||
|
||||
<ul>
|
||||
<li> <i>Calculus: Single and Multivariable</i> by Hughes-Hallett, Gleason, and McCallum </li>
|
||||
<li> <i>Linear Algebra Done Right</i> by Sheldon Jay Axler </li>
|
||||
<li> <i>Numerical Linear Algebra</i> by Trefethen and Bau </li>
|
||||
<li> <i>Introduction to Real Analysis</i> (third edition) by Bartle and Sherbert </li>
|
||||
<li> <i>Linear Algebra Done Right</i> by Sheldon Jay Axler
|
||||
<ul> If a matrix seems like an arbitrary grid of numbers or you find that
|
||||
you are confused by vectors, matrices, and the various things
|
||||
that get done with them then this book will change your whole view of this subject.
|
||||
It doesn't teach you any algorithms. Instead, it will give you a general
|
||||
framework in which to think about all this stuff. Once you have that down
|
||||
everything else will start to make a lot more sense. If all goes well
|
||||
you will even start to agree with the following: linear algebra is beautiful. :)
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Numerical Linear Algebra</i> by Trefethen and Bau
|
||||
<ul> While <i>Linear Algebra Done Right</i> is fairly abstract, this book by
|
||||
Trefethen and Bau will
|
||||
explain some of the actual algorithms that are often used.
|
||||
This is a great second book if you find that you want to know know more about
|
||||
the SVD, LU decomposition, or various other algorithms involving linear algebra.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Calculus: Single and Multivariable</i> by Hughes-Hallett, Gleason, and McCallum
|
||||
<ul>
|
||||
Some of the books below will require and understanding of basic calculus. So
|
||||
I'm recommending this book. It was the book I used as an undergrad and I
|
||||
remember it being alright. That isn't exactly a glowing review so if you
|
||||
are really considering buying a calculus book you may want to check out
|
||||
other reviews before picking this one.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Introduction to Real Analysis</i> (third edition) by Bartle and Sherbert
|
||||
<ul> At some level real analysis is like a really rigorous repeat of calculus.
|
||||
So if you already have an undergraduate education in calculus and
|
||||
you are reading things that seem reminiscent of calculus but involve
|
||||
stuff you haven't seen before (e.g. sup, inf, "sets of numbers")
|
||||
then you may be in need of a real analysis book. This one is quite good and should
|
||||
be accessible to someone with the usual undergraduate computer science math background.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
@ -80,36 +201,88 @@
|
||||
|
||||
|
||||
<h2>Optimization</h2>
|
||||
|
||||
The subject of linear algebra is fundamental to optimization. So you must be familiar
|
||||
with the contents of a book like <i>Linear Algebra Done Right</i> if you are going to study
|
||||
this area. You will also need to know how to find the derivative of a function and
|
||||
understand what a derivative is all about. So you will need to know a little bit of
|
||||
calculus. Finally, once in a while you will need to know a little bit about real
|
||||
analysis. Ultimately, what you need all depends on how deep you want to go.
|
||||
|
||||
<ul>
|
||||
<li> <i>Practical Methods of Optimization</i> (second edition) by R. Fletcher 1987 </li>
|
||||
<li> <i>Numerical Optimization</i> by Jorge Nocedal and Stephen Wright 2006 </li>
|
||||
<li> <i>Introduction to Derivative-Free Optimization</i> by Conn, Scheinberg, and Vicente </li>
|
||||
<li> <i>Practical Methods of Optimization</i> (second edition) by R. Fletcher 1987
|
||||
<ul> I love this book. When I got it I literally spent my weekends sitting around
|
||||
reading it for hours. It is a fascinating and well written introduction to
|
||||
the subject of optimization. I cannot recommend it highly enough.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Numerical Optimization</i> by Jorge Nocedal and Stephen Wright 2006
|
||||
<ul> This is a more recent text on optimization that is also very good. It
|
||||
covers many algorithms not covered by the above book.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Introduction to Derivative-Free Optimization</i> by Conn, Scheinberg, and Vicente
|
||||
<ul> If you want to understand algorithms like <a href="algorithms.html#find_min_bobyqa">BOBYQA</a>
|
||||
then this is a good recent book on the subject. Note that a book like <i>Practical Methods of Optimization</i>
|
||||
is almost certainly a prerequisite for reading this book. As an aside, BOBYQA is not discussed in this book but
|
||||
its predecessor, NEWUOA is.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>Machine Learning</h2>
|
||||
|
||||
<ul>
|
||||
<li> <i>Artificial Intelligence: A Modern Approach </i> (3rd Edition) by Stuart Russell and Peter Norvig</li>
|
||||
<li> <i>Learning with Kernels: Support Vector Machines, Regularization, Optimization, and Beyond </i> by Bernhard Schlkopf and Alexander J. Smola</li>
|
||||
<li> <i>Artificial Intelligence: A Modern Approach </i> (3rd Edition) by Stuart Russell and Peter Norvig
|
||||
<ul> This book is about the much broader field of AI but it contains an excellent introduction
|
||||
to machine learning and it also covers other useful topics like <a href="bayes.html">bayesian networks</a>.
|
||||
Moreover, it is very well written and self-contained. So you don't need any particular
|
||||
background to be able to learn from it.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Learning with Kernels: Support Vector Machines, Regularization, Optimization, and Beyond </i>
|
||||
by Bernhard Schlkopf and Alexander J. Smola
|
||||
<ul> Most of the machine learning tools in dlib are implementations of various kernel methods.
|
||||
So if you want a book that covers this topic in great depth as well as breadth then this is
|
||||
probably the book for you. The most important prerequisite for this book is linear
|
||||
algebra. Virtually everything in this book depends on linear algebra in a fundamental way.
|
||||
<p>
|
||||
The second important subject is optimization. Whenever you see the text
|
||||
mention the KKT conditions, duality, "primal variables", or quadratic programming it
|
||||
is talking about ideas from optimization. A good book which will explain all this to you
|
||||
is <i>Practical Methods of Optimization</i>. Note that this book calls the KKT conditions
|
||||
just the "KT" conditions. They are talking about the same thing. Also, duality
|
||||
is something that comes up a lot in optimization but in the context of machine learning
|
||||
usually people are talking about a particular form known as the Wolfe Dual.
|
||||
</p>
|
||||
It would also be good (but not critical) to be familiar with real analysis.
|
||||
</ul><br/>
|
||||
</li>
|
||||
<li> <i>Kernel Methods for Pattern Analysis </i> by John Shawe-Taylor and Nello Cristianini
|
||||
<ul> asdfsdf alskd flaksjd flaskdj flskaj flaskd flkjs flk sadfl asdflkj as
|
||||
df aslkdfj asldkfj asldkf lkds flkajs dflkja sdflkj asdlkjf alsdkj flsakjd fasdjl f
|
||||
aslkdfj alskdf alsdkjf lksjadklajsd fklsadj fljkas dfklja sdlfkj asdlkfj asdlkj sadlkjf </ul> <br/> </li>
|
||||
<ul> This is another good book about kernel methods. If you have to choose between
|
||||
this book and <i>Learning with Kernels</i> I would go with <i>Learning with Kernels</i>. However, it is
|
||||
good to have both since reading different presentations of difficult subjects
|
||||
usually makes learning them easier.
|
||||
</ul><br/>
|
||||
</li>
|
||||
|
||||
<li> The Journal of Machine Learning Research and NIPS </li>
|
||||
</ul>
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
<h2>Image Processing</h2>
|
||||
<ul>
|
||||
<li> <i>Digital Image Processing</i> by Rafael C. Gonzalez and Richard E. Woods </li>
|
||||
<li> <i>Digital Image Processing</i> by Rafael C. Gonzalez and Richard E. Woods
|
||||
<ul> This is a terrific introduction to digital image processing if you are looking
|
||||
for a place to start learning about this subject.
|
||||
By and large this book doesn't require any special prerequisites. Sometimes
|
||||
calculus shows up, but not too much.
|
||||
</ul><br/>
|
||||
</li>
|
||||
</ul>
|
||||
|
||||
|
||||
</body>
|
||||
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user