By Developers, For Developers

Historical errata for Programming Machine Learning

PDF PgPaper PgTypeDescriptionFixed onComments
17TYPO

2nd paragraph:

>Let’s say that our line is w = 2.1. Call predict(20, 2), and you get back the predicted number of pizzas: 42

Since previously predict was defined as X*w the parameters to its call should be
predict(20,2.1) to obtain 42

2019-03-21Fixed. Thank you, Roman.
158163ERROR

The find prime numbers program has a function called is_prime that does not work correctly. The output includes non-prime numbers. It works fine if you add 1 to the max_check_value variable so that the range will include the square root in the evaluation.

2019-03-23Well, that was embarrassing. :D I guess I grew too familiar with Ruby's inclusive ranges. Thanks a lot, Karen!
12TYPO

"The NumPy library has a convenient function to import whitespace-separated data from text:

02_first/plot.py
import numpy as np

I skipped the headers row, and I “unpacked” the two columns into separate arrays called X and Y. X contains the values of the input variable, and Y con-“

It seemed like there should be a longer code listing.

2019-03-22Indeed, I'd skipped a line. Thank you.
28TYPO

“Do the math, and you’ll find that the total number of tweaking combinations would be 3 to the power of the number of parameters. With two parameters, that would be 32—that is, 6 combinations.
Six calls per iteration don’t sound like a big deal”

Based on 3^2, I think that should be “…9 combinations. Nine calls per iteration…”

2019-03-23This one was staring right at me, and I still didn't notice it. Thank you, Glen.
18TYPO

Text reports that Roberto sold 32 pizzas, this matches the table of data, however, the chart points to y=31

2019-03-23Fixed!
10TYPO

The first line of getting used to ML reads:
As a developer, you’re used to learn at a rapid pace.
I think the following reads better:
As a developer, you’re used to learning at a rapid pace.

2019-03-22Correct! Thank you.
49TYPO

“Arrays are Numpy’s killer feature.”

Should be…NumPy’s

2019-03-22Well spotted!
21TYPO

You write “I asked for 1000 iterations” but in the code above it’s iterations=10000.

2019-03-23Whoops. Thank you, Volkmar.
12SUGGEST

In “The Plotting Code” box, it says “The code above uses two libraries: Matplotlib draws charts, and Seaborn makes them look pretty.” In practice, the code uses 3 libraries as it also uses NumPy, which makes the sentence confusing.

As NumPy is explained on the previous page, this sentence would be rephrased as “The code above uses two additional libraries beyond NumPy: Matplotlib draws charts, and Seaborn makes them look pretty.”

2019-03-25Accepted. :)
23TYPO

The following lines in the listing should have arrows in front of them to show that they changed:

return w, b
w, b = train(X, Y, iterations=10000, lr=0.01)
print(“\
w=.3f, b=.3f” % (w, b))

2019-03-26I'm impressed by how carefully you're looking through the code. Thank you, Bruno! Fixed.
29TYPO

First paragraph after the “Gradient Descent” title, second sentence reads: “In this section, we’re going to that.” The word “do” is missing, it should read: “In this section, we’re going to do that.”

2019-03-26Fixed.
80TYPO

In the top diagram that describes the process to decide if a digit is a 5 or not, the top arrow that points to the green tick is labelled “y < 0.5?” while the bottom arrow that points to the red cross is labelled “y > 0.5?”. Shouldn’t that be the opposite?

Also bearing in mind how rounding works, if the value is exactly 0.5, it will be rounded to 1 (green tick).

2019-03-27You're right on both counts. Fixed.
49TYPO

“Now that we took care of X, let’s look at Y”, that still has that one-dimensional (30,) shape."
I might be picky here but actually you are talking about y - which we imported above with np.loadtxt(…). So at this point we have y but no Y. Y is created in the next code part with Y = y.reshape(–1, 1)

But again - might be too picky here. It confused me at this point and I caught myself scanning over the page to see if I missed something because I wasn’t aware of a Y at this point.

2019-03-29Not too picky at all–that's definitely something worth fixing. It's fixed now.
xiSUGGEST

