Comments (6)
Agree, the inner for loop should be only for calculating accuracy, not for updating weights. This way is definitely not faster.
This is my version: https://github.com/mikulatomas/grokking-deep-learning/blob/master/mnist/mnist_batch_dropout_multi_layer_network.ipynb
from grokking-deep-learning.
Yes, the for loop is only for calculating accuracy. Check out chapter 9 last code example. I think its implemented well there.
from grokking-deep-learning.
Agree. When move those 5 lines out of inner loop, it runs faster than the previous version.
Before batch:
alpha=0.005
I:349 Train-Error:0.1502 Train-Correct:0.982 Test-error:0.296 Test-Acc:0.8721 Time: 209.26
after batch:
alpha=0.1
I:349 Train-Error:0.2124 Train-Correct:0.953 Test-error:0.285 Test-Acc:0.8777 Time: 46.89
alpha=0.5
I:349 Train-Error:0.1837 Train-Correct:0.962 Test-error:0.301 Test-Acc:0.8675 Time: 46.24
from grokking-deep-learning.
Hello
With reference to this code snippet, why do they divide by batch size on the following line?
layer_2_delta = (labels[batch_start:batch_end]-layer_2) /batch_size
I do not really see the need for that division. Might anyone explain why this division takes place at this point?
for k in range(batch_size):
correct_cnt += int(np.argmax(layer_2[k:k+1]) ==
np.argmax(labels[batch_start+k:batch_start+k+1]))
layer_2_delta = (labels[batch_start:batch_end]-layer_2) /batch_size
layer_1_delta = layer_2_delta.dot(weights_1_2.T)* relu2deriv(layer_1)
layer_1_delta *= dropout_mask
weights_1_2 += alpha * layer_1.T.dot(layer_2_delta)
weights_0_1 += alpha * layer_0.T.dot(layer_1_delta)
from grokking-deep-learning.
Hello
With reference to this code snippet, why do they divide by batch size on the following line?
layer_2_delta = (labels[batch_start:batch_end]-layer_2) /batch_size
I do not really see the need for that division. Might anyone explain why this division takes place at this point?for k in range(batch_size): correct_cnt += int(np.argmax(layer_2[k:k+1]) == np.argmax(labels[batch_start+k:batch_start+k+1])) layer_2_delta = (labels[batch_start:batch_end]-layer_2) /batch_size layer_1_delta = layer_2_delta.dot(weights_1_2.T)* relu2deriv(layer_1) layer_1_delta *= dropout_mask weights_1_2 += alpha * layer_1.T.dot(layer_2_delta) weights_0_1 += alpha * layer_0.T.dot(layer_1_delta)
Hello, maybe they divide by batch size because the lines which compute deltas and weights updates are within inner loop? As was mentioned above these 5 lines must be outside of inner loop.
from grokking-deep-learning.
Yes, the for loop is only for calculating accuracy. Check out chapter 9 last code example. I think its implemented well there.
Thanks a lot.
from grokking-deep-learning.
Related Issues (20)
- chapter 10, is the `for row_start in range(layer_0.shape[1]-kernel_rows)` correct? HOT 1
- NameError in Chapter 4 notebook
- Chapter 13 - I have a problem trying to implement the autograd in a simple linear regresion HOT 1
- what is the size of the dictionary in chapter 14
- Chapter 4 - How is weight_delta computed ? HOT 6
- Ch11 Predicting Movie Reviews - error in back propagation code HOT 9
- License HOT 1
- Missed variable
- lots of mistakes and illogical ordering? is this a pre-script?
- ch 10 kernel weight update typo
- Inactive Activation gradients HOT 1
- Authorization to re-implement in another language HOT 2
- Chapter 6 - Array in array vs use vector HOT 1
- Chapter 6 - layer_1_delta
- Mistake in Ch3. code
- 2nd edition?
- chapter 6
- Chapter 8 examples, why do they all turn label into one_hot_labels HOT 3
- Something wrong with the code in chapter 10
- Help Please HOT 2
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grokking-deep-learning.