By Developers, For Developers
PDF Pg | Paper Pg | Type | Description | Fixed on | Comments |
---|---|---|---|---|---|
17 | TYPO | 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 | 2019-03-21 | Fixed. Thank you, Roman. | |
158 | 163 | ERROR | 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-23 | Well, that was embarrassing. :D I guess I grew too familiar with Ruby's inclusive ranges. Thanks a lot, Karen! |
12 | TYPO | "The NumPy library has a convenient function to import whitespace-separated data from text: 02_first/plot.py 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-22 | Indeed, I'd skipped a line. Thank you. | |
28 | TYPO | “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. Based on 3^2, I think that should be “…9 combinations. Nine calls per iteration…” | 2019-03-23 | This one was staring right at me, and I still didn't notice it. Thank you, Glen. | |
18 | TYPO | Text reports that Roberto sold 32 pizzas, this matches the table of data, however, the chart points to y=31 | 2019-03-23 | Fixed! | |
10 | TYPO | The first line of getting used to ML reads: | 2019-03-22 | Correct! Thank you. | |
49 | TYPO | “Arrays are Numpy’s killer feature.” Should be…NumPy’s | 2019-03-22 | Well spotted! | |
21 | TYPO | You write “I asked for 1000 iterations” but in the code above it’s iterations=10000. | 2019-03-23 | Whoops. Thank you, Volkmar. | |
12 | SUGGEST | 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-25 | Accepted. :) | |
23 | TYPO | The following lines in the listing should have arrows in front of them to show that they changed: return w, b | 2019-03-26 | I'm impressed by how carefully you're looking through the code. Thank you, Bruno! Fixed. | |
29 | TYPO | 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-26 | Fixed. | |
80 | TYPO | 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-27 | You're right on both counts. Fixed. | |
49 | TYPO | “Now that we took care of X, let’s look at Y”, that still has that one-dimensional (30,) shape." 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-29 | Not too picky at all–that's definitely something worth fixing. It's fixed now. | |
xi | SUGGEST | In the Math Deep Dives box, the last sentence says: 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-30 | You're correct, Elton! Fixed. | |
10 | TYPO | 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-31 | Replaced with "a machine learning program". | |
11 | SUGGEST | 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 | ||
17 | TYPO | Page 17, second paragraph: | 2019-03-31 | ||
21 | ERROR | 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-31 | Actually, 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). | |
24 | TYPO | 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 | ||
25 | TYPO | Bottom of the page, first sentence of the last paragraph: “Phew! That was an lot of knowledge” | 2019-03-31 | ||
49 | TYPO | 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-31 | Fixed. | |
xi | TYPO | 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-31 | Fixed. 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. | |
48 | TYPO | 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-31 | Elton, 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! | |
57 | SUGGEST | 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-31 | I 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. | |
62 | SUGGEST | 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-31 | Fixed. | |
63 | TYPO | Penultimate paragraph, last word of the second sentence: “synonims” should be “synonyms” | 2019-03-31 | My italian-raised brain... Fixed. | |
95 | TYPO | 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-31 | Fixed–and thank you, good to hear! :) | |
96 | TYPO | 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. | 2019-03-31 | Fixed. | |
49 | TYPO | The picture showing the meaning of X is labeled “pizza.txt”. I think it should be “more_pizza.txt” | 2019-04-03 | Yup, you're right. I changed the name of that file, and forgot to change it in the picture. Fixed. | |
50 | TYPO | The picture showing the meaning of Y is labeled “pizza.txt”. I think it should be “more_pizza.txt” | 2019-04-03 | Same problem in all three pictures. Fixed everywhere. Thank you! | |
34 | SUGGEST | 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-20 | You're right, it should have been "not multiplied". However, I came to the conclusion that the whole sentence was unnecessary. I removed it. | |
38 | TYPO | “the mean absolute value doesn’t jive well with GD” Should be “jibe” not “jive”? | 2019-04-20 | It 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". :) | |
6 | TYPO | There’s a stray apostrophe-s in “the earning of a lemonade stand’s from the weather”. | 2019-04-16 | Fixed. Thanks! | |
8 | TYPO | “An unsupervised learning algorithms could” — algorithm shouldn’t be plural here. (Loving the style of the book so far, by the way!) | 2019-04-16 | Fixed. (And thank you!) :) | |
69 | TYPO | “before ML systems could “comples” should be “complex” | 2019-04-16 | Fixed. Thank you, Dave. | |
20 | 9 | ERROR | 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-22 | That'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! |
9 | ERROR | 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-23 | Ouch. \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. | |
38 | ERROR | The pip install commands (at least on Windows) should be typed without the quotes. pip error log: (test_env) D:\\dev\\python\\test_env\\Scripts>pip install matplotlib2.0.2
Collecting matplotlib2.0.2 BUILDING MATPLOTLIB REQUIRED DEPENDENCIES AND EXTENSIONS OPTIONAL SUBPACKAGES OPTIONAL BACKEND EXTENSIONS OPTIONAL LATEX DEPENDENCIES OPTIONAL PACKAGE DATA
| 2019-04-27 | Thank 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 | 2019-05-21 | Thank you, David. The last "40" was actually meant to be "50". It's fixed now. | |
183 | TYPO | 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-26 | Thank 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. | |
19 | OK | 2. Prediction phase: use the line to predict the label from the input variable. I do not think your meant “label”. | 2019-07-14 | ||
19 | OK | 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-14 | Ahah, no problem, George! Thank you anyway for reporting an erratum, even if it ended up not being a problem. | |
16 | TYPO | The formatting of these two lines import numpy as np 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-13 | Thank 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. | |
140 | ERROR | 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! | |
69 | TYPO | Last sentence of escape from flatland — “Forunately for us…” | 2019-12-03 | Got it! Thanks. | |
99 | TYPO | Last section titled Chapter 4 “Hands-on: Field statistician” typo for instructions — …”find a readme.txt with istructions.” | 2019-12-03 | ...and done. | |
Epub | TYPO | 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-03 | Fixed! 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. ;) | |
128 | SUGGEST | 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-03 | Fixed! 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-08 | Fixed. Thank you. | |
128 | SUGGEST | Ok Paolo my name is Leonardo Carotti and thank you for your job. | 2019-12-08 | Thank you for sending errata, Leonardo! | |
11 | SUGGEST | 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-17 | Thank you, Ionut! This was very much worth fixing. | |
113 | TYPO | “Each perceptron has its own weights and it own sigmoid operation,” | 2020-01-06 | Fixed! Thank you. | |
187 | ERROR | 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-12 | Fixed and replaced with the right formula. Thank you, Leonardo. | |
268 | OK | 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-18 | Leonardo, 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. | |
268 | OK | You are right. I have the 2019/09/25 old version code. Now I update it. | 2020-01-27 | You're welcome :) | |
248 | SUGGEST | On Page 248, we are talking about …… the answer in the 14_testing/solution folder….. , but this folder is empty. | 2020-01-27 | Thank 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. | |
141 | TYPO | 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-31 | Eagle-eyed. Thank you! Fixed. | |
70 | TYPO | 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-02 | Correct! 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. | |
code | SUGGEST | 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-07 | I 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). | |
0000 | OK | Running this code ………code/13_batching/solution/compare_stochastic_gd_learning_rate.py ………give this error …….. code\\13_batching\\solution\ | 2020-02-23 | That's expected. ;) This case is covered by the "Numerical Stability" box, in chapter "Building the Network". | |
17 | SUGGEST | The plot in page 17 (pizzas vs reservations) does not use the data from the previous (page 16) pizza.txt. | 2020-03-26 | Hey, 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! | |
258 | ERROR | Q: at location 5703 of the book in the chapter on convolutions you say: Shouldn’t this be (28, 28, 32) if it is the previous layer width / height (i.e. 30) - 3 + 1? | |||
1 | OK | 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-03 | Paul, 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 | |
24 | ERROR | 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. | ||
233 | TYPO | Chapter 18, Section “Dead Neurons Revisited”, last two paragraphs in section “That’s a though call, especially when …”: “Those issues have been known since people became using sigmoids in neural networks”: | Whoops! Thank you, Randy. | ||
65 | SUGGEST | “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. | Brilliant! I'll change that sentence in the next printing. I love Berlin, and Berlin-related references. | ||
296 | TYPO | Under Convex: 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. | ||
301 | TYPO | Under Linear regression: | Duly noted. Will fix. | ||
307-8 | TYPO | Under Statistical Noise: Should be weigh/weighed | Noted, and will fix. Thank you! | ||
200 | SUGGEST | 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 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! | ||
124 | TYPO | “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). | ||
1 | SUGGEST | Concerning “readme.txt” files in the source code attached to the book: | Good idea, Michal. I'll fix this in the next printing. | ||
17 | TYPO | I think there is a syntax error in expression “Y[0:5])” - shouldn’t it be “Y[0:5]”? | It should! Will fix. |