In the Math Deep Dives box, the last sentence says:
“only if you wish to really wrap your mind about the mathematics of machine learning.”

I think it makes more sense to say “wrap your mind around”. Not 100% sure though as I’m not a native English speaker, it just sounds better.

2019-03-30You're correct, Elton! Fixed.
10TYPO

In the “Getting used to ML” box, in the penultimate sentence:

“I ran a ML” needs to be “I ran an ML”

I like the writing style so far by the way :)

2019-03-31Replaced with "a machine learning program".
11SUGGEST

Just before “Pizza and Correlation”:

“laying the foundations to our ML knowledge”. I think it needs to be “laying the foundations of our ML knowledge”.

2019-03-31
17TYPO

Page 17, second paragraph:
Let’s say that our line is w = 2.1. Call predict(20, 2)…
It needs to say: Call predict(20, 2.1)

2019-03-31
21ERROR

Python’s main box:

“with the instruction import linear-regression”

This would be a syntax error (if the file was named linear-regression.py, we would have to import it with import(‘linear-regression’) )

2019-03-31Actually, you can use either the 'import' keyword or the '__import__' method, so there is no syntax error AFAIK. However, you're right that 'import linear-regression' would be wrong, because the file is named 'linear_regression', with an underscore. So I guess this counts as a erratum and a fix. :D \n \n(Also, the same paragraph contained another instance of the name of the file being wrong, and I fixed that one as well).
24TYPO

First sentence inside the “Hyperparameters?” box:

“a set of values can we can use” needs to be “a set of values we can use”

2019-03-31
25TYPO

Bottom of the page, first sentence of the last paragraph:

“Phew! That was an lot of knowledge”
“an” needs to be “a”

2019-03-31
49TYPO

In the figure where there’s the green rectangle surrounding the data X includes, the Tourists column is left out of the rectangle.

2019-03-31Fixed.
xiTYPO

Throughout the book, you refer to Khan Academy as Kahn Academy. The first one is in the Math Deep Dives box in page xi, but this also occurs in other Math Deep Dive boxes.

2019-03-31Fixed. This one was a biggie, and surprising–I think it was correct in the beginning, and then we changed it for whatever (wrong) reason. Thanks a lot! I greatly appreciate all the fixes you're sending in.
48TYPO

Under the “Upgrading the Learner” section, first sentence:

“we can come back to work at hand”, I think it needs to be “we can come back to the work at hand”.

Btw I know this is a beta release, so please let me know if you’re not looking for typos/grammatical errors at this stage.

2019-03-31Elton, some of those errors might leak through all the proofreadings and into the final release–so every fix helps, even though we're in early beta. Thank you a lot for going through the trouble of reporting them. I hope you're enjoying the book!
57SUGGEST

In the “Hands-On: Field Statistician” section, it says there’s a README file inside the data/life-expectancy directory, but it seems to be missing from the source code I downloaded.

2019-03-31I think you just spotted a problem in the build system. As a workaround, I renamed the file "readme.txt". I'll talk with my editor about the problem.
62SUGGEST

Right after the graph which introduces the sigmoid, there’s this:

“people usually just call it simply the “sigmoid”"

I think it would sound better if either “simply” or “just” was dropped from that sentence.

2019-03-31Fixed.
63TYPO

Penultimate paragraph, last word of the second sentence:

“synonims” should be “synonyms”

2019-03-31My italian-raised brain... Fixed.
95TYPO

Second to last paragraph, first sentence:

“Granted, most real-life dataset aren’t” —> datasets (missing s at the end)

Thoroughly enjoying the book btw

2019-03-31Fixed–and thank you, good to hear! :)
96TYPO

A Tale of Perceptrons, 3rd paragraph, last sentence:

In fact, John McCarthy invented one of the first high-level programming languages, LISP, in its quest to code intelligence.
I think “its” should be “his”, instead. Unless I’m missing something.

2019-03-31Fixed.
49TYPO

The picture showing the meaning of X is labeled “pizza.txt”. I think it should be “more_pizza.txt”

