Skip to content

Commit 24a53a5

Browse files
authored
Merge branch 'master' into master
2 parents e9e3e7f + e18d233 commit 24a53a5

15 files changed

+106
-102
lines changed

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -28,10 +28,10 @@ In case you prefer to write your tutorial in jupyter, you can use [this script](
2828
- Then you can build using `make docs`. This will download the data, execute the tutorials and build the documentation to `docs/` directory. This will take about 60-120 min for systems with GPUs. If you do not have a GPU installed on your system, then see next step.
2929
- You can skip the computationally intensive graph generation by running `make html-noplot` to build basic html documentation to `_build/html`. This way, you can quickly preview your tutorial.
3030

31-
> If you get **ModuleNotFoundError: No module named 'pytorch_sphinx_theme' make: *** [html-noplot] Error 2**, from /tutorials/src/pytorch-sphinx-theme run `python setup.py install`.
31+
> If you get **ModuleNotFoundError: No module named 'pytorch_sphinx_theme' make: *** [html-noplot] Error 2** from /tutorials/src/pytorch-sphinx-theme or /venv/src/pytorch-sphinx-theme (while using virtualenv), run `python setup.py install`.
3232
3333

3434
## About contributing to PyTorch Documentation and Tutorials
3535
* You can find information about contributing to PyTorch documentation in the
3636
PyTorch Repo [README.md](https://github.com/pytorch/pytorch/blob/master/README.md) file.
37-
* Additional information can be found in [PyTorch CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md).
37+
* Additional information can be found in [PyTorch CONTRIBUTING.md](https://github.com/pytorch/pytorch/blob/master/CONTRIBUTING.md).

beginner_source/basics/autogradqs_tutorial.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,7 +58,7 @@
5858
# A function that we apply to tensors to construct computational graph is
5959
# in fact an object of class ``Function``. This object knows how to
6060
# compute the function in the *forward* direction, and also how to compute
61-
# it's derivative during the *backward propagation* step. A reference to
61+
# its derivative during the *backward propagation* step. A reference to
6262
# the backward propagation function is stored in ``grad_fn`` property of a
6363
# tensor. You can find more information of ``Function`` `in the
6464
# documentation <https://pytorch.org/docs/stable/autograd.html#function>`__.

beginner_source/basics/buildmodel_tutorial.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def forward(self, x):
6767

6868
##############################################
6969
# We create an instance of ``NeuralNetwork``, and move it to the ``device``, and print
70-
# it's structure.
70+
# its structure.
7171

7272
model = NeuralNetwork().to(device)
7373
print(model)
@@ -119,7 +119,7 @@ def forward(self, x):
119119
# nn.Linear
120120
# ^^^^^^^^^^^^^^^^^^^^^^
121121
# The `linear layer <https://pytorch.org/docs/stable/generated/torch.nn.Linear.html>`_
122-
# is a module that applies a linear transformation on the input using it's stored weights and biases.
122+
# is a module that applies a linear transformation on the input using its stored weights and biases.
123123
#
124124
layer1 = nn.Linear(in_features=28*28, out_features=20)
125125
hidden1 = layer1(flat_image)

beginner_source/basics/data_tutorial.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -225,7 +225,7 @@ def __getitem__(self, idx):
225225
# --------------------------
226226
#
227227
# We have loaded that dataset into the ``Dataloader`` and can iterate through the dataset as needed.
228-
# Each iteration below returns a batch of ``train_features`` and ``train_labels``(containing ``batch_size=64`` features and labels respectively).
228+
# Each iteration below returns a batch of ``train_features`` and ``train_labels`` (containing ``batch_size=64`` features and labels respectively).
229229
# Because we specified ``shuffle=True``, after we iterate over all batches the data is shuffled (for finer-grained control over
230230
# the data loading order, take a look at `Samplers <https://pytorch.org/docs/stable/data.html#data-loading-order-and-sampler>`_).
231231

beginner_source/blitz/README.txt

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ Deep Learning with PyTorch: A 60 Minute Blitz
1313
Neural Networks
1414
https://pytorch.org/tutorials/beginner/blitz/neural_networks_tutorial.html#
1515

16-
4. autograd_tutorial.py
17-
Automatic Differentiation
18-
https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html
19-
20-
5. cifar10_tutorial.py
16+
4. cifar10_tutorial.py
2117
Training a Classifier
2218
https://pytorch.org/tutorials/beginner/blitz/cifar10_tutorial.html
2319

20+
5. data_parallel_tutorial.py
21+
Optional: Data Parallelism
22+
https://pytorch.org/tutorials/beginner/blitz/data_parallel_tutorial.html
2423

beginner_source/blitz/cifar10_tutorial.py

Lines changed: 23 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -246,10 +246,13 @@ def forward(self, x):
246246

247247
correct = 0
248248
total = 0
249+
# since we're not training, we don't need to calculate the gradients for our outputs
249250
with torch.no_grad():
250251
for data in testloader:
251252
images, labels = data
253+
# calculate outputs by running images through the network
252254
outputs = net(images)
255+
# the class with the highest energy is what we choose as prediction
253256
_, predicted = torch.max(outputs.data, 1)
254257
total += labels.size(0)
255258
correct += (predicted == labels).sum().item()
@@ -265,23 +268,28 @@ def forward(self, x):
265268
# Hmmm, what are the classes that performed well, and the classes that did
266269
# not perform well:
267270

268-
class_correct = list(0. for i in range(10))
269-
class_total = list(0. for i in range(10))
271+
# prepare to count predictions for each class
272+
correct_pred = {classname: 0 for classname in classes}
273+
total_pred = {classname: 0 for classname in classes}
274+
275+
# again no gradients needed
270276
with torch.no_grad():
271277
for data in testloader:
272-
images, labels = data
273-
outputs = net(images)
274-
_, predicted = torch.max(outputs, 1)
275-
c = (predicted == labels).squeeze()
276-
for i in range(4):
277-
label = labels[i]
278-
class_correct[label] += c[i].item()
279-
class_total[label] += 1
280-
281-
282-
for i in range(10):
283-
print('Accuracy of %5s : %2d %%' % (
284-
classes[i], 100 * class_correct[i] / class_total[i]))
278+
images, labels = data
279+
outputs = net(images)
280+
_, predictions = torch.max(outputs, 1)
281+
# collect the correct predictions for each class
282+
for label, prediction in zip(labels, predictions):
283+
if label == prediction:
284+
correct_pred[classes[label]] += 1
285+
total_pred[classes[label]] += 1
286+
287+
288+
# print accuracy for each class
289+
for classname, correct_count in correct_pred.items():
290+
accuracy = 100 * float(correct_count) / total_pred[classname]
291+
print("Accuracy for class {:5s} is: {:.1f} %".format(classname,
292+
accuracy))
285293

286294
########################################################################
287295
# Okay, so what next?

beginner_source/blitz/neural_networks_tutorial.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -176,8 +176,9 @@ def num_flat_features(self, x):
176176
# -> loss
177177
#
178178
# So, when we call ``loss.backward()``, the whole graph is differentiated
179-
# w.r.t. the loss, and all Tensors in the graph that have ``requires_grad=True``
180-
# will have their ``.grad`` Tensor accumulated with the gradient.
179+
# w.r.t. the neural net parameters, and all Tensors in the graph that have
180+
# ``requires_grad=True`` will have their ``.grad`` Tensor accumulated with the
181+
# gradient.
181182
#
182183
# For illustration, let us follow a few steps backward:
183184

beginner_source/chatbot_tutorial.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -471,7 +471,7 @@ def trimRareWords(voc, pairs, MIN_COUNT):
471471
# with mini-batches.
472472
#
473473
# Using mini-batches also means that we must be mindful of the variation
474-
# of sentence length in our batches. To accomodate sentences of different
474+
# of sentence length in our batches. To accommodate sentences of different
475475
# sizes in the same batch, we will make our batched input tensor of shape
476476
# *(max_length, batch_size)*, where sentences shorter than the
477477
# *max_length* are zero padded after an *EOS_token*.
@@ -615,7 +615,7 @@ def batch2TrainData(voc, pair_batch):
615615
# in normal sequential order, and one that is fed the input sequence in
616616
# reverse order. The outputs of each network are summed at each time step.
617617
# Using a bidirectional GRU will give us the advantage of encoding both
618-
# past and future context.
618+
# past and future contexts.
619619
#
620620
# Bidirectional RNN:
621621
#
@@ -700,7 +700,7 @@ def forward(self, input_seq, input_lengths, hidden=None):
700700
# states to generate the next word in the sequence. It continues
701701
# generating words until it outputs an *EOS_token*, representing the end
702702
# of the sentence. A common problem with a vanilla seq2seq decoder is that
703-
# if we rely soley on the context vector to encode the entire input
703+
# if we rely solely on the context vector to encode the entire input
704704
# sequence’s meaning, it is likely that we will have information loss.
705705
# This is especially the case when dealing with long input sequences,
706706
# greatly limiting the capability of our decoder.
@@ -950,7 +950,7 @@ def maskNLLLoss(inp, target, mask):
950950
# sequence (or batch of sequences). We use the ``GRU`` layer like this in
951951
# the ``encoder``. The reality is that under the hood, there is an
952952
# iterative process looping over each time step calculating hidden states.
953-
# Alternatively, you ran run these modules one time-step at a time. In
953+
# Alternatively, you can run these modules one time-step at a time. In
954954
# this case, we manually loop over the sequences during the training
955955
# process like we must do for the ``decoder`` model. As long as you
956956
# maintain the correct conceptual model of these modules, implementing
@@ -1115,7 +1115,7 @@ def trainIters(model_name, voc, pairs, encoder, decoder, encoder_optimizer, deco
11151115
# softmax value. This decoding method is optimal on a single time-step
11161116
# level.
11171117
#
1118-
# To facilite the greedy decoding operation, we define a
1118+
# To facilitate the greedy decoding operation, we define a
11191119
# ``GreedySearchDecoder`` class. When run, an object of this class takes
11201120
# an input sequence (``input_seq``) of shape *(input_seq length, 1)*, a
11211121
# scalar input length (``input_length``) tensor, and a ``max_length`` to

beginner_source/dcgan_faces_tutorial.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,7 @@
7171
# :math:`D` and :math:`G` play a minimax game in which :math:`D` tries to
7272
# maximize the probability it correctly classifies reals and fakes
7373
# (:math:`logD(x)`), and :math:`G` tries to minimize the probability that
74-
# :math:`D` will predict its outputs are fake (:math:`log(1-D(G(x)))`).
74+
# :math:`D` will predict its outputs are fake (:math:`log(1-D(G(z)))`).
7575
# From the paper, the GAN loss function is
7676
#
7777
# .. math:: \underset{G}{\text{min}} \underset{D}{\text{max}}V(D,G) = \mathbb{E}_{x\sim p_{data}(x)}\big[logD(x)\big] + \mathbb{E}_{z\sim p_{z}(z)}\big[log(1-D(G(z)))\big]

beginner_source/nn_tutorial.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,6 @@
8585
torch.tensor, (x_train, y_train, x_valid, y_valid)
8686
)
8787
n, c = x_train.shape
88-
x_train, x_train.shape, y_train.min(), y_train.max()
8988
print(x_train, y_train)
9089
print(x_train.shape)
9190
print(y_train.min(), y_train.max())

0 commit comments

Comments
 (0)