2019-04-03Yup, you're right. I changed the name of that file, and forgot to change it in the picture. Fixed.
50TYPO

The picture showing the meaning of Y is labeled “pizza.txt”. I think it should be “more_pizza.txt”

2019-04-03Same problem in all three pictures. Fixed everywhere. Thank you!
34SUGGEST

I found this sentence confusing: “This derivative is similar to dL/dw, but it’s multiplied by x.”

The derivative for dL/db is not multiplied by x. Did you miss the “not” in the sentence? The way I parse your sentence, “it’s” refers to the dL/db equation.

2019-04-20You're right, it should have been "not multiplied". However, I came to the conclusion that the whole sentence was unnecessary. I removed it.
38TYPO

“the mean absolute value doesn’t jive well with GD”

Should be “jibe” not “jive”?

2019-04-20It was actually "jive". It's a US English word that I tend to use a lot. After you posted this erratum, however, I looked it up and realized that it's probably too rare to use, and also it might have a slightly negative overtone. (I'm not a native speaker, so I miss certain nuances of English). So I ended up changing it to "jibe with". :)
6TYPO

There’s a stray apostrophe-s in “the earning of a lemonade stand’s from the weather”.

2019-04-16Fixed. Thanks!
8TYPO

“An unsupervised learning algorithms could” — algorithm shouldn’t be plural here.

(Loving the style of the book so far, by the way!)

2019-04-16Fixed. (And thank you!) :)
69TYPO

“before ML systems could
tackle more comples datasets”

“comples” should be “complex”

2019-04-16Fixed. Thank you, Dave.
209ERROR

On a Mac (latest Mojave) running the pip installation command of the ‘matplotlib==2.0.2’ gave me errors. I repeated it without specifying the version it it worked fine (at least the installation). It installed ‘matplotlib-3.0.3’. Not a Python expert and whether I treated the problem correctly, but I though to report it in case it helps.

2019-04-22That's strange, because Matplotlib 2.0.2 seems to be still available. However, I took the chance to update the supported versions of Matplotlib and Seaborn. Thank you for the heads up!
9ERROR

In the section on Setting Up Your System, you state that you need any version of Python 3, but your example to determine if python is installed calls out ‘python —version’. On a Mac, at least, having installed Python 3, one needs to type ‘python3 —version’ at the command line, not ‘python’. The install instructions for Jupyter Notebook also differentiates the commands for Python 3 as ‘python3’ instead of simply ‘python’, so I think you need to correct this example command line command in the book. For someone pretty new to Python on a Mac, this threw me off for a solid day, as Python 2 comes pre-installed on the Mac and after installing Python 3 and trying the ‘python —version’ command, it kept telling me the version was 2.7.10, and I was digging around trying to figure out how to change the PATH config, etc. when that wasn’t necessary.

2019-04-23Ouch. \n \nI think that the situation with Python executables is a mess at the moment. On some setups and OSs, "python" is aliased to Python 2, and you have to use "python3" to execute Python 3, as in your case. In other cases, "python" is aliased to the latest version of Python. For example, I also own a Mac, and in my Conda and Homebrew-based installation I type "python" for Python 3. I hadn't realized that the out-of-the-box Python on Mac was still version 2. \n \nThis is a regrettable situation, and I hadn't realized how much pain it could cause. I'm sorry that you got caught by it. I'll explicitly reference python3 in the text. Thanks a lot for the heads up, Drew.
38ERROR

The pip install commands (at least on Windows) should be typed without the quotes.
Also, pip install matplotlib2.0.2 fails with missing dependencies. pip install seaborn0.8.1 installs another version of matlibplot (3.0.3) so I guess the 2.0.2 version probably isn’t needed anyway.

pip error log:

(test_env) D:\\dev\\python\\test_env\\Scripts>pip install matplotlib2.0.2 Collecting matplotlib2.0.2
Downloading ————————-/packages/f5/f0/9da3ef24ea7eb0ccd12430a261b66eca36b924aeef06e17147f9f9d7d310/matplotlib-2.0.2.tar.gz (53.9MB)
|████████████████████████████████| 53.9MB 344kB/s
ERROR: Complete output from command python setup.py egg_info:
ERROR:
Edit setup.cfg to change the build options

BUILDING MATPLOTLIB
matplotlib: yes [2.0.2]
python: yes [3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019,
21:26:53) [MSC v.1916 32 bit (Intel)]]
platform: yes [win32]

REQUIRED DEPENDENCIES AND EXTENSIONS
numpy: yes [version 1.15.2]
six: yes [six was not found.pip will attempt to install
it after matplotlib.]
dateutil: yes [dateutil was not found. It is required for date
axis support. pip/easy_install may attempt to
install it after matplotlib.]
functools32: yes [Not required]
subprocess32: yes [Not required]
pytz: yes [pytz was not found. pip will attempt to install
it after matplotlib.]
cycler: yes [cycler was not found. pip will attempt to
install it after matplotlib.]
tornado: yes [tornado was not found. It is required for the
WebAgg backend. pip/easy_install may attempt to
install it after matplotlib.]
pyparsing: yes [pyparsing was not found. It is required for
mathtext support. pip/easy_install may attempt to
install it after matplotlib.]
libagg: yes [pkg-config information for ‘libagg’ could not
be found. Using local copy.]
freetype: no [The C/C header for freetype (ft2build.h)
could not be found. You may need to install the
development package.]
png: no [The C/C header for png (png.h) could not be
found. You may need to install the development
package.]
qhull: yes [pkg-config information for ‘qhull’ could not be
found. Using local copy.]

OPTIONAL SUBPACKAGES
sample_data: yes [installing]
toolkits: yes [installing]
tests: no [skipping due to configuration]
toolkits_tests: no [skipping due to configuration]

OPTIONAL BACKEND EXTENSIONS
macosx: no [Mac OS-X only]
qt5agg: no [PyQt5 not found]
qt4agg: no [PySide not found; PyQt4 not found]
gtk3agg: no [Requires pygobject to be installed.]
gtk3cairo: no [Requires cairocffi or pycairo to be installed.]
gtkagg: no [Requires pygtk]
tkagg: yes [installing; run-time loading from Python Tcl /
Tk]
wxagg: no [requires wxPython]
gtk: no [Requires pygtk]
agg: yes [installing]
cairo: no [cairocffi or pycairo not found]
windowing: yes [installing]

OPTIONAL LATEX DEPENDENCIES
dvipng: no
ghostscript: no
latex: no
pdftops: no

OPTIONAL PACKAGE DATA
dlls: no [skipping due to configuration]


* The following required packages can not be built:
* freetype, png
————————————————————
ERROR: Command “python setup.py egg_info” failed with error code 1 in C:\\Users\\jwenting\\AppData\\Local\\Temp\\pip-install-13hr5v4y\\matplotlib\\

2019-04-27Thank you for the heads up! On Unix-like systems, it works either with our without quotes. I removed the quotes. \n \nAs for matplotlib 2.0.2, I have no idea why it was yanked. I updated the version to 3.0.3. I left it as a separate installation, rather than rely on seaborn's dependency, because it's an important library, and I want to make it explicit to readers.
461 SUGGEST

In the last sentence I would suggest clarifying you want to select 10 of the remaining set of 20 to use in testing… if you say assigning 40 to homework and remaining 10 to test that gives you a total of 50 but your example has a total of 60 quizzes…

“To recap, you want to split the quizzes in two groups: “homework” and “test”. Here are two potions: either you assign all 60 quizzes to “homework”, and then re-use 10 of them in “test”; or you split the quizzes, assigning 40 of them to “homework”, and the remaining 10 to “test”. Which option would you pick?

Excerpt From
Programming Machine Learning (for David Pinto)
Paolo Perrotta
This material may be protected by copyright.

2019-05-21Thank you, David. The last "40" was actually meant to be "50". It's fixed now.
183TYPO

Hello,

I’m just writing in to say that I’ve very much enjoying “Programming Machine Learning (eBook)”, however I noticed a small typo on page 183 of version B5.0.

I believe the first and second diagrams on this page should be swapped as the second diagram is the one with a smaller lr value than the first.

I can provide a screenshot (can’t attach them here) if needed.

2019-06-26Thank you for this comment, Conlan. That order was indeed confusing–and in fact I got the order wrong in the text. I'll swap the diagrams as you suggested.
19OK

2. Prediction phase: use the line to predict the label from the input variable.

I do not think your meant “label”.

2019-07-14
19OK

I need to apologize and withdraw my comment re “label”. I skipped some of the text and I did not realize that “label” is used for what I term the “response” variable. Sorry.

2019-07-14Ahah, no problem, George! Thank you anyway for reporting an erratum, even if it ended up not being a problem.
16TYPO

The formatting of these two lines

import numpy as np
X, Y = np.loadtxt(“pizza.txt”, skiprows=1, unpack=True)

is different. The second line looks like code, so that is the line I typed into python - and it didn’t work because it didn’t know what np was. After googling and finding “import numpy as np” as the way to solve the problem, when I looked back in the book, I see that you already had that - but since it was purple (and didn’t look like code) I had just skipped right over it at first.

2019-10-13Thank you, Charles. As an author, I cannot change the way that the code is formatted, but I added a sentence to clarify that these are two separate lines of code, and briefly explain what they do. On a side note, if you're completely new to Python, then maybe read the Python appendix first, to get to grips with the basics of the language. Let me know if you have trouble with Python stuff later on.
140ERROR

The formula for the derivative of L w.r.t. w1 is missing. Instead there is another formula from page 136. Copy-paste?

2019-11-15 Fixed. Yup, I'd made a mistake in the formula files. Thank you!
69TYPO

Last sentence of escape from flatland — “Forunately for us…”

2019-12-03Got it! Thanks.
99TYPO

Last section titled Chapter 4 “Hands-on: Field statistician” typo for instructions — …”find a readme.txt with istructions.”

2019-12-03...and done.
EpubTYPO

My page numbers are off since I have ePub but chapter 4 under the section “Upgrading the loss,” the double quotes in the 5th or so paragraph around ‘…applies the “square” operation’ aren’t the right format as the other double-quoted words/phrases.

2019-12-03Fixed! Bradley, if you read this–can you give me your full name? You know, for the acknowledgements page. Feel free to open an erratum for this if you wish. I know that's abusing the errata page, but whatever works. ;)
128SUGGEST

In chapter 7 “One hot encoder” in the sentece : " In the example above, the first label is a 3, so the fourth cell in the second row ….. " the row isn’t the second but the first one.

2019-12-03Fixed! Thanks, Leonardo. If you wish, give me your full name for the Acknowledgements page. Feel free to open another fake erratum just for that.
???TYPO

There is a programmatic reference in Chapter 6, the section “Leap of Faith”, first sentence of the last paragraph.

2019-12-08Fixed. Thank you.
128SUGGEST

Ok Paolo my name is Leonardo Carotti and thank you for your job.

2019-12-08Thank you for sending errata, Leonardo!
11SUGGEST

When you enumerate the commands for installing the required libraries, you use “pip install”, although earlier you specify that we must install Python 3. I suggest replacing them with “pip3 install”. One important reason would be that “pip install matplotlib==3.0.3” fails because it seems that the Python2 version end to 2…

Thank you!

2019-12-17Thank you, Ionut! This was very much worth fixing.
113TYPO

“Each perceptron has its own weights and it own sigmoid operation,”
Missing ‘s’ in “it own sigmoid”. Should be “its own sigmoid”.

2020-01-06Fixed! Thank you.
187ERROR

On page 187 of Chapter 11 in Applying backprogeration" formula seems wrong. This paragraph is referred to the calculation of the gradient compared to w1 so I thought the formula started with dL/dw1 while it starts with dL/dw2.

2020-01-12Fixed and replaced with the right formula. Thank you, Leonardo.
268OK

At page 268 in ….“Check out the 15_development/solution directory…”. …. the word solution was written as if you are reporting a solution folder in your code but actually there ins’t. It would be better to put a space in order to detach the word solution from 15_development/

2020-01-18Leonardo, the "solution" directory is actually there, at least in the latest version of the source code. Maybe you're using an outdated version? Check out the book's page (https://pragprog.com/book/pplearn) for the latest code.
268OK

You are right. I have the 2019/09/25 old version code. Now I update it.
Thank you, Paolo

2020-01-27You're welcome :)
248SUGGEST

On Page 248, we are talking about …… the answer in the 14_testing/solution folder….. , but this folder is empty.

2020-01-27Thank you very much for this! Your report lead me to find a problem in the book's build system: it strips out all the README files, making many exercise solutions hard to understand. In this specific case, the directory only contained a README file, so it got stripped out entirely. We'll fix this before the final release. \nCan you please open another erratum to give me your name? You definitely deserve to be named on the Acknowledgements page.
141TYPO

In Chapter 11, at page 141 in pdf version, the sentence …..The next-to-last line calculates (y^- y)*W2*σ ….. have a typography error because the sigmoid is written without accent.

2020-01-31Eagle-eyed. Thank you! Fixed.
70TYPO

At page 58 in pdf the sentence… meaning that they have one row for examples, and one column.. is correct, but at page 70 in pdf, the sentence…. one row for examples, and one column for weight… is not because it would otherwise mean that y_at has a dimension (30,4) but is actually (30,1)

2020-02-02Correct! For some reason, nobody had noticed this one. If this is your first erratum, could you please send me your name at paolo.perrotta at Gmail? I'd like to add you to the acknowledgments page.
codeSUGGEST

The code plot_linearly_separable inside 08_perceptron file should be completed with plt.pause(1) inside def plot after plt.show instruction . Because not work properly when you Run I mean you don’t manage see plots. ……With debugger mode it’s all ok.

2020-02-07I added pauses outside that function call, but you're right that this doesn't work if you call the function from your own code. I moved the pauses inside the function instead. Thanks. \nBy the way, feel free to open another erratum and use it to give me your name if you want to get included in the Acknowledgements page (unless you already opened other errata in the past with your name, in which case I already should have it).
0000OK

Running this code ………code/13_batching/solution/compare_stochastic_gd_learning_rate.py ………give this error …….. code\\13_batching\\solution\
eural_network.py:7: RuntimeWarning: overflow encountered in exp
return 1 / (1 + np.exp(-z))

2020-02-23That's expected. ;) This case is covered by the "Numerical Stability" box, in chapter "Building the Network".
17SUGGEST

The plot in page 17 (pizzas vs reservations) does not use the data from the previous (page 16) pizza.txt.
Instead of a 4 point plot, unexpectedly a plot is created where there’s a set of 28 points the reader does not know where it came from.
I guess the real pizza.txt used for the plot should be used in page 16 as the initial example.

2020-03-26Hey, Juanjo. Those shown are just the first few lines of the data file–not all of it. The text says so, but it's easy to miss–so I changed it to be a bit more explicit and avoid any confusion. Thank you!
258ERROR

Q: at location 5703 of the book in the chapter on convolutions you say:
“By the same rules, the output of the second layer is a (29, 29, 32) tensor.”

Shouldn’t this be (28, 28, 32) if it is the previous layer width / height (i.e. 30) - 3 + 1?
Also, this needs updating in other places as well: When it reaches the Flatten layer, we calculated that each example has become a (29, 29, 32) tensor. After the flattening, it becomes a row of 29 * 29 * 32 = 26912 bytes.

1OK

I have sent the mobi version to my amazon kindle account. I can see the book on my kindle oasis but it does not appear in the library of my kindle on my mac or the online version of the kindle reader.

I have noticed that somehow kindle books can be marked as “compatible”(?) with only certain sorts of readers. I wonder if there is something set or missing so I can’t download from the library to my mac. :-(

BTW the book does show in my digital content. If I try sending it to a device, the only devices that show are android based.

2020-04-03Paul, I got a reply from my publisher: "we don't support the kindle app on iOS devices. So, he won't be able to read the mobi version on his mac, unfortunately". \nI'm sorry about that. I wasn't aware of this complication with Kindle platforms, and I find it surprising and annoying. It's an inconvenience to me personally as well, because I also use the Kindle reader on my Mac. :( \nI'll have to mark it as "Not a problem" (even if I do think it's a problem) because it's not something I can fix as an author. \n
24ERROR

For the code in 02_first/linear_regression.py, within method train, the “elif” statement will never be executed.

Xiang, I'll check that code–but if you mean that it never gets executed *in this specific example*, then yes, that might happen. If you change the dataset and/or the initial values of w and b, however, the line might move in either direction. So the algorithm needs that "elif", even though this specific example might not. \nHowever, it is possible that I'm missing something in your comment–so I'll double-check this code.
233TYPO

Chapter 18, Section “Dead Neurons Revisited”, last two paragraphs in section

“That’s a though call, especially when …”:
Should that be “tough”?

“Those issues have been known since people became using sigmoids in neural networks”:
Should that be “began”?

Whoops! Thank you, Randy.
65SUGGEST

“Maybe there was one day when the pizzeria had a very high number of reservations—but because of a police strike [in Berlin, Germany], no police arrived on the scene.”

As German police officers have “Beamtenstatus” they are legally not allowed to strike. See for example the english Wikpedia entry on “Beamter” (no links allowed).

So to keep consistent with the high quality of this book I would suggest to change this example to a more realistic scenario.
Like a “major police operation at Alexanderplatz” or something like that.

Brilliant! I'll change that sentence in the next printing. I love Berlin, and Berlin-related references.
296TYPO

Under Convex:
“… as opposed to multiple ones (like the sinus function).”

Give us a sign; give sine an us; I think that should the “sine function”

Ouch! Thank you. I'm really grateful that you identified these typos.
301TYPO

Under Linear regression:
“A tecnique that …”
Should be “technique”

Duly noted. Will fix.
307-8TYPO

Under Statistical Noise:
“… every time you weight yourself … Other differences might be due to irrelevant factors: you weighted yourself…”

Should be weigh/weighed

Noted, and will fix. Thank you!
200SUGGEST

I realize that correctly describing library installations which are always changing is a bit like chasing your tail (which, I suppose, is even harder if you do not have one), so I am not sure what you do with this, but here goes:

The book states:
“When you install Keras, you also get TensorFlow—so you can start building neural networks straight away.”.

When I installed keras via pip, I did not get tensorflow and I had to install tensorflow separately to get the keras code to run. In the end, it might be easier to change the library imports from keras.* to tensorflow.keras.* and have people install tensorflow rather than keras.

At least with tensorflow 2.2.0rc3 on MacOS 10.15.3, while my programs always completed, they always ended up with a SIGSEGV. I think that may be due to tensorflow leaving some daemon threads around that misbehave when the main thread ends (but I did not spend too much time investigating). If other people are seeing this, it may be worth mentioning on the progml.com site at some point. (Thanks for the articles that are there already, by the way!)

Randy, libraries are such a moving target that anything I write in the book is due to be obsolete soon. I don't want to update the book every other week, so I'm looking for ways to make this explanation more generic. I'll probably clarify that the automated installation of TF happens in my case, and your mileage may vary–and point the reader to fresh resources on the Internet. \nAs for OS-specific TF/Keras bugs, errors and warnings: those come and go faster than I could even report them. I try my best to steer clear of those specifics in the book. \nAnd about the ProgML.com articles: you're welcome!
124TYPO

“softmax() exasperated the logits’ differences” should be “softmax() exaggerated the logits’ differences”?

I'm a native Italian speaker, so this was a case of mistranslation. The word I was meaning to use was "exacerbate", or "exaggerate", like you suggested. Thank you! (Please feel free to add your name to this erratum, or open another one just to give me your name. I'll add it to the acknowledgements page).
1SUGGEST

Concerning “readme.txt” files in the source code attached to the book:
I think it would be better if these files had words wrapped after X characters. It’s hard to read those long lines, I have to wrap them myself.

Good idea, Michal. I'll fix this in the next printing.
17TYPO

I think there is a syntax error in expression “Y[0:5])” - shouldn’t it be “Y[0:5]”?

It should! Will fix.

Categories: