From 1b78fb38b01c58bb0354c80c9b2d88a280edccb7 Mon Sep 17 00:00:00 2001 From: Justin Silver Date: Mon, 9 Jun 2025 14:34:54 -0700 Subject: [PATCH 1/4] Add work-in-progress for visualizing gradients tutorial (issue #3186) --- .../visualizing_gradients_tutorial.py | 426 ++++++++++++++++++ index.rst | 8 + 2 files changed, 434 insertions(+) create mode 100644 advanced_source/visualizing_gradients_tutorial.py diff --git a/advanced_source/visualizing_gradients_tutorial.py b/advanced_source/visualizing_gradients_tutorial.py new file mode 100644 index 0000000000..6e9e81bfd9 --- /dev/null +++ b/advanced_source/visualizing_gradients_tutorial.py @@ -0,0 +1,426 @@ +""" +Visualizing Gradients +===================== + +**Author**: `Justin Silver `_ + +By performance and efficiency reasons, PyTorch does not save the +intermediate gradients when running back-propagation. To visualize the +gradients of these internal layer tensor, we have to explicitly tell +PyTorch to retain those values with the ``retain_grad`` parameter. + +By the end of this tutorial, you will be able to: + +- Visualize gradients after backward propagation in a neural network +- Differentiate between *leaf* and *non-leaf* tensors +- Know when to use\ ``retain_grad`` vs. ``require_grad`` + +""" + + +###################################################################### +# Introduction +# ------------ +# +# When training neural networks with PyTorch, it is easy to disregard the +# internal mechanisms of the PyTorch library. For example, to run +# back-propagation the API requires a single call to ``loss.backward()``. +# This tutorial will dive into how exactly those gradients are calculated +# and stored in two different kinds of PyTorch tensors: *leaf*, and +# *non-leaf*. It will also cover how we can extract and visualize +# gradients at any neuron in the computational graph. Some important +# barriers to efficient neural network training are vanishing/exploding +# gradients, which lead to slow training progress and/or broken +# optimization pipelines. Thus, it is important to understand how +# information flows from one end of the network, through the computational +# graph, and finally to the parameters we want to optimize. +# + + +###################################################################### +# Setup +# ----- +# +# First, make sure PyTorch is installed and then import the necessary +# libraries +# + +import torch +import torch.nn as nn +import torch.nn.functional as F + + +###################################################################### +# Next, we will instantiate an extremely simple network so that we can +# focus on the gradients. This will be an affine layer followed by a ReLU +# activation. Note that the ``requires_grad=True`` is necessary for the +# parameters (``W`` and ``b``) so that PyTorch tracks operations involving +# those tensors. We’ll discuss more about this attribute shortly. +# + +# tensor setup +x = torch.ones(1, 3) # input with shape: (1, 3) +W = torch.ones(3, 2, requires_grad=True) # weights with shape: (3, 2) +b = torch.ones(1, 2, requires_grad=True) # bias with shape: (1, 2) +y = torch.ones(1, 2) # output with shape: (1, 2) + +# forward pass +z = (x @ W) + b # pre-activation with shape: (1, 2) +y_pred = F.relu(z) # activation with shape: (1, 2) +loss = F.mse_loss(y_pred, y) # scalar loss + + +###################################################################### +# Before we perform back-propagation on this network, we need to know the +# difference between *leaf* and *non-leaf* nodes. This is important +# because the distinction affects how gradients are calculated and stored. +# + + +###################################################################### +# Leaf vs. non-leaf tensors +# ------------------------- +# +# The backbone for PyTorch Autograd is a dynamic computational graph which +# keeps a record of input tensor data, all subsequent operations on those +# tensors, and finally the resulting new tensors. It is a directed acyclic +# graph (DAG) which can be used to compute gradients along every node all +# the way from the roots (output tensors) to the leaves (input tensors) +# using the chain rule from calculus. +# +# In the context of a generic DAG then, a *leaf* is simply a node which is +# at the input (beginning) of the graph, and *non-leaf* nodes are +# everything else. +# +# To start the generation of the computational graph which can be used for +# gradient calculation, we need to pass in the ``requires_grad=True`` +# parameter to the tensor constructors. That is because by default, +# PyTorch is not tracking gradients on any created tensors. To verify +# this, try removing the parameter above and then run back-propagation: +# +# :: +# +# >>> loss.backward() +# RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn +# +# This runtime error is telling us that the tensor is not tracking +# gradients and has no associated gradient function. Thus, it cannot +# back-propagate to the leaf tensors and calculate the gradients for each +# node. +# +# From the above discussion, we can see that ``x``, ``W``, ``b``, and +# ``y`` are leaf tensors, whereas ``z``, ``y_pred``, and ``loss`` are +# non-leaf tensors. We can verify this with the class attribute +# ``is_leaf()``: +# + +# prints all True because new tensors are leafs by convention +print(f"{x.is_leaf=}") +print(f"{W.is_leaf=}") +print(f"{b.is_leaf=}") +print(f"{y.is_leaf=}") + +# prints all False because tensors are the result of an operation +# with at least one tensor having requires_grad=True +print(f"{z.is_leaf=}") +print(f"{y_pred.is_leaf=}") +print(f"{loss.is_leaf=}") + + +###################################################################### +# The distinction between leaf and non-leaf is important, because that +# attribute determines whether the tensor’s gradient will be stored in the +# ``grad`` property after the backward pass, and thus be usable for +# gradient descent optimization. We’ll cover this some more in the +# following section. +# +# Also note that by convention, when the user creates a new tensor, +# PyTorch automatically makes it a leaf node. This is the case even though +# is no computational graph associated with the tensor. For example: +# + +a = torch.tensor([1.0, 5.0, 2.0]) +a.is_leaf + + +###################################################################### +# Now that we understand what makes a tensor a leaf vs. non-leaf, the +# second piece of the puzzle is knowing when PyTorch calculates and stores +# gradients for the tensors in its computational graph. +# + + +###################################################################### +# ``requires_grad`` +# ================= +# +# To tell PyTorch to explicitly start tracking gradients, when we create +# the tensor, we can pass in the parameter ``requires_grad=True`` to the +# class constructor (by default it is ``False``). This tells PyTorch to +# treat the tensor as a leaf tensor, and all the subsequent operations +# will generate results which also need to require the gradient for +# back-propagation to work. This is because the backward pass uses the +# chain rule from calculus, where intermediate gradients ‘flow’ backward +# through the network. +# +# We already did this for the parameters we want to optimize, so we’re +# good. If you need to change the property though, you can call +# ``requires_grad_()`` on the tensor to change it (notice the ``_`` +# suffix). +# +# Similar to the analysis above, we can sanity-check which nodes in our +# network have to calculate the gradient for back-propagation to work. +# + +# prints all False because tensors are leaf nodes +print(f"{x.requires_grad=}") +print(f"{y.requires_grad=}") + +# prints all True because requires_grad=True in constructor +print(f"{W.requires_grad=}") +print(f"{b.requires_grad=}") + +# prints all True because tensors are non-leaf nodes +print(f"{z.requires_grad=}") +print(f"{y_pred.requires_grad=}") +print(f"{loss.requires_grad=}") + + +###################################################################### +# A useful heuristic to remember is that whenever a tensor is a non-leaf, +# it **has** to have ``requires_grad=True``, otherwise back-propagation +# would fail. If the tensor is a leaf, then it will only have +# ``requires_grad=True`` if it was specifically set by the user. Another +# way to phrase this is that if at least one of the inputs to the tensor +# requires the gradient, then it will require the gradient as well. +# +# There are two exceptions to the above guideline: +# +# 1. Using ``nn.Module`` and ``nn.Parameter`` +# 2. `Locally disabling gradient computation with context +# managers `__ +# +# For the first case, if you subclass the ``nn.Module`` base class, then +# by default all of the parameters of that module will have +# ``requires_grad`` automatically set to ``True``. e.g.: +# + +class Model(nn.Module): + def __init__(self) -> None: + super().__init__() + self.conv1 = nn.Conv2d(1, 20, 5) + self.conv2 = nn.Conv2d(20, 20, 5) + + def forward(self, x): + x = F.relu(self.conv1(x)) + return F.relu(self.conv2(x)) + +m = Model() + +for name, param in m.named_parameters(): + print(name, param.requires_grad) + + +###################################################################### +# For the second case, if you wrap one of the gradient context managers +# around a tensor, then computations behave as if none of the inputs +# require grad. +# + +z = (x @ W) + b # same as before + +with torch.no_grad(): # could also use torch.inference_mode() + z2 = (x @ W) + b + +print(f"{z.requires_grad=}") +print(f"{z2.requires_grad=}") + + +###################################################################### +# In summary, ``requires_grad`` tells autograd which tensors need to have +# their gradients calculated for back-propagation to work. This is +# different from which gradients have to be stored inside the tensor, +# which is the topic of the next section. +# + + +###################################################################### +# Back-propagation +# ---------------- +# +# To actually perform optimization (e.g. SGD, Adam, etc.), we need to run +# the backward pass so that we can extract the gradients. +# + +loss.backward() + + +###################################################################### +# This single function call populated the ``grad`` property of all leaf +# tensors which had their ``requires_grad=True``. The ``grad`` is the +# gradient of the loss with respect to the tensor we are probing. +# + +print(f"{W.grad=}") +print(f"{b.grad=}") + + +###################################################################### +# You might be wondering about the other tensors in our network. Let’s +# check the remaining leaf nodes: +# + +print(f"{x.grad=}") +print(f"{y.grad=}") + + +###################################################################### +# Interestingly, these gradients haven’t been populated into the ``grad`` +# property and they default to ``None``. This is expected behavior though +# because we did not explicitly tell PyTorch to calculate gradient with +# the ``requires_grad`` parameter. +# +# Let’s now look at an intermediate non-leaf node: +# + +print(f"{z.grad=}") + + +###################################################################### +# We also get ``None`` for the gradient, but now PyTorch warns us that a +# non-leaf node’s ``grad`` attribute is being accessed. It might come as a +# surprise that we can’t access the gradient for intermediate tensors in +# the computational graph, since they **have** to calculate the gradient +# for back-propagation to work. PyTorch errs on the side of performance +# and assumes that you don’t need to access intermediate gradients if +# you’re trying to optimize leaf tensors. To change this behavior, we can +# use the ``retain_grad()`` function. +# + + +###################################################################### +# ``retain_grad`` +# --------------- +# +# When we call ``retain_grad()`` on a tensor, this signals to the autograd +# engine that we want to have that tensor’s ``grad`` populated after +# calling ``backward()``. +# +# We can verify that PyTorch is not storing gradients for non-leaf tensors +# by accessing the ``retains_grad`` flag: +# + +# Prints all False because we didn't tell PyTorch to store gradients with `retain_grad()` +print(f"{z.retains_grad=}") +print(f"{y_pred.retains_grad=}") +print(f"{loss.retains_grad=}") + + +###################################################################### +# We can also check the other leaf tensors, but note that by convention, +# this attribute will print ``False`` for any leaf node, even if that +# tensor was set to require its gradient. This is true even if you call +# ``retain_grad()`` on a leaf node that has ``requires_grad=True``, which +# results in a no-op. +# + +# Prints all False because these are leaf tensors +print(f"{x.retains_grad=}") +print(f"{y.retains_grad=}") +print(f"{b.retains_grad=}") +print(f"{W.retains_grad=}") + +W.retain_grad() +print(f"{W.retains_grad=}") # still False + + +###################################################################### +# If we try calling ``retain_grad()`` on a node that has +# ``require_grad=False``, PyTorch actually throws an error. +# +# :: +# +# >>> x.retain_grad() +# RuntimeError: can't retain_grad on Tensor that has requires_grad=False +# + + +###################################################################### +# In summary, using ``retain_grad()`` and ``retains_grad`` only make sense +# for non-leaf nodes, since the ``grad`` attribute has to be populated for +# leaf tensors that have ``requires_grad=True``. By default, these +# non-leaf nodes do not retain (store) their gradient after +# back-propagation. +# +# We can change that by rerunning the forward pass, telling PyTorch to +# store the gradients, and then performing back-propagation. +# + +# forward pass +z = (x @ W) + b +y_pred = F.relu(z) +loss = F.mse_loss(y_pred, y) + +# tell PyTorch to store the gradients after backward() +z.retain_grad() +y_pred.retain_grad() +loss.retain_grad() + +# have to zero out gradients otherwise they would accumulate +W.grad = None +b.grad = None + +# back-propagation +loss.backward() + +# print gradients for all tensors that have requires_grad=True +print(f"{W.grad=}") +print(f"{b.grad=}") +print(f"{z.grad=}") +print(f"{y_pred.grad=}") +print(f"{loss.grad=}") + + +###################################################################### +# Note we get the same result for ``W.grad`` as before. Also note that +# because the loss is scalar, the gradient of the loss with respect to +# itself is simply ``1.0``. +# + + +###################################################################### +# (work-in-progress) Real-world example - visualizing gradient flow +# ----------------------------------------------------------------- +# +# We used a toy example above, but let’s now apply the concepts we learned +# to the visualization of intermediate gradients in a more powerful neural +# network: ResNet. +# + + +###################################################################### +# (work-in-progress) Conclusion +# ----------------------------- +# +# This table can be used as a cheat-sheet which summarizes the above +# discussions. The following scenarios are the only ones that are valid +# for PyTorch tensors. +# +# ============ ================== ================ =================================== ============================= +# ``is_leaf`` ``requires_grad`` ``retains_grad`` ``require_grad()`` ``retain_grad()`` +# ============ ================== ================ =================================== ============================= +# True False False sets ``require_grad`` to True/False no-op +# True True False sets ``require_grad`` to True/False no-op +# False True False no-op sets ``retains_grad`` to True +# False True True no-op no-op +# ============ ================== ================ =================================== ============================= + + +###################################################################### +# References +# ---------- +# +# https://docs.pytorch.org/tutorials/beginner/basics/autogradqs_tutorial +# +# https://docs.pytorch.org/docs/stable/notes/autograd.html#setting-requires-grad +# \ No newline at end of file diff --git a/index.rst b/index.rst index ebcc774214..5e7bf3434e 100644 --- a/index.rst +++ b/index.rst @@ -100,6 +100,13 @@ Welcome to PyTorch Tutorials :link: intermediate/pinmem_nonblock.html :tags: Getting-Started +.. customcarditem:: + :header: Visualizing Gradients in PyTorch + :card_description: Learn how gradients are calculated with Autograd for leaf and non-leaf tensors. + :image: _static/img/thumbnails/cropped/generic-pytorch-logo.png + :link: advanced/visualizing_gradients_tutorial.html + :tags: Getting-Started + .. Image/Video .. customcarditem:: @@ -925,6 +932,7 @@ Additional Resources intermediate/nlp_from_scratch_index intermediate/tensorboard_tutorial intermediate/pinmem_nonblock + advanced/visualizing_gradients_tutorial .. toctree:: :maxdepth: 1 From 9b8ddd22c169c27983db3722a1a753539dd8c12d Mon Sep 17 00:00:00 2001 From: Justin Silver Date: Thu, 12 Jun 2025 16:52:29 -0700 Subject: [PATCH 2/4] Shorten first section, add suggestions, and start ResNet example (WIP) Still a work in progress, but I significantly reduced the first section and added some helpful images for the computational graph. I also added links for most terms. The WIP section with ResNet I still have to debug. I'm not sure my method for retaining the intermediate gradients is valid. See discussion on pull request. --- .../comp-graph-1.png | Bin 0 -> 42318 bytes .../comp-graph-2.png | Bin 0 -> 46658 bytes .../visualizing_gradients_tutorial.py | 638 +++++++++++------- 3 files changed, 385 insertions(+), 253 deletions(-) create mode 100644 _static/img/visualizing_gradients_tutorial/comp-graph-1.png create mode 100644 _static/img/visualizing_gradients_tutorial/comp-graph-2.png diff --git a/_static/img/visualizing_gradients_tutorial/comp-graph-1.png b/_static/img/visualizing_gradients_tutorial/comp-graph-1.png new file mode 100644 index 0000000000000000000000000000000000000000..407f4aadd41c3c2ec8bde6055237b528dad751d3 GIT binary patch literal 42318 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[SXQyXqxST?S6=3KaIac$8*1mj6O+i&C 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 SqvI8RSq>R(e%#FdkN*dZ^mE?; literal 0 HcmV?d00001 diff --git a/advanced_source/visualizing_gradients_tutorial.py b/advanced_source/visualizing_gradients_tutorial.py index 6e9e81bfd9..cd9f0474c5 100644 --- a/advanced_source/visualizing_gradients_tutorial.py +++ b/advanced_source/visualizing_gradients_tutorial.py @@ -2,60 +2,75 @@ Visualizing Gradients ===================== -**Author**: `Justin Silver `_ - -By performance and efficiency reasons, PyTorch does not save the -intermediate gradients when running back-propagation. To visualize the -gradients of these internal layer tensor, we have to explicitly tell -PyTorch to retain those values with the ``retain_grad`` parameter. +**Author:** `Justin Silver `__ + +When training neural networks with PyTorch, it’s possible to ignore some +of the library’s internal mechanisms. For example, running +backpropagation requires a simple call to ``backward()``. This tutorial +dives into how those gradients are calculated and stored in two +different kinds of PyTorch tensors: leaf vs. non-leaf. It will also +cover how we can extract and visualize gradients at any layer in the +network’s computational graph. By inspecting how information flows from +the end of the network to the parameters we want to optimize, we can +debug issues that occur during training such as `vanishing or exploding +gradients `__. By the end of this tutorial, you will be able to: -- Visualize gradients after backward propagation in a neural network -- Differentiate between *leaf* and *non-leaf* tensors -- Know when to use\ ``retain_grad`` vs. ``require_grad`` +- Differentiate leaf vs. non-leaf tensors +- Know when to use ``requires_grad`` vs. ``retain_grad`` +- Visualize gradients after backpropagation in a neural network -""" +We will start off with a simple network to understand how PyTorch +calculates and stores gradients, and then build on this knowledge to +visualize the gradient flow of a `ResNet +model `__. +Before starting, it is recommended to have a solid understanding of +`tensors and how to manipulate +them `__. +A basic knowledge of `how autograd +works `__ +would also be useful. -###################################################################### -# Introduction -# ------------ -# -# When training neural networks with PyTorch, it is easy to disregard the -# internal mechanisms of the PyTorch library. For example, to run -# back-propagation the API requires a single call to ``loss.backward()``. -# This tutorial will dive into how exactly those gradients are calculated -# and stored in two different kinds of PyTorch tensors: *leaf*, and -# *non-leaf*. It will also cover how we can extract and visualize -# gradients at any neuron in the computational graph. Some important -# barriers to efficient neural network training are vanishing/exploding -# gradients, which lead to slow training progress and/or broken -# optimization pipelines. Thus, it is important to understand how -# information flows from one end of the network, through the computational -# graph, and finally to the parameters we want to optimize. -# +""" ###################################################################### # Setup # ----- # -# First, make sure PyTorch is installed and then import the necessary -# libraries +# First, make sure `PyTorch is +# installed `__ and then import +# the necessary libraries. # import torch +import torchvision +from torchvision.models import resnet18 import torch.nn as nn +import torch.optim as optim import torch.nn.functional as F +import matplotlib.pyplot as plt ###################################################################### -# Next, we will instantiate an extremely simple network so that we can -# focus on the gradients. This will be an affine layer followed by a ReLU -# activation. Note that the ``requires_grad=True`` is necessary for the -# parameters (``W`` and ``b``) so that PyTorch tracks operations involving -# those tensors. We’ll discuss more about this attribute shortly. +# Next, we will instantiate a simple network so that we can focus on the +# gradients. This will be an affine layer, followed by a ReLU activation, +# and ending with a MSE loss between the prediction and label tensors. +# +# .. math:: +# +# \mathbf{y}_{\text{pred}} = \text{ReLU}(\mathbf{x} \mathbf{W} + \mathbf{b}) +# +# .. math:: +# +# L = \text{MSE}(\mathbf{y}_{\text{pred}}, \mathbf{y}) +# +# Note that the ``requires_grad=True`` is necessary for the parameters +# (``W`` and ``b``) so that PyTorch tracks operations involving those +# tensors. We’ll discuss more about this in a future +# `section <#requires-grad>`__. # # tensor setup @@ -70,183 +85,126 @@ loss = F.mse_loss(y_pred, y) # scalar loss -###################################################################### -# Before we perform back-propagation on this network, we need to know the -# difference between *leaf* and *non-leaf* nodes. This is important -# because the distinction affects how gradients are calculated and stored. -# - - ###################################################################### # Leaf vs. non-leaf tensors # ------------------------- # -# The backbone for PyTorch Autograd is a dynamic computational graph which -# keeps a record of input tensor data, all subsequent operations on those -# tensors, and finally the resulting new tensors. It is a directed acyclic -# graph (DAG) which can be used to compute gradients along every node all -# the way from the roots (output tensors) to the leaves (input tensors) -# using the chain rule from calculus. +# After running the forward pass, PyTorch autograd has built up a `dynamic +# computational +# graph `__ +# which is shown below. This is a `Directed Acyclic Graph +# (DAG) `__ which +# keeps a record of input tensors (leaf nodes), all subsequent operations +# on those tensors, and the intermediate/output tensors (non-leaf nodes). +# The graph is used to compute gradients for each tensor starting from the +# graph roots (outputs) to the leaves (inputs) using the `chain +# rule `__ from calculus: # -# In the context of a generic DAG then, a *leaf* is simply a node which is -# at the input (beginning) of the graph, and *non-leaf* nodes are -# everything else. +# .. math:: # -# To start the generation of the computational graph which can be used for -# gradient calculation, we need to pass in the ``requires_grad=True`` -# parameter to the tensor constructors. That is because by default, -# PyTorch is not tracking gradients on any created tensors. To verify -# this, try removing the parameter above and then run back-propagation: +# \mathbf{y} = \mathbf{f}_k\bigl(\mathbf{f}_{k-1}(\dots \mathbf{f}_1(\mathbf{x}) \dots)\bigr) # -# :: +# .. math:: # -# >>> loss.backward() -# RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn +# \frac{\partial \mathbf{y}}{\partial \mathbf{x}} = +# \frac{\partial \mathbf{f}_k}{\partial \mathbf{f}_{k-1}} \cdot +# \frac{\partial \mathbf{f}_{k-1}}{\partial \mathbf{f}_{k-2}} \cdot +# \cdots \cdot +# \frac{\partial \mathbf{f}_1}{\partial \mathbf{x}} # -# This runtime error is telling us that the tensor is not tracking -# gradients and has no associated gradient function. Thus, it cannot -# back-propagate to the leaf tensors and calculate the gradients for each -# node. +# .. figure:: /_static/img/visualizing_gradients_tutorial/comp-graph-1.png +# :alt: Computational graph after forward pass # -# From the above discussion, we can see that ``x``, ``W``, ``b``, and -# ``y`` are leaf tensors, whereas ``z``, ``y_pred``, and ``loss`` are -# non-leaf tensors. We can verify this with the class attribute -# ``is_leaf()``: +# Computational graph after forward pass # -# prints all True because new tensors are leafs by convention -print(f"{x.is_leaf=}") -print(f"{W.is_leaf=}") -print(f"{b.is_leaf=}") -print(f"{y.is_leaf=}") - -# prints all False because tensors are the result of an operation -# with at least one tensor having requires_grad=True -print(f"{z.is_leaf=}") -print(f"{y_pred.is_leaf=}") -print(f"{loss.is_leaf=}") - ###################################################################### -# The distinction between leaf and non-leaf is important, because that -# attribute determines whether the tensor’s gradient will be stored in the -# ``grad`` property after the backward pass, and thus be usable for -# gradient descent optimization. We’ll cover this some more in the -# following section. -# -# Also note that by convention, when the user creates a new tensor, -# PyTorch automatically makes it a leaf node. This is the case even though -# is no computational graph associated with the tensor. For example: +# PyTorch considers a node to be a *leaf* if it is not the result of a +# tensor operation with at least one input having ``requires_grad=True`` +# (e.g. ``x``, ``W``, ``b``, and ``y``), and everything else to be +# *non-leaf* (e.g. ``z``, ``y_pred``, and ``loss``). You can verify this +# programmatically by probing the ``is_leaf`` attribute of the tensors: # -a = torch.tensor([1.0, 5.0, 2.0]) -a.is_leaf +# prints True because new tensors are leafs by convention +print(f"{x.is_leaf=}") + +# prints False because tensor is the result of an operation with at +# least one input having requires_grad=True +print(f"{z.is_leaf=}") ###################################################################### -# Now that we understand what makes a tensor a leaf vs. non-leaf, the -# second piece of the puzzle is knowing when PyTorch calculates and stores -# gradients for the tensors in its computational graph. +# The distinction between leaf and non-leaf determines whether the +# tensor’s gradient will be stored in the ``grad`` property after the +# backward pass, and thus be usable for gradient descent optimization. +# We’ll cover this some more in the `following section <#retain-grad>`__. +# +# Let’s now investigate how PyTorch calculates and stores gradients for +# the tensors in its computational graph. # ###################################################################### # ``requires_grad`` -# ================= +# ----------------- # -# To tell PyTorch to explicitly start tracking gradients, when we create -# the tensor, we can pass in the parameter ``requires_grad=True`` to the -# class constructor (by default it is ``False``). This tells PyTorch to -# treat the tensor as a leaf tensor, and all the subsequent operations -# will generate results which also need to require the gradient for -# back-propagation to work. This is because the backward pass uses the -# chain rule from calculus, where intermediate gradients ‘flow’ backward -# through the network. +# To start the generation of the computational graph which can be used for +# gradient calculation, we need to pass in the ``requires_grad=True`` +# parameter to a tensor constructor. By default, the value is ``False``, +# and thus PyTorch does not track gradients on any created tensors. To +# verify this, try not setting ``requires_grad``, re-run the forward pass, +# and then run backpropagation. You will see: # -# We already did this for the parameters we want to optimize, so we’re -# good. If you need to change the property though, you can call -# ``requires_grad_()`` on the tensor to change it (notice the ``_`` -# suffix). +# :: # -# Similar to the analysis above, we can sanity-check which nodes in our -# network have to calculate the gradient for back-propagation to work. +# >>> loss.backward() +# RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn +# +# PyTorch is telling us that because the tensor is not tracking gradients, +# autograd can’t backpropagate to any leaf tensors. If you need to change +# the property, you can call ``requires_grad_()`` on the tensor (notice +# the ’_’ suffix). +# +# We can sanity-check which nodes require gradient calculation, just like +# we did above with the ``is_leaf`` attribute: # -# prints all False because tensors are leaf nodes -print(f"{x.requires_grad=}") -print(f"{y.requires_grad=}") - -# prints all True because requires_grad=True in constructor -print(f"{W.requires_grad=}") -print(f"{b.requires_grad=}") - -# prints all True because tensors are non-leaf nodes -print(f"{z.requires_grad=}") -print(f"{y_pred.requires_grad=}") -print(f"{loss.requires_grad=}") +print(f"{x.requires_grad=}") # prints False because requires_grad=False by default +print(f"{W.requires_grad=}") # prints True because we set requires_grad=True in constructor +print(f"{z.requires_grad=}") # prints True because tensor is a non-leaf node ###################################################################### -# A useful heuristic to remember is that whenever a tensor is a non-leaf, -# it **has** to have ``requires_grad=True``, otherwise back-propagation -# would fail. If the tensor is a leaf, then it will only have +# It’s useful to remember that by definition a non-leaf tensor has +# ``requires_grad=True``. Backpropagation would fail if this wasn’t the +# case. If the tensor is a leaf, then it will only have # ``requires_grad=True`` if it was specifically set by the user. Another # way to phrase this is that if at least one of the inputs to the tensor # requires the gradient, then it will require the gradient as well. # -# There are two exceptions to the above guideline: -# -# 1. Using ``nn.Module`` and ``nn.Parameter`` -# 2. `Locally disabling gradient computation with context -# managers `__ +# There are two exceptions to this rule: # -# For the first case, if you subclass the ``nn.Module`` base class, then -# by default all of the parameters of that module will have -# ``requires_grad`` automatically set to ``True``. e.g.: -# - -class Model(nn.Module): - def __init__(self) -> None: - super().__init__() - self.conv1 = nn.Conv2d(1, 20, 5) - self.conv2 = nn.Conv2d(20, 20, 5) - - def forward(self, x): - x = F.relu(self.conv1(x)) - return F.relu(self.conv2(x)) - -m = Model() - -for name, param in m.named_parameters(): - print(name, param.requires_grad) - - -###################################################################### -# For the second case, if you wrap one of the gradient context managers -# around a tensor, then computations behave as if none of the inputs -# require grad. +# 1. Any ``nn.Module`` that has ``nn.Parameter`` will have +# ``requires_grad=True`` for its parameters (see +# `here `__) +# 2. Locally disabling gradient computation with context managers (see +# `here `__) # -z = (x @ W) + b # same as before - -with torch.no_grad(): # could also use torch.inference_mode() - z2 = (x @ W) + b - -print(f"{z.requires_grad=}") -print(f"{z2.requires_grad=}") - ###################################################################### # In summary, ``requires_grad`` tells autograd which tensors need to have -# their gradients calculated for back-propagation to work. This is +# their gradients calculated for backpropagation to work. This is # different from which gradients have to be stored inside the tensor, # which is the topic of the next section. # ###################################################################### -# Back-propagation -# ---------------- +# ``retain_grad`` +# --------------- # # To actually perform optimization (e.g. SGD, Adam, etc.), we need to run # the backward pass so that we can extract the gradients. @@ -257,8 +215,9 @@ def forward(self, x): ###################################################################### # This single function call populated the ``grad`` property of all leaf -# tensors which had their ``requires_grad=True``. The ``grad`` is the -# gradient of the loss with respect to the tensor we are probing. +# tensors which had ``requires_grad=True``. The ``grad`` is the gradient +# of the loss with respect to the tensor we are probing. Before running +# ``backward()``, this attribute is set to ``None``. # print(f"{W.grad=}") @@ -270,15 +229,15 @@ def forward(self, x): # check the remaining leaf nodes: # +# prints all None because requires_grad=False print(f"{x.grad=}") -print(f"{y.grad=}") +print(f"{y.grad=}") ###################################################################### -# Interestingly, these gradients haven’t been populated into the ``grad`` -# property and they default to ``None``. This is expected behavior though -# because we did not explicitly tell PyTorch to calculate gradient with -# the ``requires_grad`` parameter. +# The gradients for these tensors haven’t been populated because we did +# not explicitly tell PyTorch to calculate their gradient +# (``requires_grad=False``). # # Let’s now look at an intermediate non-leaf node: # @@ -288,139 +247,312 @@ def forward(self, x): ###################################################################### # We also get ``None`` for the gradient, but now PyTorch warns us that a -# non-leaf node’s ``grad`` attribute is being accessed. It might come as a -# surprise that we can’t access the gradient for intermediate tensors in -# the computational graph, since they **have** to calculate the gradient -# for back-propagation to work. PyTorch errs on the side of performance -# and assumes that you don’t need to access intermediate gradients if -# you’re trying to optimize leaf tensors. To change this behavior, we can -# use the ``retain_grad()`` function. +# non-leaf node’s ``grad`` attribute is being accessed. Although autograd +# has to calculate intermediate gradients for backpropagation to work, it +# assumes you don’t need to access the values afterwards. To change this +# behavior, we can use the ``retain_grad()`` function on a tensor. This +# tells the autograd engine to populate that tensor’s ``grad`` after +# calling ``backward()``. # +# we have to re-run the forward pass +z = (x @ W) + b +y_pred = F.relu(z) +loss = F.mse_loss(y_pred, y) + +# tell PyTorch to store the gradients after backward() +z.retain_grad() +y_pred.retain_grad() +loss.retain_grad() + +# have to zero out gradients otherwise they would accumulate +W.grad = None +b.grad = None + +# backpropagation +loss.backward() + +# print gradients for all tensors that have requires_grad=True +print(f"{W.grad=}") +print(f"{b.grad=}") +print(f"{z.grad=}") +print(f"{y_pred.grad=}") +print(f"{loss.grad=}") + ###################################################################### -# ``retain_grad`` -# --------------- +# We get the same result for ``W.grad`` as before. Also note that because +# the loss is scalar, the gradient of the loss with respect to itself is +# simply ``1.0``. # -# When we call ``retain_grad()`` on a tensor, this signals to the autograd -# engine that we want to have that tensor’s ``grad`` populated after -# calling ``backward()``. +# If we look at the state of the computational graph now, we see that the +# ``retains_grad`` attribute has changed for the intermediate tensors. By +# convention, this attribute will print ``False`` for any leaf node, even +# if it requires its gradient. # -# We can verify that PyTorch is not storing gradients for non-leaf tensors -# by accessing the ``retains_grad`` flag: +# .. figure:: /_static/img/visualizing_gradients_tutorial/comp-graph-2.png +# :alt: Computational graph after backward pass # +# Computational graph after backward pass +# + -# Prints all False because we didn't tell PyTorch to store gradients with `retain_grad()` -print(f"{z.retains_grad=}") -print(f"{y_pred.retains_grad=}") -print(f"{loss.retains_grad=}") +###################################################################### +# If you call ``retain_grad()`` on a non-leaf node, it results in a no-op. +# If we call ``retain_grad()`` on a node that has ``requires_grad=False``, +# PyTorch actually throws an error, since it can’t store the gradient if +# it is never calculated. +# +# :: +# +# >>> x.retain_grad() +# RuntimeError: can't retain_grad on Tensor that has requires_grad=False +# +# In summary, using ``retain_grad()`` and ``retains_grad`` only make sense +# for non-leaf nodes, since the ``grad`` attribute will already be +# populated for leaf tensors that have ``requires_grad=True``. By default, +# these non-leaf nodes do not retain (store) their gradient after +# backpropagation. We can change that by rerunning the forward pass, +# telling PyTorch to store the gradients, and then performing +# backpropagation. +# +# The following table can be used as a cheat-sheet which summarizes the +# above discussions. The following scenarios are the only ones that are +# valid for PyTorch tensors. +# +# +# +# +----------------+------------------------+------------------------+---------------------------------------------------+-------------------------------------+ +# | ``is_leaf`` | ``requires_grad`` | ``retains_grad`` | ``require_grad()`` | ``retain_grad()`` | +# +================+========================+========================+===================================================+=====================================+ +# | ``True`` | ``False`` | ``False`` | sets ``requires_grad`` to ``True`` or ``False`` | no-op | +# +----------------+------------------------+------------------------+---------------------------------------------------+-------------------------------------+ +# | ``True`` | ``True`` | ``False`` | sets ``requires_grad`` to ``True`` or ``False`` | no-op | +# +----------------+------------------------+------------------------+---------------------------------------------------+-------------------------------------+ +# | ``False`` | ``True`` | ``False`` | no-op | sets ``retains_grad`` to ``True`` | +# +----------------+------------------------+------------------------+---------------------------------------------------+-------------------------------------+ +# | ``False`` | ``True`` | ``True`` | no-op | no-op | +# +----------------+------------------------+------------------------+---------------------------------------------------+-------------------------------------+ +# ###################################################################### -# We can also check the other leaf tensors, but note that by convention, -# this attribute will print ``False`` for any leaf node, even if that -# tensor was set to require its gradient. This is true even if you call -# ``retain_grad()`` on a leaf node that has ``requires_grad=True``, which -# results in a no-op. +# (work-in-progress) Real world example with ResNet +# ------------------------------------------------- +# +# Let’s move on from the toy example above and study a realistic network: +# `ResNet `__. +# +# To illustrate the importance of gradient visualization, we will +# instantiate two versions of ResNet: one without batch normalization +# (``BatchNorm``), and one with it. `Batch +# normalization `__ is an extremely +# effective technique to resolve the vanishing/exploding gradients issue, +# and we will be verifying that experimentally. +# +# We first initiate the models without ``BatchNorm`` following the +# `documentation `__. # -# Prints all False because these are leaf tensors -print(f"{x.retains_grad=}") -print(f"{y.retains_grad=}") -print(f"{b.retains_grad=}") -print(f"{W.retains_grad=}") +# set up dummy data +x = torch.randn(1, 3, 224, 224) +y = torch.randn(1, 1000) -W.retain_grad() -print(f"{W.retains_grad=}") # still False +# init model +# model = resnet18(norm_layer=nn.Identity) +model = resnet18() +model.train() +optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) ###################################################################### -# If we try calling ``retain_grad()`` on a node that has -# ``require_grad=False``, PyTorch actually throws an error. +# Because we are using a ``nn.Module`` instead of individual tensors for +# our forward pass, we need another adopt our method to access the +# intermediate gradients. This is done by `registering a +# hook `__. # -# :: +# Note that using backward pass hooks to probe an intermediate nodes +# gradient is preferred over using ``retain_grad()``. It avoids the memory +# retention overhead if gradients aren’t needed after backpropagation. It +# also lets you modify and/or clamp gradients during the backward pass, so +# they don’t vanish or explode. # -# >>> x.retain_grad() -# RuntimeError: can't retain_grad on Tensor that has requires_grad=False +# The following code defines our forward pass hook (notice the call to +# ``retain_grad()``) and also collects names of all parameters and layers. # +def hook_forward(module, args, output): + output.retain_grad() # store gradient in ouput tensors + + # grads and layers are global variables + outputs.append((layers[module], output)) + +def get_all_layers(layer, hook_fn): + """Returns dict where keys are children modules and values are layer names""" + layers = dict() + for name, layer in model.named_modules(): + if any(layer.children()) is False: + # skip Sequential and/or wrapper modules + layers[layer] = name + layer.register_forward_hook(hook_fn) # hook_forward + return layers + +def get_all_params(model): + """return list of all leaf tensors with requires_grad=True and which are not bias terms""" + params = [] + for name, param in model.named_parameters(): + if param.requires_grad and "bias" not in name: + params.append((name, param)) + return params + +# register hooks +layers = get_all_layers(model, hook_forward) + +# get parameter gradients +params = get_all_params(model) + ###################################################################### -# In summary, using ``retain_grad()`` and ``retains_grad`` only make sense -# for non-leaf nodes, since the ``grad`` attribute has to be populated for -# leaf tensors that have ``requires_grad=True``. By default, these -# non-leaf nodes do not retain (store) their gradient after -# back-propagation. +# Let’s check a few of the layers and parameters to make sure things are +# as expected: # -# We can change that by rerunning the forward pass, telling PyTorch to -# store the gradients, and then performing back-propagation. + +num_layers = 5 +print("<--------Params-------->") +for name, param in params[0:num_layers]: + print(name, param.shape) + +count = 0 +print("<--------Layers-------->") +for layer in layers.values(): + print(layer) + count += 1 + if count >= num_layers: + break + + +###################################################################### +# Now let’s run a forward pass and verify our output tensor values were +# populated. # -# forward pass -z = (x @ W) + b -y_pred = F.relu(z) -loss = F.mse_loss(y_pred, y) +outputs = [] # list with layer name, output tensor tuple +optimizer.zero_grad() +y_pred = model(x) +loss = F.mse_loss(y_pred, y) -# tell PyTorch to store the gradients after backward() -z.retain_grad() -y_pred.retain_grad() -loss.retain_grad() +print("<--------Outputs-------->") +for name, output in outputs[0:num_layers]: + print(name, output.shape) -# have to zero out gradients otherwise they would accumulate -W.grad = None -b.grad = None -# back-propagation +###################################################################### +# Everything looks good so far, so let’s call ``backward()``, populate the +# ``grad`` values for all intermediate tensors, and get the average +# gradient for each layer. +# + loss.backward() -# print gradients for all tensors that have requires_grad=True -print(f"{W.grad=}") -print(f"{b.grad=}") -print(f"{z.grad=}") -print(f"{y_pred.grad=}") -print(f"{loss.grad=}") +def get_grads(): + layer_idx = [] + avg_grads = [] + print("<--------Grads-------->") + for idx, (name, output) in enumerate(outputs[0:-2]): + if output.grad is not None: + avg_grad = output.grad.abs().mean() + if idx < num_layers: + print(name, avg_grad) + avg_grads.append(avg_grad) + layer_idx.append(idx) + return layer_idx, avg_grads + +layer_idx, avg_grads = get_grads() ###################################################################### -# Note we get the same result for ``W.grad`` as before. Also note that -# because the loss is scalar, the gradient of the loss with respect to -# itself is simply ``1.0``. +# Now that we have all our gradients stored in ``grads``, we can plot them +# and see how the average gradient values change as a function of the +# network depth. # +def plot_grads(layer_idx, avg_grads): + plt.plot(layer_idx, avg_grads) + plt.xlabel("Layer depth") + plt.ylabel("Average gradient") + plt.title("Gradient flow") + plt.grid(True) + +plot_grads(layer_idx, avg_grads) + ###################################################################### -# (work-in-progress) Real-world example - visualizing gradient flow -# ----------------------------------------------------------------- -# -# We used a toy example above, but let’s now apply the concepts we learned -# to the visualization of intermediate gradients in a more powerful neural -# network: ResNet. +# Upon initialization, this is not very interesting. Let’s try running for +# several epochs, use gradient descent, and then see how the values +# change. # +epochs = 20 + +for epoch in range(epochs): + outputs = [] # list with layer name, output tensor tuple + optimizer.zero_grad() + y_pred = model(x) + loss = F.mse_loss(y_pred, y) + loss.backward() + optimizer.step() + +layer_idx, avg_grads = get_grads() +plot_grads(layer_idx, avg_grads) + + +###################################################################### +# Still not very interesting… surprised that the gradients don’t +# accumulate. Let’s check the leaf tensors… those tensors are probably +# just recreated whenever I rerun the forward pass, and thus they don’t +# accumulate. Let’s see if that’s the case with the parameters. +# + +def get_param_grads(): + layer_idx = [] + avg_grads = [] + print("<--------Params-------->") + for idx, (name, param) in enumerate(params): + if param.grad is not None: + avg_grad = param.grad.abs().mean() + if idx < num_layers: + print(name, avg_grad) + avg_grads.append(avg_grad) + layer_idx.append(idx) + return layer_idx, avg_grads + +layer_idx, avg_grads = get_param_grads() + + +plot_grads(layer_idx, avg_grads) + ###################################################################### # (work-in-progress) Conclusion # ----------------------------- # -# This table can be used as a cheat-sheet which summarizes the above -# discussions. The following scenarios are the only ones that are valid -# for PyTorch tensors. +# If you would like to learn more about how PyTorch’s autograd system +# works, please visit the `references <#references>`__ below. If you have +# any feedback for this tutorial (improvements, typo fixes, etc.) then +# please use the `PyTorch Forums `__ and/or +# the `issue tracker `__ to +# reach out. # -# ============ ================== ================ =================================== ============================= -# ``is_leaf`` ``requires_grad`` ``retains_grad`` ``require_grad()`` ``retain_grad()`` -# ============ ================== ================ =================================== ============================= -# True False False sets ``require_grad`` to True/False no-op -# True True False sets ``require_grad`` to True/False no-op -# False True False no-op sets ``retains_grad`` to True -# False True True no-op no-op -# ============ ================== ================ =================================== ============================= ###################################################################### # References # ---------- # -# https://docs.pytorch.org/tutorials/beginner/basics/autogradqs_tutorial -# -# https://docs.pytorch.org/docs/stable/notes/autograd.html#setting-requires-grad +# - `A Gentle Introduction to +# torch.autograd `__ +# - `Automatic Differentiation with +# torch.autograd `__ +# - `Autograd +# mechanics `__ # \ No newline at end of file From 2f5c5b7a4df8658aa63a9eba1cc2a95bf292658d Mon Sep 17 00:00:00 2001 From: Justin Silver Date: Sun, 15 Jun 2025 14:38:38 -0700 Subject: [PATCH 3/4] Add batchnorm example and add thumbnail Instead of using resnet as the example for visualization of the gradients, I decided to use a simple fully-connected network with and without batchnorm. It is a contrived model, but the importance is on illustration of the gradients, not so much on which model to apply it for. I also wanted the positive effect of batch normalization to be clearly shown, and this was not the case with PyTorch's base resnet model. --- .../visualizing_gradients_tutorial.png | Bin 0 -> 41537 bytes .../visualizing_gradients_tutorial.py | 333 ++++++++++-------- 2 files changed, 184 insertions(+), 149 deletions(-) create mode 100644 _static/img/thumbnails/cropped/visualizing_gradients_tutorial.png diff --git a/_static/img/thumbnails/cropped/visualizing_gradients_tutorial.png b/_static/img/thumbnails/cropped/visualizing_gradients_tutorial.png new file mode 100644 index 0000000000000000000000000000000000000000..6ff6d97f2e200d86705257ac22ca1a1c83993727 GIT binary patch literal 41537 zcmb@u2RxSj`#w%P4Gkouls&T}Qi>vEXGO@~GrOrl$g1ozvy$x0l98E^9VJ`JmQlas zqUZDZetzHY>;M1#N3U1i&vU!o*LA(ec^>C+9OwJKqQco7WHe+XBqTdz&Ye*vAz8L{h*sA6O6cvauth(uoB(bm$&(bCM|kh77!gPDyrKR54DZhp=~ zrjCxb4x&6fR{#10w~f6Ck1c5)yKK;xFlQi6k=;l4t2MXHKcQM2`2k zYJ{jQl}-Mrdzry~sL!YHtF(D+Vr+szr=)Kf7x%BMSDe8u*>&j^e1cq_{2bbP%^re! z{6}0VRf4;@gmsj3G|q&0?l+F^J=p)i-*P=)9m)LA>mustp*sF~x?R={4lxd@KC!G@ z7;f*9Y~P=gzJ8Y^{+rc@k&SqLc|Itf_|aQ#nV`e?#Fj!v86V;k<3ayNA1LHAZ(&`x zeto@vvMRfAeYjDui;s$;Vp#~AifPO9-R3#rKY!YmoiL<~O$lO@+Cq9#M~AMzDj-QM zRXx9;;LG5kw4&lJp3-H$Kg-hr>E&6kLpd(KGHp8S+m)e_c{AX|;=QVa*CK67S03Hp z%c8||jKQ3Bv-ajgw_g_f(F*ffwjZUVqjOmtNg8QM-iwR1w`+V#*RC>&@s!4eR}O)Fs&T( z4$eZ`-#j%WSOsph3ckV1&98DE4Z>e^)Y?IY7mDUTy9-#h z@7lL--$db$6ACdWtjyc;Z1lWVW-m6xNCe0xNG2##rug!TUY($05A_)yHua|$H#aY} z>dHObwVqDQ<>Atg(t|uaJYr&E`9DgQ7REA4<%Tl!O8uqdz64)5!F%AmjLfNYb(K8p zOV&MUUfub23rkD;mb4^QS@?nupV^UT*DtM=ZF=h5xpQIB7ZnvxYG_awyUiN>UjBud zCw*yLPxC4(Yrn8HozvJSqsC})4@{#@kxQVU#iu9HrLNP)^zP%lH*em2a{May#SC4e znc*fp(aV-L1zFix_xXwEs_c~k2Lm!PcuH61XbmeLFo=s6f8dHBKe0fPqg9VNJa_)Q z;pZY(v6Y$T@z2Gy*YiHR`DSMeaO)PCzV__@@1~)i_8A_Ts%27Wl$5sc1%=s>eoNjUHoW4Wh))RF5&K>seojDwi%X1p#<>iztEGz?cVf=}Pk9qXe#l*!!Pk1gq z@h@JUs`ZJ9i5Z!`cW+C=g_skvn7@$56H9VR6jB9lvnjF4$szc1ZMvjgYGK_IyJI(< zzi?r*553@UR~}DENlD_h^N+c?T8yzay!{JazYeE2F)|7a3X;TZD^Ymg+DyLg;lqbz z&raW^7O`ji{P}a@-1<%153#a7fA@q^N*{M9w$OKr)khMKH=>92V`gSXcg(hITqN#n zKqYp_Oo1Ka*YS=lrjk!lA4eQ5KNp1|+=L5S7>m;H+Eu1bSh#t(sciLE~8^PHDa2KPTbGqd3kKY!MTf<}oyk%%p-h0*2B|tzqp&gWmfZIwf;)K`V$$K3WZ48UR>gs%$aDxN2?nexTnN( zth%U*bsN36?YkavzuEu5@#>nIuYGTB%}n$}5c3ffa^Sdg-@t%Wl0sA(P2R3KNpt1f z&)*ak7h{F=RRZ8|NT2w!~^zZ1*HoH|=c>FQ< zB?H8v;n~IG{v9rUCef~UumGt#5)G^TjbkhX!Vh<`-Qx96h>A zN@=($ZZjrT?#a;`(?g9}hE+S==EgNgS308k>-{|P*VMo!$`5)KLPJWh6 zP*!Wtd4Msqb8z6860fMNj8#vqH{&#a$!>?nz>pBtVGm7d+6PCd@=lypqM+i@wfw|==+O1P zzRM*mbK1>ZhmJDxW7l%b3KAjb(~C>m-?n_fym0!@t4~Z!7-y<(@RKetyRrV)k86J{ zgbs&dDIuARw5IOU)zwYxFLs|F#I8-#E$(z&I-9QEoMm!>id*NNdTOW}g;E@r*DgVw z+DBZP1@=tkcgd3w@DeFaD5V&sT!^$cD4GiNqj?e!F7@&l~GB<_s^d5mttdMhw&Ud#WQ=5syu%G z8u~Ucz>6G~m0P*t8+J_5pWjP~{ho_6U-Ejr$~!v33Xu)`4fn*>yll-r%y8RN#B(v5 z&$|0qf|M_nkFT%q*U{0GY_n!**U5@~p{MWe49htnVjur?VnX+u6IONN%#U8Z$)7(J zJv=-@G7YQPul-rcTgR$*Z6!yuE61XZ9T`Y1GAb(c>C;0-J+GZ=u(Hob-ArTk2?_~` zFG5U`jg$7HID7VNMQ^WO0d6K_p!RV@Cw0=H49%>{@d7(LJMXXW>*`da-A36G)YG-3 z6mFG7C8#{4lv3JBckJnHZ*MjXf=@(5#K#Oh2_tMoDcwBXVmGpoKhOB%=KUMR5kg`H0 z*94DF{^i{H%BTaw`1gL*TdBphmnyH0%Ob+W*-ZR4+);6 z3V8hZqBk>}wY9a2tLuAVJEoxj^7;ALP<3tw?=0eG{|5*t$fh38O15$1M(j)9PKz8Z zpsecp`kV!kuMIM#j{~IR-n@BpDzR@HLz;9D1;_iwMivH!8%SopF>$P9zkmPM$+tb_ z_4DH4k@+bH2Ztkv4v`?mXx}}2`}rM4nap*?x)%V?X#DOh&W`ne`*x*?M*?pd8#7~G zn7FNvus@n{?_l$h^zu4!@r4etO&)P+%l2+%V2@;EQ-2r}6QG-sq!cHOEv~sNhF`@8 zxw*Ng)|c)fZZ9>J!{6VZNT4m(B)2F9eq(t>`JP8isptKC{;s#--&h{}?+CY@H%gab zuuko_`|uuKlNYhg9JxD_A7UjwQ%*)8cf0=`7*{jfR4L(|>h6+XgS6(YDMn*QZ|{ng z4rZ)SkfN7)+ICla|L+PtISr?KU-XuxGRX7xxH7(B&&adv;6qAfV`V*hpti2=T~kwF ziRV&yjvzBL(B?Cf#%M-H#=h_0cc_l@%;TAGMY%ttpVDiep1QR#6mzY{F-kMbcsCuL z4g+tG*QHR|3SXWQQ|ILm&rSmY5#jzz2HWjjg7+EOoLQ&N9q#u!c2ZL7MaSg3Y@Ny# z+cNh1vZY=t)pd1OdP_VL4UzQ9dV6DlOoAia`5yuI(Fj}1O%K-F+1tPE?d>%m^W9D( zaPRi*4SV+NX@6z34N*btXW4pn*Yqh{JG(Eb86{s^l2s_(dH_DjilcW)s!9dLtFDt$ zs&3$UIjm=FO`0W4ANQR0c%@;M5Z#d@7cH7*DJouRpGnuwV@A})poaP5AHTZ?y`Ch> zM@+TpT?;$#qb(z5By-Za5fGLd$r719u_*u#9v1yLDyklV?=IjnFu(Dysey#bf${MN zrKJ*BX&W|g=64!Z<<`kBLnxKAA~GESxpzbaZGE_4|M$FJ>D1PBcLJk2vP`Dud#^

#ZO$}2D`eemI=5K*=l5~kTm?{3$kCq9Hb{c~>3N^oCq0)Z zs}4GjecAztzHZ&RC!$U%9naM;r28ej#86VuoH%g;ktJ+#4i_1EQ8@9owKdfJNAY7U zZ?C2A!kxKRzKa8d^9N|94~CgU>wk=wSzhY>Bjh`Fi~K|%3K3%r zm?Kh`VmARpe)he2KqKfwgwd^UBB%!;NbE%w>EFxu|q1g^%b@!iGhJZb!{!bUwn7X`}bRIY;087 zDY3S^8_4O!o;=od+j{hYmj@QWnX_jfKZ&>O&Tk4CzG7sw8yK_FkGB5P(32CMuSe`I zUp^GfEN{@7qDD;C#fukFJK5UW9`!ZD{sK(Bi^{h-R%+YF=H`+1%(xCGzaNFJ(}N@r z4oXCeI1EzwWI7Brh)urRTQpfoi~2L+!>?;AV|s||_n6Kgi9)Ogagqo7`R|xDC)%OR1Qgy>)*m3D;OLl*0{5Oz+^3T> z?suy4nAxw@@zeddI5li1708&dCtuY3m=H@^i?dsCw1mIzw*kSb^Hxjs!-XTCvi+qp ztdbG4fnQowXaU( z2Sm@5-`Qc-nnLMTTv9EBG?utwO60=8f~)ehE2Bwx&k?kFIJHSR2V*6S$u ziGsUW6-0$MTFZUuHHGVU?WOw0#zsf&u}_BXbK`82D`X63!l?HK56>U^a&UN-CbGkg z{}h|~?FuqR>__&{npkaa48nxGMgNZhNo6bE4eDUr?@%(4|OTE~-;|`&+YL+)If18+4@TKCCi@Ek|;4v`k zbj3cspV$t2_U#qAiWtsQ|Uv3*4mm`O6{*^aC4pVF^j7L=9K*OrrW6Z1ZnS= zi1~F{(VK-;8o|sE6J^jPhbm|RJFOjHH89WZL1bj)hY?5h`#ZLmK5R7?1ZzS< zJP)&c_|H$;HcdGe7qxON-~XB(I`5Z^`yndzV3rH&8kR)Z`Sw0IO)IBn+y!5M|Ned6 z^R~q1McOlKf2r?XT!Ji-f9GniN19zq%Z82Phh#KgJF?xlaU(xJf7hNp%A+r5u~LcE zjV$gs{NaXtgiu(NUY_-V^_zFbTlc(1rrUWyRP~z^c4|JT4ZEvXt7>a~iL%IRvZM3q z+;5LLIg{n$dST1ydFL-#CZhb$J+HUw7Gl?;ctPD$`XAV0n! zFLP6<0K?qfdEhV;lQ-&YeD_Fm5_y359JP{?62M1vuh)`ab#=9U)hL1_(07c-)cuZ0 zgp>Q*_HqBj_wS;mt-bbVNzb?;Qs&H=+vA=`Zojm-*1HgQK4H_Pl4r~bdpc%VzF~*l zzjyEQU|kq$-|GrdqPwZ6)W<#lfMekGSg=JLSdC`n(NwebG37hP8r{@0>)!^Z70 zvI+`2xwNv&h@B%QAQ1B4!S-g=fv+>;9l`tbJOcI0?|c~>vrylnMIRU#xM9PFUAuOj zJa=vjSQ#T^-9)A6yYz1NP;K*hExVvv>&UU#haxbyW3|BAw1eghAj!|!*#VGy8!jUs zbbHSC5HyYBkIzxbDoLLwSwEl-sxuZK6)^p99jhS|@j}#T^c}EI^%GvhIx;WsU2i9r zdC9rQg~aHW1HY(Wm~jt{c+M)+lCCX0Fz{GU$n!<>NC*HX2ZAcstChVM#GY;6&-ZRz zQ*XENP?*#1+m}RAgH*6BYTMSWN{JU@yv}AOB_yz24|?=SeOO09!QXzoofpYA zNv^GB#IXkD2}P8`)w7xRUj=&clumhNfIav&G{iC1mT_@vdOCeq7_0wGp_OWZSMS`j z*t!|z5b||94mO^NIM_S)<-nzq_}*uEuQb0{00Mo26C0bG zn@P(B)cW7*OKYW5Nhy68n>AuLRkd#6q>kZWzdPgpYh>1qLh4j%Yj`@Z;nw~?5nX@& zY#BpQ;Ft30$LLLuVeyT#G24_#wKABWwn{eMf9@p8T7CA~<{uRwyut# zk~>R_nVFeVCs=rSGppyY+o?(?0Io>O*J*+mU^#Z|36ao|i~_J2KfE%kJscx^bwbCu zG5XT*0%A7mdj8|aI>AT4v*^@Dm|VFM@@uWGxP)Or+_CH}>9O3{^Xi_DPfFkO+f4Dj zR&k>K_Ely4$}>dJzxw!EpPhE|3~f8rt9KgwQTy!R3Ck>qNR z(?0E7OZ^HT%DSlIdDTN$L-m#vEaKu(pm4Am$|No9zYPxBe|fu+$kKLp1uM!G$`syM z=?Gitx%>QCq%V<$|bGe=}_BJ?`rysJ-^~FE_$W@|Ty5zKY&31cB z3DMc{sTS`vk2oeKzcOO06l7Mc9P+7QSkd(|&*{u|KJR+%=jZnh zQom$MyQD)$=d&G1o{tJ;{CvVy99{2q__&Bj6H5Ioqj$4z;&}FFX9MV^P9))9??(p$ ze0KF@Eg3_LL*>$`SnJA{kIzs?lfOsCOv&;yFT#FcvoJdrEm|JCOlDr$1lF? zZ2Ng9;!~BApNP5g@tZUdWDTJDG!o7pBI^B~j**=pMZx=4;gY!Ff<}_-`|oMhi83`W z^~>|^2gs0A4j~YOqB(rzhi=Nq6l1zqVN@pv(7vl8}lsv z@=Yp1>wf}EtUKy3DA(+tMWFJ6f&#h7V}ZCaM2|D7sv#XGxQG(m&sa{`eDoX{wezC` z5?&sGL#R8{hucw9?H6@4&1|C;G^YT~z&`5)wyg#Q57!PA)XL9AvI`zMzxmmIN5)5W zD;aVB-8sijlA7??&Sz>;2gTnz{>rLL2=K8jLysr(5)dKseoDxb@t)^Oaa+jA^PH%W zvc*)IEFE5c`M5nOzMY{pm)xh9_Dg{4u1hmo+*b`cUKzQ#xrK98hlYjSkBf`zu&%b{ z=LJ68j>l(YU?2rPCHY%}s(qQ%toe9_6$D+VtWo$0q+jjdKmPm>)Er);anF+HzcP_WY;#kS- zrSc(9=Fxk^9#d78-@cK0lNG8jNbHi>$L;QoFuj`3vm1Ih4<3w@sG$hD#c7tGAX zRWBf`AE~tQj?u#y2qOgY=+4jVXtBEv!p-4F@jO^5S+Gg2Ah^H{2}JRjw;UD|>sDp$ z0jCc|q!E>qe1_hh3l}adudJATcuERZ&-mTF-2~z6_!~)h`@s{DNL_uRT*3Pr8N9|qR?Q#V|g=T>l`l>8EA7&U>}ClwTwDv5HZlA3oPI3SPm3<*bnexgTgzT3e&x|d)w zxwPJ)q>vkH{=X?K<<-@x^!4?j)7-+?1w}^I{aNY#!wU#NtXAKz1fBzT{uM%s304V} zc-8RKKrO1Nz=scaHD_XVy>=XVOKVef1LIfvdyxZD1804Na1us_Q@7{|BGyNUVOVbK zuY)#51sRLDJoCNlF{p*F0|ON?*M6Hhb8v}@hC{fEjf(>_DS#s4$gyMXoYs)CKD&)^ z;kV1dDB4}+S$0~+orE3LUxzIkd+pC};!c|4&Njc)Kdo|j>z(416AOLo@$|QE-CEC~ zp4JD2WO=U3=8Uv7k%sB7E!#Cji=R(bPltvm(GG~yC_YbzR4zQWkKxRYhvst1R~V(* z@1y()^9nP*a>e#%->Ef}7+`jr39t;PF-z~dw1NV`W5Epg-cvJ zfx!7S;jwNkikUNK&iovX3*fu<+at>v_3N$8 ze1PA5IeU9PlB$4%Nk~z~aT~Gj$x;99Wl^B$TzP$1E?O*%VC9-ej@ftXh$$*6k}TBioj@MJ?k{{-%+{G>aaYf8?u6?k{?}>%jDmt+J(gha79_V>SJPzc_H1 zHpOn-K`X?FU4hBlO+!O=l2CRa&SPyH#=D3wc{**SE01$!6ZotqOt$7|`Ppmx)kjg> zSX@~60KQ_zP29`NYhhu*7Iz47QU1^Gm0y@ujUpFbV(*~3$}cRO?zG4VjET|v>U8PS zrSqQOU(HnTH;R=b_PNgYT&)$)N_ws>B~@XYq<4hjjNoOKS=K{&?&HmK0o%9U=RHMQ zUgc#&DL$684!Ab}0Y4LYG%LC4ukc_9j!WwED6hS}y<}2z=r1Q^y4v1re-LvXjkIIq z-`7eP>S3P5L^CkFanwy}w)<8cNapHUCh#gSIM~o_g`gV=u?rieDNU1KAzDmxbPPmA zAXGKgc1{{d#?Wwnjb}B=c^63I1_mGj3LKw9sYlg0puL5G(|EJ{9JNf4!Ch6iDA$_? zSL9S@29}sCi46|oMgaxt6&e}REjxA$OgBofNJx~vV`Msd^db0&T+0q zwy;6bss>y5M8HhBK=1q(rShKF40Aho05>nJXU7gys7#CpL{#s*U^)N+Aqm_=?BitID#CNIe)&qwzhU$ z2b36eC;_WZ3OF!)Gm_iJWG-9)Wl@{vqNMQ{)mZ4f`+@DVXCj2G2paTiWZBl*RaifA zRq6(L#7S$K2VEPzzNby`F|F(@4qZM&MMyQL=G0E#T&I{6W@UJ4O?sl#aCzASrH~Q3C1fO?;{@5?z`SOC z3HyE;aXNO!?VPxU3#W|ita0~^JkE$L$TuJnUc7ig#UvPOaIW;R9!Nvk9xJUaN>W!C zuM5$t(mYq2lfROVC*e>^Rt1Zon4v4~J8#ZEL($LPDogmU<&SjyG`i^Up^f z_~y5oZF0_jp0ILe)hX5WvOHGv@3%SUngj%{e%l#&6FQm9xG?cUYd$JKfK{pRY{WLR zecJ<=)&#Bjw8w__OJ#S7#VM)a0qGl0y6_$ zb`ut)sN--Mq?fve4DCFBNQ%lZ@t|e_tYx3m@`<$tK?^vd0Xbk}5iM~mK1cmy^OtT~ za7Elvrifr+OTC!EeE9IqFn$yJzA{pxw1PVW$Wbb{7dQxc&ZO=MFJU5r9RrpZ*sks+ z6YvlQlCS0D5}dQM`+%!z8WMH3;_E}-Y6KYEjbpvMS*GT#_qP4VojD0m&&qnwsP+*& zVwFCW96pw%NR7bX@4z*hb>(vXD4O1h{cXG!D}WSHGCl>0V=9@0p+w{5@aHPDGZ9tv`D+jsBYZCv&C?b{lUROaKyBa))s zd=kz-CZdM<5?~srLAjWuq@?vvTg|aNjoiL}rOr@MYTNrL@ZYMc`}eEzHEb={UpTAG zgi=Q&tXyt}pv(l-<}O?`9d;5D5(b8bz8(s=YT)<1d-vAPbOL6?Ljn{7RY#Q*1E&*+ zac)Ns;Cg7Ap(8ox_fk@-J^SCTGd6$1WL|}~{n~`+);8hL&XU+GCMMb~4T&;7>2OHh z035al*7S|xx9Swg+8v45M7YY}3V@v{LZmU8Y1$5pZ$QlFiuOFOrB@*fmMT0hAHiWGfmNaehPB23bqdJ?YTlbz zQ%Av1kub|WISDd<8x`l}>W2)Vvwa}6WqSOwZx&QhQMn%wFobG_B=VTux}y)?b}#;L zh8md&o#m5PEfJf)_q<-pjC$o7M7R=P=oGv~%|y`2;KQn`&#Bm1LMAhxttX8EjrYoa zKo)FcLxfF<4B-nY^%94*ML4J9rT#6p_oOaU?^#Hnh&V838P}&o3NvFBw`Zv?MSE>` zei*;17ESh7?Q?zceDNWkpAUq&L547Vm|(Wl5~(Sq*i_t!VUSH-cZ5wyuTGu_Kth*? zwiVo1i!}9dZKp>y%MFiT+H-I%GMYy}*zm#lmhAeRh<4F%gEcQ`i$JAYNau~GnZZul zK5OAjsriZVT>Fo7`oCexHRa?#xu!+zqS0Eco2%9cHmKrvKe-mhjGHLSa*mZ7!X3F9 zwF0Tg7uVU^l4fkm^-nyrWR-@df4{$=W!mwXcC)By3p>YV*WkZ_ z){bkZVp+$wZqM_UG_H&{I!ft|FmSawa+Y;@hmmjMg>n$OUhrX;I6)N2+l|>Tq}B^3=tfz)P>y59rTvb%>KR2l!V-yT)+ zoQm@N+9)I*O%GJ|Xc~{sZ;?F0nx}mIcDByky99MxTkpT4O_6M}hne~JybZ|TSR3xum7$l*Dw8wvMes74r$nvT0>!18NlO$QS zQhaG)Jggx!SHXvKkXU>z8;o>zmg;j|B=P8ua#?zFNYhT8SX1gjZncuuRL34Y+DGBrl0gZ8NQ)@tnzm0cT&*D4ggRQ83flkaF{WI+WH zo9E@Dan)*hez6xl*)4-wQPIKo!$`7&16SQO8h)sDQW=gFgmy01h00Aixrs#`FxBX4 zt$9Ov;qO;+STv3MxrOAC>OPlk=j!NO8={m#KB{{93okwYS);1gj5xyu6(n+v{{7Cy z^SvwW=aeY2y2NwWyw6HeBeTL5%A6W|BzVOiTXbk)+_+Z6(&%*F|NY*qf9;l#&Tfr> zk8j)7?>p<46UXrv12`GeNhKfHLQ|z2(N!*+CB3%DTQxNwmtQ#gDb7WUi=aj=Q|z~9**LoNOJ5`IzeOG z^;Z&R)%b)2wHa+7SO&{lm%^%>Vd5-%nw2Pi&f7nGaW^Y;Jx5f1a7b(F#l5?CzX9nX zV%tXo-sUin^tW%{4tM>4EC>P%`IdSoz1TSymt$YPe4!Juf7imy!Qrc0>^Ax3?m;S7 zKbV>veoYw>o&ZGO1=ud`J$P^hz(Cy-$iqZ0tjk zBUNII@?5jfIei3aG=i}9PS)`^Dk>^ozjdp=kbq;P&&ZXzyh0P2zDz?uk^RS!5Yp_ZQsDe!xI2} z&^$CUa)&2gJr$0E&rKGz`~Mp_(4H-1AK9?;x^f}gM$rSqj!d}{ZXJqqA6`cnsu||Y zbPCBU;|~Z%J05ML|)|CCcWJiEqL z#gY$WTWkNOalA+y&AVrPt9K;XGu6}KuDvq&-I0v0G@ewIG3r=ZqRUuCXjGJyQX$PX zy(3UX;0)eHLGcb%mXDS2e}@ezPxN`y)z7P{Qox~G)|5H3@#>k1HS5``0}YQSIz^tp z!RwUxevco0d%B_(8qO@Wad$@wJaD-}VxCiDZnyu3bVwyIN z({3~O(0;}?;B-Nk_knfx(Xp`c9*dg&qNrHtnRl2joF3WLZ{GkuYv^l88zs$&YxxIg2r@e;E_2`SMnmIAG!f zI*}mIN*^IJf}uMD{=qD_@!swurl5?WG;X~7_V!lPtFJD3l+LHa23POlhQs7+$5zG^6Cz3X_Bf3^0@D2uor9*5;^iX zq)x1b-L&6EBG28jY))k!-T0$a3wG^vFM%Ek)=9x zWG%-C^{3MdAGA$ZGicr`vwxWK=cH|Hbdo2RCHq>~?NPn;PeJ$Gt43A8J&wMj!FqNr zMV*;dxf83|94-F0_)5+C=?oX5ZFjawz~3CkER}goMkFR&-nnF_$!0-$&u$Ke{8xYL zM}=1^3~h=glHU`VgaoPTbFoZM8D3+%u_DDtO!O4Lf2@n(29~@%5%hV@p~ilHGfi-d zwzCAcx1ETGd!!fSqScY`O{TB7$vE(8g{uDM8l;&u&~LIdS3hxoq<|!Q?TWk9ug+FV zS|^Nm7^a=wnl^UlZq}`wIQD(3R@Hl>k{P85%n9EDDcp5;_MZEjMyt<}SP4BBP%MI@d!?8#0Evf<*NzDOk^h508%a^7?7gPI@m)Fpqr0Sj2N3C&@ z3JvimGZbs3xKs6rnax>;(5P0Q`?QwWa86&}I^7*UR*9@+RjFk(Y=3d7c(+zSEcfrWr3wp? zE8i&l;+2}a+v0+5avc2oynQJ~g$EB7^ZI=J*tni$^OC~)@#CUcR+1W(8UhwyqQ&QQ z1-AWjo&6?r?e5}aYXD4@Jo!=2L^2tc>EE2~)Txv2_2y^(?ZA+1ORmQ+hDg>H#l0Ha ze~_iGm9tpWQJ;@5b2&c0V6r)BO8$2QUTY^EeEhO*C6oQt37@}kLG5DwqjKRjQ}Odr zWv;H3e0IuuNs%B5Kk3t8JfHQW|3xaUN%fo}kvCb_Z=uFb`|I^flB z!^9KC-BZrtLvhSZqN1{~CIzbE@_PQAjDJ zd^;x_77Y7F71YTJw1!B53n+k>sQ!0o>;LGn`L_M=b&!7lCnlS#U*Fw_vd4q;c}L>+ z!YzdRX%OU(M7;3CZxiK?u+{rm1wDLJJ8Q|c6KHbOm7=TRvxY}ul_}DN2WVDUQ*J}o z>9w1z|2GA)=`zG%f(u4_*G>3hsLcNh2|`K$0(c}02nHnl2}DGy>qtP9zrtajC9Gnw zNPY~_@C09(ZPoP%ILa52L~oP(9?TZIA5hl=sVv+{-&YN%N88vOf?k=ovU@F#u%I{1 zqlzawCZ_TC%2Jq+Rrtsgt@K1tD{!Y!{EB??g!=H|!*%}N-rku|-+lG2VjxX(w9vp| zBl-zl41}Q=e*$G>|7}j$p=X<}?yH`fvygM%ph!XL(gh9a#U3G8J5J*z?b8pRo8_&| z&q>lR?qwZZJj;D)^HaZ=yO%t^bNM~1lkve~z^cH=91GV!m7d8&cR^jWc;Sah(8c|OgT|8<+K1WMQzSE3IFI}r zL{RqpP}sP?J0@aN*$?*%u_`e0TEvb#J?SYSR2<`}zQiF6%e<51iZ?FgGUMIOxPNK3iMsA{;AVq@e6P(Jcevk7#Zq znmt-N0OGS2wBR!~6$qEiGKVAQ=lnd+lnB&$BXhlOK^TwP}3cvPu4*dY!o z=WF0udIkXj!p8z)8=J)Y|A?4@gnN@PEjTGe9y^5=kFXa+)!!bnQ7VgN4?oG4pU%(x z-CH|L66=nzq36TNdlL*#Zy;2E*I4Wa)*ybCj4`Y+r}+0jB)@beqDQ5{7m3?{b% zl)grZN5M#Va&q#!sw$$+D0_JQy8Z?BZfu>*%o^ z)v8)QUX>7f5%4jWEIq(Lb&zr6)2B}fUpnEKC7MQ{x)B~0c&m)v7c~rEVbm$G_ukKM z{P4+>bMW)R^OpFv9Z0TaG-CaU{|BZNG{|nGe)Q{NYOB~>yCE8FVCAbUg(r5(@h$?d zK5Zpq#Z5%UkI1}O0fa39679W!02Y)P#Bv%Lc@Lm?4tG{C_k+-J0LFNxxxwexqv z*kqfWkC;@>NDw!5;YIpbo;)iG597QiZ>)*$t z`>we;OY$ZWht9BZYVQ0~nI0{K(!Ev9#wrWD45rU3SO$rWYV4FS1w$^)l6+LNkH~!+ zIm0?synT(I(dD^QacU4vrKe7vB2qw$$^}BD!jfBnjFi4R4!6W$Z4%z0vOH0xR$xk1 z6Btj(L~!^MF55|{dxXCeWpE*M9}#D?mj@AuM=D)e|jat&#pdv=#T z<>A`sJjizWU~#H{yY3EOOZyo-v2h7~zNi^H|7$WsrJz0Z^q_?g&yKbp5fdwFcV-Vw zsScAMp7{C6i;XlVK3VM?jU6hZyYReID(kX-P;A?nuLmbF?6e>hLR1B`E5?+b(y2UL zeF{S(jUx#u4dbNS&MKey^=+>&&%$VG#-roZcmzp}ry*bS?!I0-?}CB;u^j3wiEeFs&QN-@X3wX>lsP>CD9F`)EX79hMm#I6FJfg z(ef;|1%zxCR5%pATfZY=LNkX8mvNU;|uL+T%Z8*C7A zXadm?X9(7M5Jn2)#hDRGn#k4JbNEj8^m^95{3WW6_!OSIHrT6>cW=NkAX()kdH~fU z<(?4YlRkFPPSlzrHmTo@)nq*zWDk${Bs`w*`H?nf!jr*|egY&Yy=QL-a`CHBLfv@N z2&Dp}F^QlpqY->HL>CD7;mD{cgw8}bPEdzW!bYlfM4A{h>QKI{q2*T2SJO`U$5PBj z`*rW%P%Gm5(bGRRRtv)5nClcHT#+OYSneP`skzt^bC>UDH{WkyJV$Lan>{x#8OOco ztf;2+V#g*@w5TxMzfX)zhisUa&Ltn?XOS{BXr=`PydGvZm`Wp}wDWECy*CgH+`X=E zMkfdTWZ0d26qNlh2CqIOtd&&sZo>?4b4XiSa)Ln~0{ww@Sq%N(_1`!6x8%99x4ABw zq*0cv#;r!@7{HzYjNR|R;y@uH8g0?Abp!1ocXl2y_oF7(5NQHced3kDz>w&>vPREk zl1FPI;|Wa}eVinHeSIgP?V(usD7jzpXImaP) z7Zw&K?_`4gf$%~#B*e$7>RcfP=jcV*rnF@G1R4rJU32BvSAR61n~9Ki&=@>8+om^! z_E7>l0<~zb%|aR15w?o)4u_6>lMAgGXK&auvcXCX7x&)laG(ZbI|Im>p>d*aoan<# zlTzv%Wy7K~o>P5H1iX-VG_;{P;2f+Uq~+-`ke4)>juP|RefT(~ee?E!F#!%o(ba;6 zljP>QA`X7OR5lfPAL%%KBzK)c=X$M4A`Zl|R)&e|?s)S){lkcgOxW-YnNxSv&uRM? z-}=(x>b$dvxd4d$bZ=GstKg-qr=pi4J@)7_wUHTZ-~E&)J%Op=h;(rCa1$*fXbVOc z*u&^(>$wZW_p2+`OjNa+iFm~E?P~zZMtvQI>S|6E6^f0avfc_wsrkdW=`H$-opsUX z>H^ya&MCw1l)jtDA`G$ya>_nWI^xKD=QkegF_fD1XdyH!iK+k9Kq12k{S_Z+P(k9cv6U3afVwB{J0U9ST~U9 zoLVO%iyoKzYUOCTBie-!SLyccdwiTsfq0N^&hYe}4Fdk&3Ky%eXsgDfLF|MP#!Uz- za7?@-w7L=x5o~^AI6Dd0YT5HT6i#~WBf7*u53=Q$e$og~E)EJo4k3;;Ago|7Umk7F z#IJvVSL?Iak`C;wcoAUziLzjJWM2u}W>4F+?o+2uMpf!2qx1t00{b z9k(c!Nc%n}oJWvQ(+R<-o{?97TSwo&$m%zm|8+n)UpIlBWBPkEs+uX-_?mE=&C<7U zb?Kz$OdO0r0_RvQOjD|vfrN=vFz^M5a{u-KUuqcPMQq-v?tsV{!S2VaI-Vi7W%ebA*Wx%%k=Dkn142fKa6phc};78HMKy+dc<0uXgrRe?H*Wm>x z3gMf?IR%9K4N~w{a`GXdy+k2!v;AnL&_{(suuoU7UWNRMCR4#2*S;H@Sy@>x1Md?4 z78rIW%hr)P7>x6w5<_+_P_(EO1HxbqMoLq zbY%%amEZKkA?6Fwa$u~8oHX2Bz<>S`C+YS$R@j#ekZ=h7)e&AG!d-{jEemxG3Fz2k zPNNjC$0VTNCEKzi2q#NiN0VFDm9tpdFGUbh-xeMm+BYl`<pAEI}x4Kf-JWBg}D}&hY^5 zaO@coK!Z47IjIusf2u0K<0sIXo2_M4@cGa82W`pE|AYRmgs8h%BO?GgntvuwTtbLp zeY(P%+KL-)6Fb!g$IQ(l|3x`_8?XEI>(_2tTJ3KRXi4(5v?-D|T-H#gMYAc<_J?Uh zKj0Z0_5p(i{MgB;iUTu_|0fIWkk!|t#r@yQtAUYu`lPEWWLoP1ciWa4O;Ff%@K zY^~S%9?=UupvHUJQY-xtj%wJno%(v5;cU3HapT{z5-Vrn`K+ z`;C02EpxPcr=b4NJ|Rk~j2wcNPSla9f$!{BH#tH$6SI-Z!Ja zzyFqW90MEM`*9a#p~w&IJM zBMusXX00{sgrgaJyN{tcEc5N3IPL!MSjT@Chf0H9ZG)1X8%gMvJIkyZ{p4#lJoUV# zr8YWdW|n5e9k~KCnkic1h$Cqb=Z4_ZCP9X5NXvb<2QE^_k&oVx%b)n8)q}8{;S3YF z8}M&k=Pmt(y7m&N)xbFsIq)Kxz~h@JRH@HAYo+$lJcp)OS1)n?5V5=Ja~!U(Q;6=H zuyB@DqG+aJYqeYCMFt_7kWf_+k;C$FKe}eJ!1MBLCdxPT1iiuO0JV^%i343UH8mg5 zi_=^u&U|2!*vl+;h>tG_#T(J@1crp*!%??v-agArSoDb;NC0PKd!ppSGwr3P-$}hE z3X~DQ{kLl0r>RC1E`K@2v&i8Hj$yN9g}AsyKe58Va1~LufCkuSMZu zIn2lRF+}y(!UEA4t8G(UfsQ|r8wuDK%k!mw5)d=~xyO)fy5D|M-C8ZvWgVwf!j#mA zv=3W^6jc$9#@M5$*Lyfx=`{u}LR!)~4@IbC6+l=G7%$)AXxRjVhDZ^BtfY1!eD?tC z;XDp$M7l{RaAF(~s*DOqMb42nD(RUBVg4QvLR3dfD}|`8qT*#OyIeR$(Kp@g>PURMd_1e|Y{-{MD}MKe#4CY% zPpf)lPRDgx3vGEZ6(S--_@Rjo_08n;0tb$}{5%AV*bgmpBe79nEX@8IOJHvEpufs_ zbKQ7Lx>S~V&gh(pItSQ;lEqODh^D7eq2rJ!ut8yvt(21#4iG;e!Eg~CDeui3#Om0x z3TMmSdt`sp*rBnr_j#Ql8zS5pDJf)yTEGNS)1KFY0BJ%wxG%j5sns3pm0F3b|SX-?xRdf~ua~N7?WbYG`IQRQy-q!v{|j91~;XZ2je}H|3ru_?VL6 z{90Qm42`~J<4_G zd>~8|WNha4Z@p$T53H;ZA>;>>ryWi^0wmIak9r@s&LMC|z?o~MTJ; z1qc=$>sgb7pu}R0gTus`kzlNF${6fuIntb~1Dwclz2(?y(QYogT15~}?l1wfJ+#8s z=tQ~!-82g)Y@nt{`WL$)f7i*)d++`IC+lfs*c`r$CvZ%GW zvUi)GmeW#JN;-b}?Af!wKUEg6NW_vQj#BHx!2`sp8fYfjdL8!sXe=0YQ`^;1z=Eln zyd8dVwP3%EDE*gn)7U2RuxewpNwsR?}`7Q{cLnEceQG|BH~mLF~tT@6ps zsN(JK?(UARpIM)KGDKi79sn5Zdn z>ek=2^;vat;j%sgpCdfBedtF(uPxD!khV&iDXoOQl15(v6&gp1 zW$0LSID`QbIYMlBSAsO1xHsv1VYgIP`ihv{hY$<7XEhwtg`Z3Xh;ssw z`d*@q$Zcj=U-T;a5%@O0belDYzC+j#H}9l-3MhkPO#&k$b*?P^Phwd2c+OCLL>20m zx8S4Ni`|8BIsx$;5fK*VS1yNN16*96Tt ztb@uf93rymI@)g^@#rbwbVihsDq-t2P-_yWA7E%VY}}ZM!#dD1ppj`H75E)lr4H;k zfz^p_ji{@ipCLnVYQEZV^g%4AR`xxR2-8H@Aj)T=mV)h~4%1Fbl$M0(Hq&&r2>o|N zdlQbDigx*WpRbAs%cwgL8MWBjMQ3P`-lfW7p^iTP*4qv+I@7He^)m59qiq?DaRDc4 zFjuvXe*a&qJ&@hDIL;A;BGI!9DT`>6Z903f2@=O)J>mc2FS4OumC(4Fm$>~WMJb)c z_4ohl{HHF~(q>>Kd9)sAx|s5iVu6V*3!zo-+a7CngiFFLZ9e z5T;phE1R-dm%NO?-9TWQ%CPL^0WX03b^tI*J{uw&-j*Bw-Rpg_sEFN|RUx%?4|4~JK#^?W6Yi}7=<@&CB4+KR~LP=>wML@b6 zL_k16S{gw@x;qpE1SF-AknR)^=>{p01_5d5l9GC_N9TX7wf9mD@Kp-ncG_Za$?;0%J84t^dE z47AOS1At4ifdvu@WHyo;$VPSd-Ay7J_MX)j8r~2@Uk^vZ83bU0pc^kUSJ#8WDNCnL z2&CGO=d!V}eIXQq&Kt5-!ntCErhpObM9|V>b@^qCl6XtINh}UP}bDx8S6G5TD&cOmzeH5fi>VFGE5wR&ECRagn8as+U zA2Trv=2_t3v?2e1+zM%d0Qe3U&`tCpV$+3N#^CehzbAz(-6j5S-*OPvwzjpUs!VmI zBZeiw{2`IQW$ob|$gH2k?rm6Vlkq6_KA0Jx(kTGJa3+W|z!N$%GoxpMJh;=)F)Hm9 zl7R|2NEwi703@=}WirSPwcYWL!e*Q$JV`Zq*3RY*wbU1iwF$&s31Y=IDBuGkMkhdP zJdFc#WbUBX-z}hOCYQ6J z+Um;})ZY4uLbXd*2q%h!E@EWf)%sdgDfWpLlYtC#(Q`EV(v6pgVIP4NrlBagcX@o-hcH^ z=0CBhIeRt_TGtX~hHW4AGSlA2-<_0IqJHU zbWAuk7d2R9g$w$xSma?kJhIr0`72^7@)=*2e;L1fSApa5Up3B%gnZ{T?RQNY@qhlm z)trXz1+O|&+5*a^s_n0msgcM+qn&ZD^{%wHdclB=ZHcmygZN*KQwiZ*!|r9@Htz6< z*$fRqwgA0<$_VrFZewn&K zZr18w1JVNn_TaPu*6-`A>!UO)sWJaZq8>S44~;c;(yX{nEneF4kBsb5Hn+v@r^A<~ z<^M^azR#Y@>rGmZZ$vLYWuy4ddPCumPUNXZLR_}8%}-wk!K zy;1Qg;+{>J3n)!FvR5p|M^+>LUZmSrecEE_-4`M+m~gUAEWcRW@R!Ihv9{a$OKnWK z_G$6-{A+nbn?tkT&=xygTgMHk)cZIX7k&jSg9S^1b%@Wi8 zf34&*+SSl0W*|_x+!|rXs2V?!*D7RQrwwQO%J5@$`gI{B0qCWcT+DRZ{~qO`pmzTj zgdvfH3@R)L6Zt>Jc__s61=b}9@?JwO4Ap@DP`^jHL2?S^S|p@NblaBdFGIL{UIzCY1aO{wgs2B(C8&xu8E|K);motL*f!&4&tRYUthmi6rdu@k1v z+zh97UmnfZK_4%#+H&k~68BC{OJ9VC|6i)4P_R9K8z>E0FBv7reshmc%t|(KN#4B|M#fw@IA=5ZjOVdJ+6l=gm73wo&bD92vqVRG;4UF zsGnU7Rg~^~ywY-V2-OTK1$fMb0hO6qgC>Z%xc(&?60fv#iZA_%>uR=_eqnhgR5lL9 zoO~Zoy*v?r^rh87g_C3=SmooyDcYAHnj2+>({?6|mp_K!AJjjh{7InOf6=@J(K&I| zP3T`nc(%Yph01>VAKg;rW{ub%-4dGVzv-4-=idl~*RSdXhlNI6Ha=J%xN)vpE9Oua z&wFgROD7_7X7WX-E#crK^Al92;MolR3BFs-W!fD1HPWLR%cY}oFqZu{y7Oz}WWrGc zhER@y69d`sTfjXqs*~)={{%%67?7)X5C@jSt?h^B!1ZHABU(wv${1}eOisQ1&@1R> zE+7g}PtXF!{Cy6md3dux8(=a1DF+1|jsKw}KRuaK?B1X87?OQ%(|3u9JrGzuHb?Xt zNXh%3=IEn+42UnfL1Ll$VFN0&W>T4|F(;j@{cFA&*F(C&Zp7y<&)7`CUxkfxhVfE6 zT{OLSk+7R@?7(#tF#YN}qc>gCDW|5#L~QqwNMQ;rs7>*gEJMj@ywgcU?aYI|&{# z95hkg&m7^Ct}@)YbzT=_?!acOZMTIGjKR(f^6x7UhK;PitOJB20+HA~mlNo|5{Ucq z`QQ!83CeYz@|1o|DEd0cZnZAgG>a*WM%;Ao>qzsJ@+C@xrxg+$11n}Ex`VpJe?o>8 zp7?OJ8E3*D8*BF~GVJMTljB6>b^D(`vHO}w_0bbBQSAfw^*%q7f3i_jQJ-$uvr2b4 zd+aJeUQD`cFF(@pwCxN{QF$Q$5^QT7E_8%TBQ89p=Q(;K4h z?{>=yQPcXNX7t9af6RM>UCf?33%g0D67oNmLR-7sSS~_5TJLb${9e{@CwSu5rz&>E zAF!lEt(W;{-9OjKTizVj?3 zB`ET4$pWUyPZKmWbWwj|rX2rnNqpz|HgC{lgxFiOABEV7Xx-26C>4zR+BKYzt9E#A z!sYWdntb11d?P$p32Ht(DL}kir_~+Xd3Cm@&>{YqX5&yhoy4aTTtifOmUjiP^ zz0h(nIC4?R=nXFsFi2=THc!NHeu0N~#W94HpAa05+Ef)48%% zJ86fcT3aMWc|iDaLzBMOy);@gKe0C7UG2A>(R=bQXEY~er}>)>_P4lLy$4;Hm2}ev zpNdi*|NcC^HF1WyyTO(aK9R`)NLJ+BkiV&G%_`gvPbf@vl%a|e>_2aW`FKh0o+#KH zwO6LDy*wXpAYCGUs(D3K&fAabJO9M0lA1#jQOn=!9qP%XZ8WFq+TO*GELr;bo@Y4& zQ?O%HGKpaS$wI{3ZMNH$&sBTt_YQsAo^5ysR*b$Fb^omQCvi}24wHEyurqJLwvF|Z z=&4_!gni3kw%#=YmZb3GvPV)(i7E9NQpufFm9Ku7Ki^*pxPd&eN@&IYO9DrO7T;_y z|NNH5#UL>i6tCE_VfL-?vEY3JX`7DV(aetJLOvH_gsyS@lTcT zDfD|c%Ij%KEaaNO?mdS2ly@XY&OsEqRQ!a|;Vp`QsFpUQG)J#Kc=qVxWWmtmCvV|| z2kiPW;m5}`oZ!R9MJ0h29QX}ioQd{LIf zhC(E_#M%ezTTDl3z?gWZp?hev)f~t| zIRAj~ri{6&rPNa86`fOJVg*}ch2fw`{VK)Y*1Dg+%cAHy%se`aUg@4xC9l|ub9H=S z(4ASX>ton#*TN?GCNIIkfcSZoZj=l->_)y1>)d2Mo%ud!2C1aM{K)!&>v)^ajHR${ zOgOpyJ%3@-v52|S@gJL{O&7dy-OS2g{m7p@*(KS^9v#?scs3-qM$g@9@(9x296U9X zDi`UFuGuAK2irYqqFr$KTAMkN4%n30KfMEa__mp2(`uq47iFqQW`*^G$h6nk7?!(r z`clWA+KT9Ak7@ao$FAhXAs(Nc(1AR+z_AX6apktMJh#L{8}7_-_N{%J>9)nH{;c5m z{3iP6jqZ$=>*3XfzN_Jyjc~f?Vx1pp?c<`(hI8ozKYoLAbR>qs}FzLRF?!L~Y11FxXS@?uQml3|aYl0Ismmoiu>i%NXF{D_I)8=w-Ldfr32EuZ(vQJ3Aki z?ixoWYt4j{N4q>a!K)@Kq4ZJb$u2Jc!YVA}eV|esT!n7BzA3ho(-IJey51cwWn{qkMU6@j_{g{Icnrb+b~d0+II%qXx5{4tQZ>L|Y1X zPTCGzIeshJ^w+JdF%h?^lDxI0`R zvWp8Q_K!5(FXqcW(+#B(t7>OdHbwR_vd>YGy$6w)u|>;xOO@yCOn!D37Va4i2tJmN zw!K)Hn0Yxc>54?Um$EA}a&YuKCi0-L=hObZkLK`Rx?xbhX*jj2FI~!9!_U6Wq;leY zcr{B7=_9Ghij)CtjKwn#uXj?haF?>~_u-T{>)uBA4P>LF@y+$(RHo(lK$miZ*`nQ^NTw`0)1$rG;C7l+uc7A z|1~91axf|UeHezuB&$HJsx|c2O*MG@uMQ#iYoswSAoiIj zdqP~9k`=B;^-Uf~GxKre9h{R6Qg5Mc+DIv=!f(U>=4_~QNU zZBX2NuS2#ryRJpwerv?@eA($5o!lQx9Yki-Jf=c#5OGs?=5w3>Q%k4wU)vsw(@<<)Uh|r-RDQHg_6i z;C&&yi#-(`JR1@TbfHwXmA0WHyLcyKetW1_66I8>6KEp8sX2&5N09^-c_-Cv{L@Pc zl^T_jSBzUGUX^vgwL1>MY-b4l9TAW*%uro+%5pa9*=Loz)=@<=FgZ2!OgV1&cSTy1 z24UQv-5o@yhr*ukqEgev&@JI2r(=5&AWztNYdWT9wGVz9bLZ)<9nowjX z%4^B;I~|)H#2Y_!kL`g) z@$}#UErhNu3yMVO)mo2t>84uWFIF^N;tIxKL}yVx`v(LbTUJ)+8h!@& zay}efkEKrS0x9IAm<-Sxpk7~H*Adz-S5+5e#{5i-OHSdRnLVJIp93AD-SU7xsGh^$ zy$dv}GaY8~#ii_?hj9X1&|@xwMybQbWDsbgL5d6Zm~)`L z3xvKukm(k||BehZKniU@(JfV&EX_&`P#-$oXJaz8G(S-vp7nXsWM~X|qS*1E8JVQg zF62}H7TmpSbd3+**-ctR9c=am3#fRj-l%bxF3~FJRfK>J*d1?@aKds2`>WD%XKHv%3Gbqx3j;?Gfon9MfZycVP^>bO!&VLk0)Lo~+LXZ}@r^ z$1^*U5FNN|gzX7fJJOIz8oRn{45#Xt>R|l}c)`(F5W|IMragDTE6GBz8#ZxBZIB2u z(skZQp4E&mnjWx^h`|Ib75%Jb>IfSVnz(e^ynv1X`eh8o<;$1ZZ&QQM0$2{;fH~Fg z4E{8jAos@KADK0HZ~HU&HKB!iEFB6YZ|KR!3IT)`QzUmVWl*K7Ms?Pne%Ymw&GFmD zaLG<=v82b&1rVce(T{$lSeo%hitqZ52)nQR0F@ncBtgMuCpE~B`18s zVoZre`YD|XNBdI`#5kxfk0M6<3Ho(Y^}*Vy{BGcZL*ere54@?jw>su)Z*R!R$jHs4 zcOcPze$?Fjpx=46cxLSTI!IWMseWBa!gVA6OJx%p#DrCs4V9FXe6;1BX5^iC{E7=u zHX2AXRnAhz@+Mtgnxc-xcRl;@I#Mt1p&WyonFR$uC8tCx>eV$zfdYo{2*9LfzU;!KZoI6yq7_cd7* z%09@fDxz_V|ExfsSH4jU_E$iWkg({Yf`cRZ#mnw6nARCB5N?XjT~cWyakY_FJWC7tgxAM|a4I9aSL*5{+seM^j=jp!|L>Psi&FK?{LY7l80BxB3oVgz@sisOV^s;)stCbXx&lAQt}RtaZ4Arq+0bn zM~Iz;(sbPcV^kQ%_$0cB{nR6J(|BTT$+kN?vy*|Sdrmh=s0srpDC(5qeG0Ec?Y(+@ z*(l*ZwYw3kC-{`%&zLgIrp?&@RAlWga0bN%z_CG3uZ0Zil+QKS7Q43^lOI)9!9|P7 zDdRik6CH@|$E3NKIu%&kt=`Z3^k4_F`M^k;Z1qH(7mqq!C^b8Ww*471Z$(2w2R6WW zXFIs4-iiJQS9PUc!KfVi_%p-cH*bDGVf_b`OaBNBVFpiL-aSymVAlgNqzlWG7MNqt zpWg!J7&RAH6et*qEvJNFswM7A>GYYhVeMHMv10&@YH}gB7*JCqy%Z4Rzly&k4Qf!N z`HPIl0uKL39HD&asEeAbsi{(1P>8R?xgUWP)@HnkN?+Jbq99y|+3D=NHlFnolIYK) zhxv(L7Lw)JPhL@@YRd*A=GgmMEU2@PeCk9DssfBF&MXE`R=$MDMYJz)(!uA?LLVH! zJ>Kwa!#Ib3Ym>(Z*&rh!VDJ(fEYg#1JCD_2MhJ*(UQE^2WOu_5SY(DFD25TG`mg1| zKp>%MYF_c22Vtr8?_V!K`vl63g(i;xz4#f?XP#JgE<#ftQQ~L({wkT!B5M9F$v$$_2;x2m#?w7 zq+Fx;3->h+zZI4-_t6$0Wi~h7?e#CN*5(%eWETqrt^B7#?o4ONZ*3L*pckZ9*UBb1 z%-3WBX$)wc-@*Kc4?d;;&^c{-OTv*YF!SALwLbShl@EYIK^XJk*zS$@)-W2$Ku^*> zP|P5xIk*2YtFta~{eD+0 z0sO^VV1X%C{jF~_C+{iiUw6~^b+k11=mO)I>?`f*Bi4zZ6W=Nnw4=?b8q4>w$u0&@ znU)Lp`V5$@>r{J#$n1_^*}}XBV;*Thjc1)ImyD<1m>Wd+8vX*|R-Me`*i#8(esvX> z-8Bx83JoMrn|9W^JxyyDaV>PYb6eE|KM19>iwTW3obC)iEjqlVxKVh#t7!H(Q`O06 zmbG@&9_QsVEwZh3nlf{RdLtzNYmZ=1Sw$O-*{!ZOBKgtvfjC^s6${yBe3Os<%~bk zj6~UGnMr$jJf-zk){shPxBnY7ZU?DJH?NOo3ff`X@E~aTJy(V|z_0x! z2lb3hNL7S`*Lu(?R>t}AOct{(Dj>NtNvG?8vR_Q@AW|Xt$cL26olJmZQqocO@B9Pz7ksRa{q{qIvaEFU85}= z;YkVD*XrVJb*qZbbE6Q9A2yiyI*!DHkR=&phuZJD)Vxbs&&KL`~FnWt^J%; z^`R#ZjNPjpu_k&6m+*}oXJWQ$0;C`&5%5&Sl!+28lni($Ebk~i)F(K9r$Fd|g3B(6 z*0&|Xg=3qy*UvZ~v3jJKiq&49z_#R$B~`yZN&1Zlvn+tIxPvhIc-g+l`sQ61<1-$P z4I{qD#9V`Kadq+pPTT7egEsl8%h2DKr!ls75enw(nC;Z#apa6w=ax{kpjwUesl~72n|B*gSH`Uk|GLsZgIf(zyuNMw-KgGpn%mG@(Or8Ln57I=6j>*p&TU;~ zf48y+WiWnn>dZcIpPPbKHMb2cVUAQw^{hHGl%ho z3ToyWD3o?ARaPJFJVUkan#&H0RQhNPBExp0!oS&GKit(eJl?-ssV-Qf@w>=bFN;o; z_1nKSe(=0o=I*Cn<=pV%THTyy>EXFV=F zB?2Eh)3a&y@+gPhniwmcT&%a6N<>l$56Vink~*&(JMoXpX*Z0DcCY%4ZLR&Z@Ud8X zQxbou%ddXq93CFq);#E!^T7SfzGs3_7q{#@$rQw;Cs z!Xr0@GHab(;^Wv{7*=&p|_x*fgm`ccg7ZV?-P z?4g!<>#UMQp_c@@0sD;o)1|6xkNe{@aZJQygnI+7s43ki9dyrg8M5pPsabE33+o%RP1QKw~~FN@8}LeBZFsHw$-6l27NT$(@oM-&r6zL%QS3c1|=^JPI;*n9ggRG0u`U1Q27EpBuoK$NZu`84+ zBS$l=QuG9e(r<(~zIdbkO4U=~p|oLQz8IU7Y_Gw{qUTlnM~0h9gcY(<9!9C>6~is3 zM2aR-GZbY~dpGxeR-8WbZ1&A2JSQj%c$YMj@`cZaE(lY2;)VLg40IUH;=acB1f^4# zuyr|qqJXd@^!>9exxR5x_b*!*O_TzD%<1xN6aG|fzMHzVqu!bHaOq`Cs(5YaN4@Ae zB!>y1c{4>^5Wk1v!d>ki^qu}r0=DGQ`wm2d~s#d&OvvtY0YV_;KFuOd#kU5 z`NOW!++(-RYlWvyp^x!h6x$}U6|^;=cvZFZDO+T(xCcA-$QY9@v_|VEK~vk${UjaL#J0hi_euL_qDDF%zC4*C5$dfp3~+~2S{ulVTYvl^ zA!}ZRcgnNzH|$yt8`2V#io>T(Q6tY$pSg3J;AP{d8bhCpFhRitck|AE%gXzjaPek2 zzo)F*7P-Xt3>S$v$8yBXgrYF&(_ZDLiIm@(XubdC1;@DXj~hx^Pm)Dd+ofMU-U~}Z z{X(n#^?0VSjJ(IaE{@3D@}Bina_%!v%2cvTU!a?jalA-{lGweH<|s4u1y}uP5KN9N zIPu^Jd$EG^E-o_UokVwpXuk7$VunJorP22Uii6?)1ZSs?Br|?%pLzbCZ9QY#+!}2g z7pAlQ38B-<7~gl^aUql&?M)5Xd3!F(!6|^keKUnke9GolZDWgljgULwJ@Xp-aVh&r z!{#_0`iSBK^dOqovZC??lj@!^b8iLWjy~_SCUZrSW)=xS@lWeZ`yd-UiFu=*S6>3} z)J-4{-~717j6C+PESV>>q2NF;9P3Ws2JI*QqH<*{Rek(^=k=8uP1(-$@^~7Zw?FA! zO9XF`rcESLdxl4Y=g_OE`PYCuG_XmfTQ(EmV%qs*U|L# z??xS~Q@JPnUb1k%>(>k`n(@7V zvq*%Ce=zh7iKG-0)l0AOJp~1R(kOpR@^e9-n_2`n7xnDiGfG%#-e3xZd>B1N<5)4} z=A^4w9ue!z-AS#CD!6^un$|JlY{&4VE68g~<_jJ5`%C*}Y5Gm-OCjNA- z3rZy%0$pX%WoS89moMWL`(H;1^p)MP6vlg<8Ms=iFzCd?Uo@9pLbuhK{ymst* z+u5##%KFOEE*8~;))KcPH5BFAcZjU=TV=iz&o#`8al;v1^<9lWMIDS60Mz|LBlry>+uyKD-kXyR&9Wde+Qi zB}4w=r{S_=&fkw2PTwa4C4c`SntEq*%hCBLSFmVBU}~Mu(m{yzK-mO)NjLT90|V%7 zjC4VZxcanzYPGf)_4KTKH|EG#(oHbIoIEz`V()8?g+g{!r0p@QO8LA$x2E$Wy0wi2 zlYZSq+Z1uX)wireV`I*khSa;EHp@}+@R*of<(H~D6qzOKcsRR`_w^FF$--G+UbUBA z@5v|HM4@~)=*A^qqq!Cdy+QdU0`X^SuVlK$tRf&a16^vD6ZM;Cj@&ugo;QZAU=gbf zxxTD8qgWdIE2&QH6vDvTR$ya6Q=~@obE23zw`5ev&o2|@i4FLI!$qH8$kX6@c2!x+ z%$HxiY+mpoi}RGZ$+*L3!dJZAVzK}C!dx_3^p|oce&uC4bKdLz&t7<`K zHDR8`*k{^ZIQ!!q_UG^9w_iAMf0D9xl80mmB1Vl>=kpIAb{arSMlddVdM`SQ4aQQS zhe=)oHCr*+*>z4gM-wWvNhVMgWvOH9OSIi#KLkWmc&r~RGtFrEPOKlD%O15hKc*mc z*%=BgM|uL4brhM9O4^wy<+hhIIJWKVd4?qSGuWA``}HO*DSS|j*=W!2EJgp7h!JL4 zpE&B=~IBX}bYT8I_U6OVl^UskCCm;(1nc*iY9IK-{`~EK~ z-yTh){>0+6^lHxMt1Fgx7#zvUbu86-y+i!Y_t(Cv2%^D{GNFFOSG*B)ktpRvH3ZZT)V~lXmu(;b)$6a3Z?j~ zfl@2$jUe&p6X2LakkOKb7;h( zCMCgi=XZJ7M%sLFX;nlEmsX6;b~bf7X)9*hS_{_*a(ntYX5}3hQgkX@+VAhlA>n+R zC}5+C4*MpKrK(y?{+<3M!rCBSRlWFj8vjRBdhv3@f=rD4Z_F3 z5KFc2^~A1fXxOkM>XBz8IW)wDM3d zR>N%2j~N>CUmVUcMd zjXgQi*L{wGLHOO(cf%;Z#&BU`V{)gf>cSrThR1%DxrV8rp9rQ__J=xc&z+k4{U@e9 z6z2*ex$-l&KZm_NFhLb!GA`bE;YKJYcHd@4SN#q>h2DcuV#<|`(X_TG!Mo)lQUPzq zTx#vdeoR&z>l0w0DG#q$&Bx(H7Y+^y$0cgqVjol2EExKruIi`meU+HLu)^gl>XH8G zXZvFA-Nu0=?d2hHe{)F>ORn_`^pgAnJvzKf8;M%k@`p!3&*wBh(1}(avguYPEYXwc zVE-U{CjIEUn}uL~+19{zkd&K=v&M(ePN!IF+U8s057z8!mG8W3=$5*~O?%sAYWVk& z_Apu3rB1?poakIr>&nxu02QOK5zWD&#=9{K+?6@`=dJR)lM3^s+YT?c=ZO^zWaV;d zsr7$~PFt?X*nKa!>?(Ehk-xv=-DEqHqa&0Gf0;lSr+)ZNHrAdBK6=8Rql1?OtIAL1 z#&ijuXe*k^s*}1H<0MwT{XP?zZ_#^rIZL!kGh1FuCF$(|GjTAQJ-2(?b1V_T$YkG@)Ht#+YJ8r!@ir&`QlX;lyHr@NWWc2SH zzgDj$hjtcaJ5o9v7hYk&o{jrO-lJsJ^sZ*`NxNSx7Pd?O%OP7oi(7XHjpElwIwowa zOnXIN)?gTB-A<`$y(NB=z~(x~>G~&ydm{Sh(HrwTPR}t2enmGPhj$)qD`f}|RBdYM z!wD>ti|btE+o-o|qJ24m@gw&zqj~Q5s)*+fwN-3(bTe&=5NqG25cdPFw^CRWS96o< zlDA$7x$FhmWK;Y+-!PE+#E~MaKbF$F6@8c~ZYJ-5@S;EW;|>oyb`~qPAH>)ZtHk`< z3y0$9=(PI3`?^W`>xg{j3l2)H@R$f`AFtG%jg-`;jt5!a61tk^+4!*0K>VcqdO6UTJ=s3KMadq`r148n(!=z%6bXijW_E; zZ=!Qrhf|#AR2?Q-^eLuDTrqd8ostC$>L>1DZN;nOE;3cCi;Y3e$+DOvc0t<1L&B3L zT4IO08hNG})$5<~0Xj2RiHZHdq1({Zlqz)sCbbL5ym-JF%BT5q%^EAzTE-{92yKvh4FfbM-B#*1cR5*_4i@^ z0`_-nqc$1S7;+0E`kA z7dMu63bQ*u44NQA*lb6|a0Ooj$u3W;ipYz)etet^VG3zG&l93V3=9yPEyD5w6h-Q% zPbAQ{Z38d_xZ-e7$N)!)U~+#jEn-hj=F17GC@Y@_Ke&>LO5@-zQ&rLm{xz|)%qPG6 za2wxyc+WIv*1z1Ue_8BUu@UUx#&6}uz@kfz$Afh+t@vZkNF?cLJ#)r9Mv5%v&$CbV z=RTaF!`%tjv~^wd~Oi!epQzyKnc zgw<`K2$K%x=AH+Z0LvW)X;GjyJDKZ}KYk7+JkfMz*n^6OE|PwRwhLC6U!A2b7y;Mq!@`=u!w{uT?%}s*;Wxp zWNPIW|Ki1FziLK0#U-2D$#&ICy6YGX>#aMj9bR7#P?jEcd4-lPO#HjN1Z~2ve_S?ap>#Z@+*7$$#b|usX+L~c@w2>Wg0ZZO;=yAD1gr1efGSfrmoHGswceiV zFsz_sWHc}Lc=00J*(`jl&}Q|A z;9?J|(20c+478WE9xo)OzO7xXF2Zinp0ygY&0DhXJK}M#CC?OWn=}ZtBMurAa3sNK&9TS5}rWsFO<2CVY}}*T(qUKldDj>Vcx#Ye&g=y4fcUXnmN{v zHm0e4E&|Dl29{fd9=Nxs?JSs%6VCw zUf%y8qNWxr?yRN;^;5z4iPrx9ov2+h%FZuee$3As$kTFg3}`OShhPM~li$+l{bdYMvb@0mEh%|~Z^$6;qG zbU?p?b#1#Y(1L7yA}!yXdb!MfZ*TA7<;!B)+KH82#vC_+o({IMZVO->8OT$y*e7ug z?C!2_0Y(uqdJHejc3!7k-g(-%Xg97sD(H z-=r1DcW5Xu<&&`LVVv$&)FDJqSjE9`_5gUe@dc|dRD(A1#+<0bIKQh!I{MtcnSyi6 zC7jKA<^h69K~PcBGBPk5Gyo6}v6#pxt-?_5xGp+AK2jLS?gYe|EpShRl^q3^eD2<` zb0|7Gy00c>$dE;PdU_V8P2JV8vQ7a>EEHJJXjoaVLerRCZlPSSCBSvRf$Zr{f^t5u z!_AxF0)6iYP{@J75VX=2AYAmPnE{O$O4U4^a5VB|*G z^~HD?H+NG?FZ@18YQmdu`Mi1a=9a${7Q85R?HvKU7Jlmv9lUl+>X8Dx_Aopq4Zvh! zw^*fa{ExpV_5J)P=_M}|Dk~?)q{4l9*JWT}AUP)oOFF$|Vo#=`)qxmuT#MYy(Hhno zPI7*-;B>}k;WmCbxw&Yl+S=Nil5kYd6X1VgR^8ByOYB#5Qn79}(jXqsQvoovKW9^` zS}le5gP%o)S88f$jTHjJQC~BlEwUjeyrYJUqIS)y}}<#N&^U_4$v#aUJLV z?LTKi?*Dkw9<~EPbt_Z&PVG#&gw;i4) zNCTPZIoow$ncQ}`%e4W3vNqtf_0_mK^6>KB;Nc+w<|PsTy?8?wlF+EA3!a{y@b}XQ zBN=9&jV_;<{Je07?%LKrfejE@nvihi+BGlOyELnva>-p*JeCh1GijR+;uHesHdvFfOJN2-z_ra`|VzJT} zU=4c;kO&ANe88*^NP=g;aerEAlRol64O`pm-c=xwz#WAkW>Eb#uaH$1CdsE|WCW0F zEh3N(aJlJjOxBRFJ%2MYJ@OIauxB6+asuCJF+7hj^+gW`pzHY=lqx7HS_66*#;eM$ zKH-amXiPL;Wfmr#az_VI2~&bGaHQI~^i7x=?q1qM5p#3KfPer{=$SIT>zoIsy|}38 zt2bfxOp%e1C=`$}!)S`#Vcb$ZzMR0bt%S_rQh;!SI0G=L zy|c3k&?jgpU?5Wfh%%&&%2RW$JrC28a(Z%G)zZq+W$l zbN68mBCtT3aoRG>M@!C229r0yBGinN-hTiRj$*@ZQdqra0fN#3f4%ulhPh#Kk`f4K zdVWU87nWC6_5r||=!Ylux-2luh5{f&*Z4Vd8*cer%+T2rKHfx!qhW^IWDO_>Fr(o< z3`qq&Q43CHKLm6aadF#Vk~$g+fGEwt6n+UzayF?Y5i0jzR{`_}Lwvmv0y->pF`TAE zfTSN?H-}{I9B?hreD1$0DParThCiHKTmlG`7XhvL2Eb1+lbH&D`Fei({cwh@wr0ey zkaDzZB6nj_QV3wcVeUB`@Eej3<}l*%K4|wCzrgsLV*3@9u$#-|5c_)r&KjacbQI`b ztoK&cfZxU<^@1i?DhvfUCji~tU}o;sG~^%+i;ngK0LE3CQgbhAYFGggS1V{RvEiOC z7AtXv1+fVpj}QpSW20d#CXC{~1ei;GuWvBRS1(Re+YX z0^=4X01X0D<$eClFz8D~25}|2uJgjHl;@;cA*1pEbLA!2d+tAfo`#@Z;VZsC#c6Sw zjZixnCm{SnADHk|+*IV8Ct1u@=8g7DX@F};!PmBd4 zm9CFN3X$NVJ8U~ z4=)h)1yJ~=0k{T}E%plJe|moRpX0;k5!RiRpHIk-annQ+c9bkJP|IEcx+jqId|~#y zw%e9C!W~4xJkaUok1e9C#x3s{n2Kpwft6&6f0t9LNfHRDC$0H%R2t#jwtqkJ=9<#t%OG@ez zEVBUh^!oYJ7*5yCyLT@FJdU%_6EH?-C?IWlKf2Qdf~&4^vLFeV^IShMK>&S9ms6>khax6fme*^qMaQQoaLR8h}8tU_BnGv^6R%Mrca#Swck2+HYa}D>4N6 zCK?(-%SDFKKa`V`w6>OQZ1VR)|LH zj1gtv=D1#1!n?c5EKfcK~~**l&xF~z+t8r7yV#N8w!Qc ztPpq?{4~@eUcr!u?-LW&C%^6CoVFed!EIVpQBh}bucf60ws0Z?2yGV@)$@srdfqnx zmAGqTerCoCl+|k0!`PCu# zs*(~$YTp}V5-&_rxDR)s_3829on2r#zlA}$5L^=SSkGVp7Orar#<;$w@;tr@@yXBr z%#aqCUhSZ<1r~smqN1-U2!?QB5uP-7@{rvuzB(F&uYu$6tbWMKx(Kl|N_V}FmE=kV zA=OpR5J6ZU+UOY=tXD@^154m`N(F!)MAQ&0+y?n(5bRO95Mw_s-x$g#YYigv15CH> z!RGYl))s4FJOC0WT~-(Y#c=^R*{^{+0J!f!fRx?1eY+*a!W6XAEWnh79h~OQoeOXQ zcs!1IT=v(^3rb;XT=lPSGO%_xfkHI7f5{3+mJ!j>G`zf{nwF3=fk;4Qfefh@)SN_%c-coSAPU?7duc?vtMj=TazE(!&j zVt-%(Q*&|>!sP&|d<7xxRkiR-Ues?WFs|BbgXXdk-W|EnDwy>F*=cDQKqBRVZC)^5 zHYuxgc8T)lHSx!fv6(bKy@aRk_+-N~+Rp3#gP9-5D=n} oe!)Mf0o+snV>0kxW)UaC_a?NfF-r8|_)#b+aoGn2_jSGgKW}2Dr2qf` literal 0 HcmV?d00001 diff --git a/advanced_source/visualizing_gradients_tutorial.py b/advanced_source/visualizing_gradients_tutorial.py index cd9f0474c5..50b6da0ad1 100644 --- a/advanced_source/visualizing_gradients_tutorial.py +++ b/advanced_source/visualizing_gradients_tutorial.py @@ -22,9 +22,10 @@ - Visualize gradients after backpropagation in a neural network We will start off with a simple network to understand how PyTorch -calculates and stores gradients, and then build on this knowledge to -visualize the gradient flow of a `ResNet -model `__. +calculates and stores gradients. Building on this knowledge, we will +then visualize the gradient flow of a more complicated model and see the +effect that `batch normalization `__ +has on the gradient distribution. Before starting, it is recommended to have a solid understanding of `tensors and how to manipulate @@ -46,8 +47,6 @@ # import torch -import torchvision -from torchvision.models import resnet18 import torch.nn as nn import torch.optim as optim import torch.nn.functional as F @@ -192,9 +191,6 @@ # 2. Locally disabling gradient computation with context managers (see # `here `__) # - - -###################################################################### # In summary, ``requires_grad`` tells autograd which tensors need to have # their gradients calculated for backpropagation to work. This is # different from which gradients have to be stored inside the tensor, @@ -337,204 +333,222 @@ ###################################################################### -# (work-in-progress) Real world example with ResNet -# ------------------------------------------------- +# Real world example with BatchNorm +# --------------------------------- # -# Let’s move on from the toy example above and study a realistic network: -# `ResNet `__. +# Let’s move on from the toy example above and study a more realistic +# network. We’ll be creating a network intended for the MNIST dataset, +# similar to the architecture described by the `batch normalization +# paper `__. # # To illustrate the importance of gradient visualization, we will -# instantiate two versions of ResNet: one without batch normalization -# (``BatchNorm``), and one with it. `Batch -# normalization `__ is an extremely +# instantiate one version of the network with batch normalization +# (BatchNorm), and one without it. Batch normalization is an extremely # effective technique to resolve the vanishing/exploding gradients issue, # and we will be verifying that experimentally. # -# We first initiate the models without ``BatchNorm`` following the -# `documentation `__. +# The model we will use has a specified number of repeating +# fully-connected layers which alternate between ``nn.Linear``, +# ``norm_layer``, and ``nn.Sigmoid``. If we apply batch normalization, +# then ``norm_layer`` will use +# `BatchNorm1d `__, +# otherwise it will use the identity transformation +# `Identity `__. +# + +def fc_layer(in_size, out_size, norm_layer): + """Return a stack of linear->norm->sigmoid layers""" + return nn.Sequential(nn.Linear(in_size, out_size), norm_layer(out_size), nn.Sigmoid()) + +class Net(nn.Module): + """Define a network that has num_layers of linear->norm->sigmoid transformations""" + def __init__(self, in_size=28*28, hidden_size=128, + out_size=10, num_layers=3, batchnorm=False): + super().__init__() + if batchnorm is False: + norm_layer = nn.Identity + else: + norm_layer = nn.BatchNorm1d + + layers = [] + layers.append(fc_layer(in_size, hidden_size, norm_layer)) + + for i in range(num_layers-1): + layers.append(fc_layer(hidden_size, hidden_size, norm_layer)) + + layers.append(nn.Linear(hidden_size, out_size)) + + self.layers = nn.Sequential(*layers) + + def forward(self, x): + x = torch.flatten(x, 1) + return self.layers(x) + + +###################################################################### +# Next we set up some dummy data, instantiate two versions of the model, +# and initialize the optimizers. # # set up dummy data -x = torch.randn(1, 3, 224, 224) -y = torch.randn(1, 1000) +x = torch.randn(10, 28, 28) +y = torch.randint(10, (10, )) # init model -# model = resnet18(norm_layer=nn.Identity) -model = resnet18() -model.train() -optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9) +model_bn = Net(batchnorm=True, num_layers=3) +model_nobn = Net(batchnorm=False, num_layers=3) + +model_bn.train() +model_nobn.train() + +optimizer_bn = optim.SGD(model_bn.parameters(), lr=0.01, momentum=0.9) +optimizer_nobn = optim.SGD(model_nobn.parameters(), lr=0.01, momentum=0.9) + + + +###################################################################### +# We can verify that batch normalization is only being applied to one of +# the models by probing one of the internal layers: +# + +print(model_bn.layers[0]) +print(model_nobn.layers[0]) ###################################################################### # Because we are using a ``nn.Module`` instead of individual tensors for -# our forward pass, we need another adopt our method to access the -# intermediate gradients. This is done by `registering a +# our forward pass, we need another method to access the intermediate +# gradients. This is done by `registering a # hook `__. # -# Note that using backward pass hooks to probe an intermediate nodes -# gradient is preferred over using ``retain_grad()``. It avoids the memory -# retention overhead if gradients aren’t needed after backpropagation. It -# also lets you modify and/or clamp gradients during the backward pass, so -# they don’t vanish or explode. +# .. warning:: +# +# Note that using backward pass hooks to probe an intermediate nodes gradient is preferred over using `retain_grad()`. +# It avoids the memory retention overhead if gradients aren't needed after backpropagation. +# It also lets you modify and/or clamp gradients during the backward pass, so they don't vanish or explode. +# However, if in-place operations are performed, you cannot use the backward pass hook +# since it wraps the forward pass with views instead of the actual tensors. For more information +# please refer to https://github.com/pytorch/pytorch/issues/61519. # # The following code defines our forward pass hook (notice the call to -# ``retain_grad()``) and also collects names of all parameters and layers. +# ``retain_grad()``) and also gathers descriptive names for the network’s +# layers. # -def hook_forward(module, args, output): - output.retain_grad() # store gradient in ouput tensors +def hook_forward_wrapper(module_name, outputs): + """Python function closure so we can pass args""" + def hook_forward(module, args, output): + """Hook for forward pass which retains gradients and saves intermediate tensors""" + output.retain_grad() + outputs.append((module_name, output)) + return hook_forward - # grads and layers are global variables - outputs.append((layers[module], output)) +def get_all_layers(model, hook_fn): + """Register forward pass hook to all outputs in model -def get_all_layers(layer, hook_fn): - """Returns dict where keys are children modules and values are layer names""" + Returns layers, a dict with keys as layer/module and values as layer/module names + e.g.: layers[nn.Conv2d] = layer1.0.conv1 + + Returns outputs, a list of tuples with module name and tensor output. e.g.: + outputs[0] == (layer1.0.conv1, tensor.Torch(...)) + + The layer name is passed to a forward hook which will eventually go into a tuple + """ layers = dict() + outputs = [] for name, layer in model.named_modules(): if any(layer.children()) is False: # skip Sequential and/or wrapper modules layers[layer] = name - layer.register_forward_hook(hook_fn) # hook_forward - return layers + layer.register_forward_hook(hook_forward_wrapper(name, outputs)) + return layers, outputs -def get_all_params(model): - """return list of all leaf tensors with requires_grad=True and which are not bias terms""" - params = [] - for name, param in model.named_parameters(): - if param.requires_grad and "bias" not in name: - params.append((name, param)) - return params - -# register hooks -layers = get_all_layers(model, hook_forward) - -# get parameter gradients -params = get_all_params(model) - - -###################################################################### -# Let’s check a few of the layers and parameters to make sure things are -# as expected: -# - -num_layers = 5 -print("<--------Params-------->") -for name, param in params[0:num_layers]: - print(name, param.shape) - -count = 0 -print("<--------Layers-------->") -for layer in layers.values(): - print(layer) - count += 1 - if count >= num_layers: - break +# register hooks +layers_bn, outputs_bn = get_all_layers(model_bn, hook_forward_wrapper) +layers_nobn, outputs_nobn = get_all_layers(model_nobn, hook_forward_wrapper) ###################################################################### -# Now let’s run a forward pass and verify our output tensor values were -# populated. +# Now let’s train the models for a few epochs: # -outputs = [] # list with layer name, output tensor tuple -optimizer.zero_grad() -y_pred = model(x) -loss = F.mse_loss(y_pred, y) +epochs = 10 -print("<--------Outputs-------->") -for name, output in outputs[0:num_layers]: - print(name, output.shape) +for epoch in range(epochs): + + # important to clear, because we append to + # outputs everytime we do a forward pass + outputs_bn.clear() + outputs_nobn.clear() + + optimizer_bn.zero_grad() + optimizer_nobn.zero_grad() + + y_pred_bn = model_bn(x) + y_pred_nobn = model_nobn(x) + + loss_bn = F.cross_entropy(y_pred_bn, y) + loss_nobn = F.cross_entropy(y_pred_nobn, y) + + loss_bn.backward() + loss_nobn.backward() + + optimizer_bn.step() + optimizer_nobn.step() ###################################################################### -# Everything looks good so far, so let’s call ``backward()``, populate the -# ``grad`` values for all intermediate tensors, and get the average -# gradient for each layer. +# After running the forward and backward pass, the ``grad`` values for all +# the intermediate tensors should be present in ``outputs_bn`` and +# ``outputs_nobn``. We reduce the gradient matrix to a single number (mean +# absolute value) so that we can compare the two models. # -loss.backward() - -def get_grads(): +def get_grads(outputs): layer_idx = [] avg_grads = [] - print("<--------Grads-------->") - for idx, (name, output) in enumerate(outputs[0:-2]): + for idx, (name, output) in enumerate(outputs): if output.grad is not None: avg_grad = output.grad.abs().mean() - if idx < num_layers: - print(name, avg_grad) avg_grads.append(avg_grad) layer_idx.append(idx) return layer_idx, avg_grads -layer_idx, avg_grads = get_grads() +layer_idx_bn, avg_grads_bn = get_grads(outputs_bn) +layer_idx_nobn, avg_grads_nobn = get_grads(outputs_nobn) ###################################################################### -# Now that we have all our gradients stored in ``grads``, we can plot them -# and see how the average gradient values change as a function of the -# network depth. +# Now that we have all our gradients stored in ``avg_grads``, we can plot +# them and see how the average gradient values change as a function of the +# network depth. We see that when we don’t have batch normalization, the +# gradient values in the intermediate layers fall to zero very quickly. +# The batch normalization model, however, maintains non-zero gradients in +# its intermediate layers. # -def plot_grads(layer_idx, avg_grads): - plt.plot(layer_idx, avg_grads) - plt.xlabel("Layer depth") - plt.ylabel("Average gradient") - plt.title("Gradient flow") - plt.grid(True) - -plot_grads(layer_idx, avg_grads) +fig, ax = plt.subplots() +ax.plot(layer_idx_bn, avg_grads_bn, label="With BatchNorm", marker="o") +ax.plot(layer_idx_nobn, avg_grads_nobn, label="Without BatchNorm", marker="x") +ax.set_xlabel("Layer depth") +ax.set_ylabel("Average gradient") +ax.set_title("Gradient flow") +ax.grid(True) +ax.legend() +plt.show() ###################################################################### -# Upon initialization, this is not very interesting. Let’s try running for -# several epochs, use gradient descent, and then see how the values -# change. +# Conclusion +# ---------- # - -epochs = 20 - -for epoch in range(epochs): - outputs = [] # list with layer name, output tensor tuple - optimizer.zero_grad() - y_pred = model(x) - loss = F.mse_loss(y_pred, y) - loss.backward() - optimizer.step() - -layer_idx, avg_grads = get_grads() -plot_grads(layer_idx, avg_grads) - - -###################################################################### -# Still not very interesting… surprised that the gradients don’t -# accumulate. Let’s check the leaf tensors… those tensors are probably -# just recreated whenever I rerun the forward pass, and thus they don’t -# accumulate. Let’s see if that’s the case with the parameters. -# - -def get_param_grads(): - layer_idx = [] - avg_grads = [] - print("<--------Params-------->") - for idx, (name, param) in enumerate(params): - if param.grad is not None: - avg_grad = param.grad.abs().mean() - if idx < num_layers: - print(name, avg_grad) - avg_grads.append(avg_grad) - layer_idx.append(idx) - return layer_idx, avg_grads - -layer_idx, avg_grads = get_param_grads() - - -plot_grads(layer_idx, avg_grads) - - -###################################################################### -# (work-in-progress) Conclusion -# ----------------------------- +# In this tutorial, we covered when and how PyTorch computes gradients for +# leaf and non-leaf tensors. By using ``retain_grad``, we can access the +# gradients of intermediate tensors within autograd’s computational graph. +# Building upon this, we then demonstrated how to visualize the gradient +# flow through a neural network wrapped in a ``nn.Module`` class. We +# qualitatively showed how batch normalization helps to alleviate the +# vanishing gradient issue which occurs with deep neural networks. # # If you would like to learn more about how PyTorch’s autograd system # works, please visit the `references <#references>`__ below. If you have @@ -545,6 +559,20 @@ def get_param_grads(): # +###################################################################### +# (Optional) Additional exercises +# ------------------------------- +# +# - Try increasing the number of layers (``num_layers``) in our model and +# see what effect this has on the gradient flow graph +# - How would you adapt the code to visualize average activations instead +# of average gradients? (*Hint: in the ``get_grads()`` function we have +# access to the raw tensor output*) +# - What are some other methods to deal with vanishing and exploding +# gradients? +# + + ###################################################################### # References # ---------- @@ -555,4 +583,11 @@ def get_param_grads(): # torch.autograd `__ # - `Autograd # mechanics `__ +# - `Batch Normalization: Accelerating Deep Network Training by Reducing +# Internal Covariate Shift `__ +# + + +###################################################################### +# # \ No newline at end of file From 5d44d2f98d7f302d8c4d1004c21b55dc0c9becf8 Mon Sep 17 00:00:00 2001 From: Justin Silver Date: Mon, 23 Jun 2025 10:36:27 -0700 Subject: [PATCH 4/4] Add suggestions, use register_hook, and clean up text/tone Used output.register_hook method as suggested by alban instead of the retain_grad method. Also addressed soulitzer's comments and fixed some other phrases to better align with a PyTorch tutorial tone. Increased the DPI of the static images to 150, as they were slightly blurry on my monitor. --- .../comp-graph-1.png | Bin 42318 -> 63226 bytes .../comp-graph-2.png | Bin 46658 -> 68304 bytes .../visualizing_gradients_tutorial.py | 237 +++++++++--------- 3 files changed, 114 insertions(+), 123 deletions(-) diff --git a/_static/img/visualizing_gradients_tutorial/comp-graph-1.png b/_static/img/visualizing_gradients_tutorial/comp-graph-1.png index 407f4aadd41c3c2ec8bde6055237b528dad751d3..1fa3d80d33907fe68ac4780f3abaf29e9bc12820 100644 GIT binary patch literal 63226 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 Pa$U5&>U-F`PMrTgvg3%R literal 42318 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[SXQyXqxST?S6=3KaIac$8*1mj6O+i&C znaVMU%ls3xGG;c7$-Nysi|=XK{)NgCu=&UYh&r8l9ULxjf4c>lrBXTAYR={!BvF(2y1`d! zAAAjwZY0xlk%vk%aOCqIE=Mr=B@8gNCQv&Z&+ejHSbSK@TR^KFEcKN{8;`+$4xZI) z@Bu^nDECiKyd`pMprkb67FME(%J&{JY%e~l-C=c+-VV~+UkY>OU?gb7k`>3M?omNu zGE9#6Xi?}nqyxdz<{zU2@Iz8W0y#``nx26O9_kS!@lM}%2M5)BgA(~8d`fA(r_sjK z0%LY1^*Mi7KeiWnufntf6hB@Jh^`dM;CS9e5U(iNFn+R7w@vI>1?%Cv_ukb)W_=-> zKYZJ9utcz-Gyh~y0ypU3%ua8zXYe*4aJ%P4Hynj8zaT~iS{%dZz5V<7c)Uw~ygxWd z57LU6NY01?j@;nm#>V{}JPgYS3tVLl#lKTaTiY42k2}Ixw8W|Gs);i}J3jzR0kO~$F#N{G3)^+PvAi$FkgECh77mG25Yz*ZbUVvMK8mP|W;CK1YA*f8}%NM~*;VLwr1DhhuTN5^5i9zVI_A zS=a|~^01uD$SH3fK^g(u3Nb=@;q{R9K|ES1C|TE&b{ZI25^@H)I~mjB>iR&*dmNlL zKHMEGi^R$VkN7E621K?C`Jk>HJ4D07|B~Wq_+e;}w+2?P`du=j0P&85@v7l>VVl%U)>O*usC|B*Sr%;XQ zAs8=T+~2%=d z_2nJc)LuobAN}T5jD~+8I!S1opqSG$B+_zJTS28nT1$bIgn^GdyL?}EZf?*nZZhAX z9Ms_oc+Yqg>`#{e@jFcv__5=V+lYbGgI3!-2vUpWZfnKIj(=%ciOUBpm=H@y3U?zF!hiCImh&e6msD{HG@YU@ufGZXk zF(54L<_~HDF7%;K_eYmZ==T~Itavw|zZUOnzW;$)@seXx7NG(2Q)*_5fzK%iq9)3& zJ$q=0dJe`joX|`W?8(zMS#H&uHRp12#4!p7Xe2t=r@Rrd$lM2T(y%!UBv#l60o6EL zs3^cTf^i^{JB*8?2QNyT7r?|4vvHz3#Jp6{X3+~9R!~!`55K9c-8<+96C&K$5m>ON zn-#ObDNqE1m(HRI>j_MY&5FDrMq0%H;WVfMK~puH$iyU^n3$nbf*u0tl2FcSh{|{h zS`;qsMXiciZKjBoBwImn$4!yRYz1?@ zoI?|VHlghf=@jUqPr~p}Vn;E@FLmZQ$RnWmqfiJvP88;pT@bRF!<^4MxH+v9p^Ye4 z<+>DU9Dks2e4Ash9edMEk@RsuIL^nk5{L5`;Gacd`nfemM;%;(fnMSXvT+oZZ45&x z1nCik8mke#yw4>Wg3A8fUMNmL7l4XsvK+kU(#ndx?r3W|MX(vn<>&}rW-B~T(hk8O zB_84o*xjeF%dMkGg;QS1pyKZ`*3klk=m`_H_0LU&%taAdQ|T#k zlsRofBM~`}NkcjD!u)zfebpnh?;+WE+9h%i9S*4VsVJa20B|g&e14a@c47M^Y-)6i z`Yv%j>$FBtf2|E2aCzdrGzu?RQs4mKLE`ekZG?|=Dd#W?A4?d~Mp9U%k8l(FF@$Ys zUde@QX1TvZ3D=?QN1BZxULz){a2Gc`DxJKH$TYDk2Zo^}42Ayv1IXt6W;!kxN(Azt zUOJ13HTgOcNM5xpR;7(>n8A4`sZ7r2TrF|Cmq30*rKAjx3MMZjF8+{m=sAcKx9-!_ z90Pq!=IOm+SkE)OO70i@o+kqs7(t4RVS)(-6l&TXJW(w55E!CCLH-4B71;g4yl zZ;Z^zAi)qogm@#mo4{U@PHW(|I4Y{ZU^H?vIV!>~UgxtX@H!kvfPM(b3|y@9WfWt* z|J&hPzkU^~o5+-b#!Hepx+qk7J3BFEoQOg&*ic$VM#@)#C@qoKMAvhRCU1dV#8L`C ze4vbf1tXU4$ky>ObVTq8#8B7RI0Pl+M?}USKJ!SH$o@h^#CfKl>i4O)mqO9g(~D)6 z<=K)UBY=&5!+`#G*Qa`pu!sl&%OI2_ldy1R5i<{E`53UX7mha8$VWMEkW?>y^RhEkJqy`Kci<@?SB=AfIKdEhfXBmoq>~eA z#Vmy>NTL9#$o8SeY^KKQ$wkZ00hW=n}P*O z4lt6lFu))gHI9BFmVo~XD@qi-A81Nl5B~&A+avbZs)Kv1y>~$5tcEJe1UfTjbXa3G^mewz;Cz*GeH4@ajljI}5T0|$dC_a8v55rx_OWX~FSQInF6B(+2> z3*RGbD)8k?@O;Rcg^@KKiCIPLJVG$yfgTZ$3Nbz+W;YrU1+dIf9ALMAb@iE>;_F`RJ%9LLxS| zwtlNcW<}a=k=cE(1(SEjb&ZsS#8YgL)hI3v-X2Xi7Hg1~;T>3lDFISh}(`wFQ~q!j+9IW+l&GXbAhr~V8F_{@*UOeWL< zVSR>k?#>ZTDs{O`BiXyLLrzzsNo^x+i`wSQ40pzETsQQ2*l0ISY~KS}#3^;Y(=jpo zlL{cv>Mj5B?_AU15g@F&?q2468H=+p7GP@i$g`gwYf%(gs7yfbQEH;(p`peR)qfRQ zyxX^L@A{gLE=M$1kSS0K9*)C~cLq0E@J4ZO-Kst4`J%n^Km!_OsR3965$r)qebvO? z#bq@Fb)@~x!Vu0W*phq9=Ax_7=c<&TGdRfYC>xvCunrhA*k3gKZ4C|tS;ma`K~5%>=1Ku=7M z3pLc$S(VRCuy5M3(t%=l zUqRbz78&FBvbp&hd6d{pK4=f{9TJFAzlJciFb|>mhguA$IfVX#mrtJt5m7Gks~p(< zs5YLGh)5rCwaIlzfvGpTH_=mJa z`_wy+;{w|c4YtJTrbIH-8w%DBBz@<-wQm1;8NbzsUvj;MnC(K3v=1UXOUMO=7K6rt z!*xRJV2t4t6ogmu@eqNNo;?e84fu0-PnZu8@*~AX25n_$w;cQn(X!(n!$rcLuUAx$VvJ#{ zzsz{qHdSs=f4Iot{tk)!5?>~Kc=7KK|2uIKz4&RN0alZf9zGF0q>G0`&X*ZwfC_9@ z^^&eVXaD`V?-(z$?fwtOYxV@25Nf{G?J`^U;AuEIB42up#F2mrFmNOG4=8Aj!13KP zz|{j~vHDMnN#DuX;rK=xp>2tJhlzOyu}H_+Ohi18E+PV!$Eoh&4Z1iH_BzZPCo_Xm ztRh&Z^n|igrl5Wn@{SgW>E7vQugDZHc_poMEpch;$B#kF?9xA{jU77t@R8J}0~wbF z&#`T9317(=rr|CcYml0|=>U`A`#)|x%8O0AL6cBtW?5i3_#or%>8jj3k%#vNSlULn zmC#z9QXE-WF*M8hX+OuOiX(HErbO*O?dA^V`r$k0$GF9!iPrMfg@8V=0hiXa$| zLHfMc#U=S0j2bae;i}Wff>z^(Dx#@kCfblwkWuz54fDgxD+n56k!)<}V9 zg_ua6I3asMHL2A-WR~S#lk3~e0Wu~D7UA93C2E<3LO+gWQ~X#pl$9m!WJxhCdyh^R zxd&`}CDtR7Ela+oAwFO;h9CEM)~e3T3T6o4*zH!akY}2iP33RrqwVU|z{@L3FoKIj z>T=JAj<<32yUVYyV0flMWEqT%x-_ern`Cj4k+GW}v4l@KU8<=n$LJ-IynV|0k5T>T zT3AGaiM!8v_U`$K37=+XsXQBoIzHyCu7L&ziIVP{r-=rE^nBynLrOw1su9}7RxyWI zGBO21t5ke-tnHEsjd=4+HRP?x-^^-gr!igAlH=NL_L5h7GUTG?ZQ4 zdDi{cP2OOME`!X40^Zg@R#gX%)QY;yf}y7Y`Q<^)QpfkW=$@9@O9c2tLG?X*^!g^1 zCHyqQG~z?{700NoWn$vyMJp~>(>$ENB0hc|cn@5*`<=2fGhKREkLPf!WPIKj`l!Yp zEg(}t$$8$LD?Y@bhU)q9T)FR{cH4jy>v$TvFUYPmw+`kxu3nwi#%_*r}(g zNLn7GR&WS69B)7iM8r;xqa9NwZzB_9p=3gI8FXEOp-VCh!_W+}5tIHfdOP_Q)+4D%u3f$*LeM_x>4r+KzX#x`hdrcmH;&bYSaYnuB{ z9V+yj$;XJ(Js4``kY}>v=+~P)JCLG2fZX))z%}1eb9C5sU*-`OeqqngI2H>_Tx~Cz zTf`GT_}sZWsi_(``Ks)4rX*G8$E)@8A%ED7E)81;2ldz+Hx7XZ)H5~xlI?fn6+hx# zV$;yA)~@n^a>}Uh4En!rwdS=AFWChh%}~BY+_o7{*V*HoI}d}2dgwRfQ~vBmh`MH6 zXC}Xm8Hd}00h4v`Cx@@mQ}^=n@-DGYWgfSr-IdIJ2mWMaEPpm~d@#Ai`3knxjO2u} zL@D*5`V|M>u&y8JnNr$TWc}>k|tN)1;#d~LZKDTC#v%JD&O=Ui;Jc*%n}Y&7a0Y3g_RzF|0VQ5G=g%9lv6cmG z#O1BJNelZ<49ON+ekl|@u(8Q88{^F^)&9%RPyxwZd+B*R89Glo?{U~+=1MU1*r=-~ zy-WHBB8#1|>qyBt?kmTvf`zMMZ=cdM5w5xs>Gj-;pNZ{^TyH}uZzDn=v^0YYIB@@all0TKokniA$lV++(_U@+<~g5y(& zN0f6%(I043allAKBcpW?)7&O&9uA*yLKY{oS!_h2G26DyL&*c~{#MBJNRQqZAKBKn zHgvR~h8bbJ%S;>BQA8Qii3}gAgz|DOXf~f9*DB5L>gWiE7;i_$YZm9S*Wn78OL-Fq z0=>l~1``zu~_c_i<&#>=`RO(`=Pq4w!uV!OY!krRg-jcO)}7W zxEFa)!#pI>4-vWRobm`9otl<*X>#(|)m2$Xhg<&yx4QV385w_+ns24_0;cd7?N&^o z!!y_*KJ`LUMn?F*lY|o&+JD$X#jAJVz<_57+)Vf|^q5#Y4Y%f9x_VWBqMX@O>=FQL zK|OPG5on&4?1JQA?)6kUS{_sO0eAB8Z9izoIMT2Bw7jV@=h4MgjGBLZT|5X%z%)Jb z)GR1E2I1$`Wu_(v58jIF+0um0;hPh~U%rg*@PDH(P>A0+o)~g$GI7c?6wnSt_UVR) zxnsWzf&oGvQ;A`4JuBt3M4`JOVGs>(WQ5$i2=PCOqXkRYG6C&416f+eD5FZ>a%;2X zlz&M#m=SsnrhNOoVvxl`E^d9~2!qs()nJE+avKH|={^{^nt0pBjE|Q#LP&f7qS!Nu zf(~wO)lj2lV{~2K#vNn%gH8HC&oG=V@VPBvQ?aT6&tP8B18Wan-q=v%b>~BBEc8E_ zN%HVi_FSrtKBdqCrt=J7BWfOui9ajzUWJ$UThryK-=pF~;;)M zk`?caEd&qh%V`SBwGuKjGuHr)Qo&Yl)kShKjgfj`U%$G(ytzYvSWrT9d}4x3S-6*x zu^;!ZxsB>zjfyTau>(nISeB;2yKZi74(c;~+2xE;+HB#$-chI1GBYD3FNL(zHYaP} zZ~TbicT+(N(z2Rv$lGvdu_TE(xd+@f?8W$Jt6R>;Jv82&WxN?_N}@&xhLbM-IV-C5 z+s0kVxJGlDbc+!Ze3*4@Vn)X5&_sk;kiGY>Yy^dfyOwp=Wtn8$d+@+e_E|EB4yOaBm$X$Z)lq8k%&&O&3%*ddYBNH=F?nzGLDQ zJTE}Pf!pR>a0JY-0iZk1&1GjQiS-B>t>aVN(Rb`?MEuR07a;8X(q7omS00DRWDG|R zd=inIKx^BXDG#2<8hRcARY6dt1BM=TB{DEL9!zqqaGP7-R`%RBcJ#3y++QFGI{vCR zqG0U1_k;5xcUQevd9M

o?%0V&df70^r7{#oWwn3o6=&aDT~earOX5*aFj3GBXI! zaW7bb`nI-BhWGcQ{a_QOie}h!VMdn`Or<}(>x5w*%Dg0k*XlAq~fNnBn~x?EEQ7 z`m*Wo&NEUsG?DVE;26m*hu(;)`^N-+UM7xf-8uo1?ag43Mr2RKXejprb^KPpck7g- z|NPCv0U7XWgrZ}7*^Ly`ASxq06-Cnib~y(Cv(G8HFz7nazDQmZ2yZdzeD9-2 zG0!##bDN~|(GVPhs{kq|lV7;W)h6c3l|8De!3|^2ShiEXL91CUmDBR&avpLbN(~s* zxi73EMFK$;OHpjdc!D{N5E6cI54q$;az7&@6VJ)499KNA8R082^!{(}dJ zmFn)yrro;C#uKv3Yzvzwg{IQAFvm|@iR@mb*Yu;H=HZ3L;CrF)0r+q=_^Ifc zeg(Dh-&sYTnRd0`_~)p$VVmkoqkx@x3i%2YGDjBHGiHSzRW=rcdjas}9-dt=#y(QW z&r5qKJxn`GX6hR zfq~R@S7y_UcRQ%5Ol*4pqer*HJ*?mOtPAhti^VUDc_tEFMCe zHhC6t7a>C!YaSiV>h13jt8-w^Fx&+A6p{IBZaHcRz%*pp6Z#5I8zL7aWc+_(?mV1J zHzDRN*){H4in&E^2aX{r(E548*OyOHveA73Z7M7n1zxAS!+-V>Ca0>SZn(COe}_kJ zh{fF3fq^K9?8vqz7y+i$5NRODjXAc(lWQI`my@9}1|GC55ErJ+EjyOF60W@O}#&F~YN29$96r2pkeDEx{e4F9=(V z(EUl2O^~-NU$Md}rv)nKbHsKILS`p5fDN=HC?`HY7cI|Kk}aihgduNL1=q{*LT|LGHhx2W95RI35-wJFOK}@m+0Y zXb$1?J-tg(qu1Kfl7bZPSMl#!@Wd`BTSV_IPX26Frl^BdGq>c!ReQdFbWPj^Np&R> z^$b$(XCg5Z6BWJfLlW<01L5z9c@rODK42(>a#Ht57I^`FYvl(pGPH{Hh5$ZyC2<8Z%_37a-~=9v=f(7vWO3Iq?gHLS3z)tY~1D(;{YvFJxk5Bkc;gvZOdVZaM&bDt?%;9%0o%7z}fiL#EO8C6ZzrdxRXsT;%rDasaK$avk?P0jS z?dafo(_|d?1ERqXqzfJgHc_EZHL7(#H?k_}^PLz=8O9(kMdh2WfDSf9Dk>}MuNdMT z!jL~Uey{qgv9Yw+83@7EQa4@&qW~_SaC3Hk+TG2KB#v?I+NIskRXRFbM+OGa4Ruvt z7MgJnAyykVFi7S(v%LZeifBhiDLqQ&l4o}~OKn6-gC1ueXLe*hDD-d5*A9d&hI{I* zIs&}3R=@U$)3vu6U0}hoq4FlJx7pc@;Ddm_2byR8JiLH-NhU5rOZRzXq#E1w$n>~l z|0bF}S$ zg9CoNMR@p%&x**>P7d8=#_`#eXB{IB%ndCi$8%6STvrGvgI51Jv}wt308my&9|Lt@ z4_fLz1%U&W7Bj)gCb-4|eU@RfP;u0-+&Sw{|IMK-w(#O9gFIJo1ev(bHq{=#*TU@+hKwxJ`NFevDmIdSnq_YSZ4Zv`e z999q_8l$gLnJX410`*o{vWb>AMl~!@JE2|Fa@%#ZSuV$Ff^7(DQ|!O#HkVx}Siy~g=FTqk|T-Fv8@H>hs4}SQY$hyQ=vx{qfbOm&vq8Bxpc3>9q z{L-+hL=q*-XK@1VhL(hY@L4U+PHHG!g)O7Y&_2^mNL1uUf866g-#-2NXjzgEHDGiU zexxOuOu}_iOK{{B7N!N9vRLy9S}MHOB2MkZ3I8(^{v^v4tJfFTb$!PB{XWn0IFI9af9}hlliotHmx4qhZIL-G zsYoKN6(x~YhizDgzt{^TW#ND8bmgQaNlV0kFLR@xkVyMUGLnBQ-v}OTy{W8Xv$!<6 z=l1P0o`J&b-EfS%Yy#uJ_U|d-ON{r`d zmw^}0YFrNSYTTh&)wGfPGpV4B)p6yG>jIRbtH^)Oq@@U5`M|}kZs%8i@$S@|*W zWalpOkFFJABP$0h=$4;eL;h=r<^S))j$W5!8E8nbk~~ftjL>>#Yts1UMT#Ez@P5xv zQiK+{Z?hxbWD*t*Ub(Q$aDj*sd%4m_blshupSf0j?HKQ?6LeY3`SV5Ppp)^BAMD{) z&2^ZdZDJ^s}`^a-W`6?*y3yCVc!e5L(`Z8NuS*389w&&%(diCnZuU`r0MQ0?Z zTCBVmXB+d``T6}{t;|o{8j4U>l|=1a%AGrP7ebyri)++z(aOrodUovEGl!|61j7*f z68lx;*>-Ini4iJi;@~)=<2)0&m0p-tMkC8I@)4a-)Iek60JqD`gC}(>3uCQCDNFf> z)>f@ed$^QavuzS8CWqS-Jv=sid97Y||KrNQ6|y?Ms_bt_h`+aG-|h?P&I=AKkt+xA zlD(IsVj`1zqCVrRF%KL5#(~?gITe6faEG%YA#TLWdHti|bO}fxn z^+HH3`h2LZt|0j&FZbgXzhqhU9yR<#TNT7}^4hml1spBy()-ma@ssTpEQb%vDMg=C zId|^SlP4=ne5v^L5Uax6W;r@KF0XqIt!(8`$Fci@c0+@MtmM0) z`u@4F*LBrjSCTF)f97g)`dMErvtK`$Rz6VlLu%#5|MzJjYk(q@hlht)vd*IOBPXNv zv#k4kOCIiHc~JaHBh7@3mGyK|Qqs8!a^R6NJ>R_<5in~xL8Eune(Z{&bPZp%aQMVP zqbX)p_WXIZ;kI1Ji4Ppg>ZQ*eua%2atrCs?@kLF?pQmIt%XuN&rnOpZ z>EflV`GZQkjNOAP3zdt=^Hn0q}aGoL0sH5CnrZaUX@d1ex&Fb7J71WvM23u=;Anw zOf52Ef?lYQomu3=Xbw-oJs&@Q>~GFU#KQ0lrtJHgq}Q+zedejI)=+o1%2ly+T21mr zz7!7Dp59DB;madso--=tGY}pg&VOU%60+7Q_pNlb{)g2l_w0!dm-dd+%rFzYIr+Mk z&+XnllOJV1$rm^fKPmwl zDp99dqffyCdyiZazx7VYoM9M~k}!NMS7mzeTUvZoN^<_v;v5zI)UPH*MaA*{_(YS@ z@5RI!51k3xFO!YgoE`5|GFm#`?x<8k{UuQ+|EuU#fpqeHh}#R~j;KFViC2~JHK-0r zz=Ev67}E*a)~{!9lxJH=(9YGUsi_&8nD|oee;9d<5C4?ztl!pM@NT7@AbehW-=hYVK@z*RJ){#- z^-a|+ra%#>dd4j(s?D77o8JKefhLDNM(Sb*4jiDO zwZHt=`mM^i+Jtt^RHFlWXYP9^1%7DI+e97+KQ(`DM=43k7)*xe{rd`aQD>1(4Tp3T-|HE_sX^o9Rgr%Tx5`XmbZBVkvg&GX z3nz7NPV$Y&Ypdjq*jFT|*XB=u-{iEkFxB6f7-~D*mVolwoEBP8ATCpjN+j!;>iG5T zW#5R@)T1&);A~2>=_=Xs&LCdaOeD^EjyfeJ<-v;=t^Yhi>(;GfKXfRnAbD=+-TBLx z@%8a>>vxlT_U>ix%ilFe$&9+W`$6$6eR)sSb2(o{C8bSQ0|Nu2aj$-dPpa6L8p>#3 z^koE{=WpEV##nROGHCwWrPF`fD!)6$usWbvS7Bsi-0W zf)2B=M1K}dr~ec3IW1m)8MIkgSv_IWzjCEaH;M8>U{FxZQ0u!r-&hVD_!}=li|=;> zxOLtTNQC8lNIgRMON_!nk;$)m6q`0FHNMfhR*r}WAMGmLqk))tgPf+GZ~pb|-#$J* zg4a7-F}G3pTdZm0n`gZGp7b{dlUC1}q4Kya&9xKR0B^)1S{;zOtw%ckPSAR%>Z_dZ z?4*@>J?!h~G4r;IIB%*khdv;m!jGHB&BZ3#ou*!(!l)R%>*%Q`ra{AsBsaaY&yLFA@+h`#Yi!A~ zdO=6d+%I!03iAoU^Zt(=bQ)~qROZEf|@TK)EK2ZwAf?VOlHXP=!ABG*!J zw-c!&S%%g02z+VVjRotT96GCrrG{bc{s&$t{6ByLVI%j28h+M(Kx_;gP~L`Y_Q6TAwZnVicp~CJ#v5 zR*F#DfY4BL&b#D4kgjjtX1M-3Ke>LN_}FZo|7&n%s;0#-FUp^XU6yWcp%bic;vt`N zWYeF5O>2OHEqm^qYI~kjcUPC5R>+GN*IEs+#E2Dznu8TPiBz z>n;53ywbhQyGkDRx4z5R%WuL&6rQV1in|V-`JCr8$8N2CRm3d)5f3601psUNF%pr< zm$*oG2ImXEd#aRFRaIl{_a3_%Qxh&dFxZqrwbxKT$;Od6X@a)da)EqrnH*gtUoWO7 zK0XSA$583-`CPeu=T24Kd9iC-8APwXxtOJkGJA>XDSCr_dR{bQ&N)6;?ro(r0V2~! zFdH1Z`t=feHNbIWJuE7tYkb_?)#C$=)u(v@$N5p}duk))3~(D!*P7F#@HHvlk5yHi zen9u4QoaHX<3?dNfPKf2Etnta0g89;4d?87;OWWhTlrc&r4pF`jIC|Dfc4MEeKq0k zK39Mhl;&mF{yz0cQ@!LyPbJO4kK@Db?X&`xAFdc0KHtT1E(idOM&=MJYgtQ8{qgb1CMwZuH0=q;JlP$;Sw6b9FvCi*(#dx)HV7;zOf_$zJs}TxlIm=Z zD&WOKz)5TCR3_ufAfB=DagMj`0E5gjhgDyH#vL)q#H%LwGCiafNR}5nFEZh0QXiwh zrpJ2LLhoXdu3JR1cXf63d0)!iyQ3JKr{8BMBqk<$@ia`NCzo0r?h~G!nPK}6$R&K_ z4{`}$s|L94?o^nk)dC#lE%`bQD9c8yOdH3@G-m%_w9T`>$>G{j9(S=bMLor!_>GX| z4-ckTluNgUndxbir=PPE1F|wQK1@!(tBx0^t0!pi&&w$-de1=&o zCCX9M+2?Uqy`LQVA_G%hmKG_xQpQ!~#f3Qp7Oz&$jT#N>&0DtyFwy9h z`<0^aMNh@We_r2V?pH<{`q}|I%~G|UnxB#q8n-RSkL%%hOSfvBHs%Y#1f~f(-P_PR zKl9sHxo4yK*zeyJ{z*A=t%~2MD+EP>{C>5*Q(M24_HzYyK8KzcBO~MZ&v5TJyWuwd zy!g+m`ZO*wdYiXxQ`6QC+0Cgzbfz)3zrInGcMT0`4`w6ScH48v&E^njxLmJ#)W4Uu zd7ziP96Qdbc2k5hXYt>eUWPu(_RG-6)s-Yu+gBI8Da}7LG;w@C>Ckrlf0h?VK3~o0h&m;2vL?YLC~+cm9@pGoz|FXH9tZ>HEd>MI0TU2Gd5m&^jHRt2}}&!6RGYA1g+Ke))Sd-tIS#kx-J zoe8C$YKhufM$MU-C%U`4shZUu?B-;WL4D?a>j-Rite5MsX6YVk>X@LQpw-PScI{5U z6Hg*6_plzeY$<<*6zUsMUthnv;`i8?bw|Of=VMn}v(rB4zT#^eH6ECj)vXXnpO_`D znd|y?%AHmpJa#-ga``r>6M`~`jErPsVUdnL_o9}_gfuj<%yI!`&CQy=M}gFkf6mLu z$UGBu%I4+ewVoN%FD@=NMlLeJFeW)Y+{-WPd(>sokxsx;Qe9pBTaunTj>|r8l%89{ zA_F|v05s_T^l5BxFs;)}cc8RMZlI-fzM{0l)FcE8fLt8_ZXUiZrUBxS>&!cm4LOEWDhiN zj@o|Z5v_o(h_~;VcecOSj}A4bnYDiF8K?^wJtZx@r^y)*h9}Cg_iI3?ck|ic6E&xK zaUsVT$St-j`;`~ZdGv#|vsbsYv@prg(9obM^>5XBIx{yn0HC2}X7)xHJR)81qf1^s zMA>Y7lfd9IU(;l9$#4bw6c!cn+YMbbEF~{0*2J$u{R(y`9-+Ch9cocGn!yq$8VZq_ zA5YGmUP~^gep}qmQ<{GNaNpD0TTN9pfa_xBODuT=+&NT*?hqb&^5?GKeV05!)IN}O zeYl`NCeU|Uw{G1!cTOb@P1wo&g@re|+Gi_0P`-_^*AdZ`wh= zC|BK9f9~{)pzl=QTiK#Mdzdc zAsJm5E9FhkdHneC0T#fKCZDUjckNQTv>Bx;Eaf11>{=#R9SdVIZfts9L!cOB2M+Gv z|5E&Na%%Ozy;xm)bi3&X>Dz7WNq+A&mz%D zs%K>J*G-~^Fv$R_C8hJD(H^kuz_y_j~<(q0X5o;9|b9=S|p zO}@*8YYu+AnD5+5tyhVh_>hUu`lq~Ae?6PkuW$S*my6aZy|cXrvSXhWSfkayCj072 zPxB%Jan|=f^qAvHDTA;|Y-bIe<7o1p}t1FJJDr!aXorA%Ne0<*^=UsJeUa z-m@nx=bu$pp84JL+hC-2deHngbhDfbe!E*#EkQ${i3UUz20-i5Qt^X5`(zFsJ(^lDR!b3zxjn?km-0Cq z<8kn#Vxnkmm|HPbn}|jUK=m8y*jmtMvv&We*QF)sSV=M`_b2@ zekmV4l&mlKkucB*{;}M^TwsF--1cb8qX7Y9aM>wXh=)hP*Lw8(spqAiG51KoR2LfJ zR1VA3#wtZq=s%8l`}W8J?xCR@8JoA{LSr*}Diz-dpM%o7HKyv7&c}kkh)h>#$r_oO z!esgT8UFknHa5cQ9Fl-|q|v)Nd-v{LKf%23Uw>!6?VkTOH%kbFBvR&cqGLd5_SCY& zf|F51>e!UV&mJjcAl zEV@eE0zgR1DBiO3msOOMyqj$^5ET?ejk2KpLddQ`jypGEVQ#9qWtf|Q#lD`RA-Mb} ziHYX1*C_3{%B@;tmjUGu9;=9qc4tlWb%9sf2MPmzn+^}`TfWc^GXhNJ=M=p?aZt*O z^~lERglceW%(0bEy6?KXALiyh5A;?G=|CC9nL6TWL>Rnwmegar0*7GiT1+(w}Oz3oR@xWQuKB zTdwJS1sYEF=WH?v_K(++=@v9&?rzGqF}=U`lyrVqT}Y!FXK#jZRnUDm3nQb9xGnWd#AdRexr5D`uARvO7y?&sv@Cd^s?`ljML{*fh=6CDUZ@k48F93$C;1GbL;pmi4T)p_eL9f>yF^Fj|%uXmNDlQ+x z%WJb%o})VSIt?&#U>7b7<#Y>}o$Ahl5(0YeHO>};wAKAd&wMhEtK8w=4J@_o3#L5k z6}rKw6(nK8fXmFrty{U$a}fZ~p#%_`ToA~PAk?j=my7N_jfjYlXg1K-e~PxE4pd{; zuV2?dt>^-M8EWO*45-$HOK(%kFw-LXR!t$ zxk{sBZJo)T2=au``v;)|lK3uyk?aPt@+FE6w? z_IE;lh13VRxw%1%YlXFjIXnA$=k4#`zaNDdhyFR>X2}im z>U$aY`#PlS5MUQp2oy?DXKIiltruo(h-7o}-sT!4n-8Xc09`VxW7`3`Hsi+ zz^{$Z4kW7SvacM>tWBCf1`5wiTNk+$IA?*q5 z7Q{>0>*S_T@J^2gw~7nA5OZm3+ChGU{R3d>t-scnqwyec>wEl6^t=Ng=dS+)b3#$& zL#Tn|U;a#l%o9o)8a5P2L+O<|y8Y1c6+rk;Pl+{FD8tj#I2o1KMgY4qyReW5+7pbiHCCcw)@{+c|q!u0FH{`%PPc(p_m zD5K@&<(9UzD@m$O$Z|L2ysMEqkBb27#lrHkSB)iQNp(+=E$qBI!T8{~+ zP9op@<2LN>LW9k*=(>jnIC?$(4RHbvetvn2K*@>uiyDiIiwz%dA}*O_K>xTMnvnTt z_LNgb_Vj6aXdJ6ouO`Yl2Ih;3l zPOrqPCZ$?5KGbotTD@5RPb4H+{W7_ARHe+};H0i7IFl}%Nt+TVJy zR=G!~(ee*?yUd59{!9#}RQH2a2d83VW1-mA6L(Nnb{gW+ zS#YTOpUAMBq%7&r>L_*Ulra#D0}vkMP)4E^Kpz5v`|)m$3-VF#)@J-?IrLI4IPiuy zTJZpoh(aY!jnvOjd#NZXBR+hPH2pg*Q`n}zz6Ko+GR#qkP+u3Q{dyRdrropchTmZL z2o^Hi{S#jFRr@`ku=q_w>~x_7}}EB;sv*r|{^UI zt;B?^5*7x*jz%yJGdcFhMk|L)JydL_{!iGH`9H(Y+-BYt_*u-`O#|Qy7Q(a2CpZ{< z;Mvf}j~^?R_I7rLef@fY-?&y%$Zn`USinlQl?4gOcf7@_no6TF?Bsfp@y{oTqz&#} z{s+j*sX+7(xAZZQzD(#R;tIwzy}P_=_@oewYa9N(pqx1%3n<<3 zz{In2?MrX)algz3U}Yv5AS`Z6Cm=L1IeyAj0m#c{K{X#?IWvJK_Xm_)XOIY|K@Ge*+pLLt5U!rqSWA%Rb?q<>edlwYq zjHL!m^N-Zwy&*TxK^Ww)ZPqMqX&(NT7yqMQy7zgqveYArR7DO zWGCPL{o=mX@D4}}5T^@1mBUe6TgxPaWWbd=g#PSUcb5I{s84Vrg$YwlfFSL+%b$Az zE}s8N*<;4i{W8D4r9EMKal+zN*+d4tT7H_=Dezgcv%{Omm_-`IpfpfS{o#e8WGO|> zMa=RXCi*1?P;C8>?V%2d^uKuaOyiRM3UX8m!O3@P8u_sg>c>hf-hGcC zOJy|j9PPtwbetyq(S1dL_cI;ocznGNR%=(Ow_3jQ zf}fusK|vlqc<^K(w~i`u&~C1aG032*F$@0euu#!(&O5bO>ex7HIy3H9MZd;3g<-8p9r7jk0VvhQVy(`*iNb7I$d;V>kJjIY92yYi_&N&)HGwj zUbg^nv|7i_T0TEHFWPr^1(uP9BvqnD*ksTfC_6glK$5Zsv>@1U&|!p02I|HOI@E>wT={s%kcvJL=!@)Ww#3CD9gqCDexQqz*x%sR2@y^$oc>B#=ANpqcZX z4F67Oa6H+!>TP^Ud<9 za_4@(uxnF5#tshNy!^42wV7SJ#JhjCWTg<14Q?t9SV#j}o1pd2m($ZX45i7y#BLQx z5%z~5tsx-!J$}3&q}mH%d&S(FQw$>8%gB@Y5sm*j?NVRdMSV z5GQn^ju*nh!U*FITCRE+^Ps(#HPtNNjq4`(7z;WP@~M!)i%Ux40BHzU7)tR`u<9T} zh5lURDzg&muEFi3A?@Dk&_=@fX3-@jqX^V90evDK;N#pmGJ`U7DG367K`ba^q|oI! z1?>BSaNq=O&9Sd*8eP7E0y1e(dZ`nG0zIRy07S+r!Sv6bxJ^J@A3gNi>{ZlxU%;_uyH{5p9b_GLvSF3zDPJJ z1Zc<~`-}KkTp#$aI`BAYxPAMZH%$S#C^m1d_oO-;Oh-mhEvw*}j!A|qwd>ZIAl5!TA`eg; zYuo6?jz?o~IvPVoSQbY`<_1$V;1`5Jci;z^dwxmLiQa370~1C#365IzoXL9k?l7{@ zHj(kiq6_0ne-@j{228gdEt=0$l9H@|F584hTnP}2uk{!2(NTuRkvl7Wyzeh8QXpsWZ##?vl{Z^qT8a1iw$L z3ao)LpmqWs0>Y&sOrL+7snA(`1ua!sQI@<^=?QO>FU%vaLBasc@f(vZkl*}+F1Wcow41j};23}i6EV}r#JruoEA$$mVQa8_U2*@@PXmN@6aVbrZ2Hd()bp;MJOx)eW)FQ=wJ^r zE*Box+r*{?Swh$-{_w#FD>DwtY3!-7EBYV-?|JZ@}4z!;G zS&otuw{sUcV!y*>=E@6uRr04$G4nc6!dXOc!ZP=lzbKM=OUgCJw?%kj0m~B@iRas)|iEKw-Uo3o6ME6EzHV_@^TpObh z?gv|!`$|S*S}7v(Ur<`mP@E!qC(NY(0j-|>zkXQ${-x$ISOw#7e(QAm$cDy0HeuD=9o56S2;;3nGp(wU@!?>*% z84&?1$_ds3%SW}N!V;3F0Zn0$yYDFIHQ;Qn)T%_61ydp^#i>4Ql?|zds2%AfqwKz)7Y+ z5dFVyPV`5D4f;6S+TO0S@3>j2l?f^HH@bHz!tNzHH^}!wTPNPR@vnN`#`xA=kRf@Cvje;tRm0aw;_8EKxti4?Q^61u z-oWn>1J6^p8L>+PJX`==Dn~7UoTd}L@%fPqagh|EZ?hMYo=s0rOL!-Ob=M$dQD+#= z)Bq^M(vcA(@h=wgfWI#lX^0a11kzG?DjZr5p;kbffP&x$zYF};oRFZ2jt3wgc-kLO zHX0*mjNK*2CX}dL+|9qG$`CCZ68eQOV1KG77#pHVhFi#6c+5kKKAPd!)gbT>VWBRI z>iJ6x!)P+tgqYTn3i99}h(jtsnF^VhgG2@cv&N<8I&EyqwaGA+sr_{ESye!VO27`= zIBud5wVa4CA{%E`7u@=bAEu%OtkMR^pA{{8@{3lHP7$O-4-8iD63Ns8q5P_S18+D8 zRSub1pbvtRdY8J1teOD#TeUsf&vmQY?S@)niFO1vFoR1@R+fF_QyQB8 z0hGM?aGC)fp+o)mSwcSJ zID&}nQ6ExGq*;c^ z7j_%StChdjf%OC(naox}ENFNc-`4*^NexF@+@sNk?jsj5*$@1Ds~hfH1teUU@w4lJoTs7HsDfdXoVQ z96;$a$Chnu_hc6~YtL()H3XOkSsPO@>p7p>3ch1?dj>E#5@z7H-6YbZLb_1aj-*n0 zB_xo9cEZ={RBs7TzYHq5w6ZC)cl`|XmL2+*Hn5arH$2MIGPhKq^ZfC{{TnauIAC#j zqjB0B>4QU@oTnr_Gb2P;*FOw7G);Bt%X^t~3d(XC8jZekDk?2|*@uo=+&21>aP;oZ zyG)jI^NVG6y;q)885pKyT-B~F)noYhsq#~fSm;xy;UPm&K88t3#<=fbD(_&2S04{z z;Nc8CJ$KYz?(D%s`9$*TN3vUZ*J9iiZcDRG?G5(PcimwwVuf28zvd1Vm`=U>u zwqiZ{e)+kPgl6p|;!ld}bML}VYHDJ?+QVHUV5@I{z1p#TyDK_a~wMY4jg*> zK^~qRE_2Q8V253sQVb6Y2+)93Erc-j`1$iqq#M&C2c#a+-iI-m0&I>rrfL)(;{Ck5 zJBc#%ZAa@_E$(ci=D=d~mlV)s9I^)3+Nk>hPi<&Uie;F7iCY_~7;B>`DJj|Dx+OH? z?^xyU*tXLU6qTnu22eEe`}axIteSW=?uYAcBMH)gkIi(NJBH0Khl{-p7d95?JZ_K^ju%gGBDsIl$sA%?a; zSJY-W{QF;X^Yg!}Nv=dO3(q)T9U_wUrU))v)ARMo7kJ&*uU}u(*r?XU13xF})KuVM zf$GM_Jp`YYOULgo>jrVMu&Id#ks*xBV6J-b=urvU#x2^%eb`XCI>EU3ge*-o>U>Qz z4J_eBD|s(JUkrQaypqqJZ09~7BK)_!{B~@S+$=3E4G+iZhu1@$CZCoJz_&x8rlz); z_QdwKwle0@Gh*pQaB#Vn z_E4|wsLk&7-8**p@Lwuo@qd-T@)=p#Vs_lvI0P#Viz7lmMA-f|VAOYH7YVp+1#WXI zP}!nQnVy+h#hRTnn>*EZ5;XDAC2&i`+T@@LIS2mb20YCXz33zhky(9Syx`>j-UoVZ zaW$zP9OkotfPi(RNG>fq8ymMfcTUFI_|f`nF{m)RBeTkekEZ|NNkd<0#Eu%TU*-`HvN=9K=+V&jI$ME?;`7s=YS%r zT>>6BdG6d+?E5-=HeNed5L=JgMa*G9tK6v`!qa~$R6CT4`K~y+w(*P2%#&0LEnIn@ zd;{Bd?bxBdcX(7L63pyhlarIItgIyY`T;gU!M!-&&$irmsTYZ@pj?Im*E>jNZ8`UW zB;S8}bgf@fMN3uS84tsO2^83S`CXlHbrY#b-$#staUM)Rg`pzkdP$c=h(h)-vjK6GugaXN#S0e4%C$UAcX^;IWH|b zu}KGHECP7bf-CEy_eDCYEn9t42`U8H3t<1~(WAF1DSXqGc2k}Gz(J=Evp zyTh5ObCtto}&OVbL2W@fjEh++%sLdKRiB^WFKeriS-+tcp4n+gcY~{y~v7bAndS)G2y;~e=)JEk# ze#xErLJ#e5Xut_t6wHXEQ@M(1JmXe#zlL(2cPl8_{976I=L9NT=oGim;x2o;=YT zab-|B;I0F6Pq^I|3;};n{^U2)o~`#!rxU56Wy%8l7d4-OSB*K%mBA_Oous?BnTAoM z`s2qM>de#EAQ0SuLr~$u1rIeHCzWR**cRz?-evCBarNd5Rm*`>jrzUC_BU>vUfN^+ zlTxAs+ikn^7D12Hc*OotSx+_70(C5|#OkEE;Ymr!E9_S>GLRQp9|~`zbZTM~6?fP8 z$WWCd=^JBGQC9X@kW~U%kAvFZ8HCmdR3XA*KQcKfg);XRBw*~S?||_)U@eo=^3@JN zeZP#2|0GYTnYEr=;q9r$yPzk!!t}iZ9)$~;*AHO(?Jcw;uRxcdK7CpoNrylcclI5K zm)M#QG^?7Z{SfBQU@;eZB)ca)*dj)W&NlVpbxDWhl$0VA1nw^$v1ieZ^RHvU!vK626Myzja_7%8F0_N~e0b}( zhlj`ORophwyzmyRhm=n$U*sVwYd93AOuJ$F!C${RhlkBSZNFbuJ`a;l=FO=$C8;1B zWCJZV;=c#>a9+&Z4t?oHr`w(*FxWoq2JX8Hj^Y(I&*0#!cDXPNd;sq92@3K6SG}K! zX$|%r6cXK$V#V%ZAHB^DkBioCqrW=RaiADmGIv6i_!86r#|0%N<$hMy4QNzu-MRCZ z_KnW9o56L5ms0tp4YcQri7w4s5y=O8O%Kt~N`+3z>FP2bIv?_SH2a<1a3Sjb(9qD{ z@Z`Tv1zJd-I@Jm9d?{#lVssgCSg6={WFrgVOS%hnPG*bIn>TNWlm!fa9pWUdhy!I} z?&Mx{f^KMkm{?fk0^ebx_u<$jxIYf(@0IlvuS^$)^Or;=BqT;)^p)6f3z@A8zKRVS zH{J>i+=I;tcd@{!u$$dSdthMT0ntxhLFzx`7`P;;V9iD4fB$IF;PJOP>Cr|zYZsC(U-E#yR^)Kc+ zP@yj$d}z`QpW6-^n)|q6V(*YaQxEXfeIy$_>|$Kk+Nee_o(F}5_KDYsoD`e+u`B#_ zAbTPzsUF~VSyfdrau0h;g$ow_g;b**M1do^y2(q9_aHF5N8=54j;%HNnTJQrW}zFg zNNYYD!C$Ti{QQ9abrfJy7d_lG26F`S)rGJm;2&Iw<9D#f_k9_j4PgCM@`?oXhytv_ zh+bScVW+6sD{?;-)@g=@L>+Hbo6Css>AvXD&Dv^LuX2FqS&gmgSKD%$u09L_dbJ!? zv_r|?rNr((jfmT^bLVZ;FkRf`G@cqT^0VgPi4!N_?O#V^32c@=g613PH*Phir?ac; z4v`B$C43;XA~|&sCH|S?cY3VNP-{Z?{?A<0d@9Hf&y8+w1kIr7Yh?AClxOW~W z^MXK}yEtmmn6uqxKN!8K6H2`^%0(`mF4J(C&UAkeIcXFJIP+SWFGK zZ-cpvLpz5W2YoF+s62zY-vZ-pfya)6o3%@^)bu|f=seE2ZwbW-B_$0~9VSekBs^zP zBmTVj=g+Df%*@5L2ew0sRFTa&unGSsznW-|Iil#2Up`fri&*~rvg3dFR64P#E%`1C1xsxiS90NI-az`A z=Ol#8r`KuZ5fhP2*8!X$qHyAyeLEQ#yur%I4QnQAqq#4{!mNQ8H)o`969Uge_QpuZDj0f6 z!2WXX5|WbsuIl?l(O+%ym(~AtcBc>hy=@GSz^P}xd#5Q#>HEH_Y76NzIAKRnsk_jv(gfB{rPF?&I39O9)mE^iIe_7ITx=#)n$>Asv?y z5XS*9EM~O(T&Og_=R;+7#<;lG%=ypQGggbE7+>jbz%JS{jr_Fw13T2WnSR_+~g|6Q2XEd7Sac`obHedEdk1 z^w#*S`rNo!irl|EJSwa9S`L8g<3aZ!=l-|km80Z=P*>0C$dEXxeiyvCiun}{sZ zbma0n(i##1QoDy21pY1(hWu{HI5av6k}fI+Bb3}9KYn;XQ~}7~CV8OG-b-2M$ELJ~ zv}4a6HIp_-{A)rtP1A@F5YaY@(GBoXz~31{^PGKcp4?KKax4ppC8)zj5>C zz{PW#c|0m+RIdi-*{2rFPdk6{*K|9g?F_J+^r;bUFVz@Y{V!oH3njs(A}~;_CHXvl ze5p@9hPHpo0FQb3)E%U`6wTYK+ViEn7rV4qyN-;Hr&_ZD0xYC!=9C)R!*sBj6eMKF z1oRKwGuU;;{dcTmcEoJUhWuMCJ|p zPXSQHUiv7vPx!_W+}Z(=sj;!!+a-GS2eZo(G#Pp6Osf<6sjnT#-*CH9K)1Tp z_?tweqRiCL==k^=5;k%eaRi2jdSi_CQr<~x=~CJQDwzTu=H5LvJyNn zHguIjwjuaM^dMC+N$O7&!lgRF`4>U#{ESV6H|*^@vEDCW;}Ss%faX<9^wC7>)MyCS zT-E$Bv4qP#Z+VHJDpVB(bzjm(iA}y-xS6zp#3&+?Tc3l@>GbahV%Xlycz64Es2sX& zIrgu>pkk~xMk=xii-;5h`F%hY&@Uw-ETQ?G(_DIqC7x3C3iLzamoF;7u^s@Mo{()U zP~8;=yu7{lppAWnn?O$UggSN~P9jf2ZP&<$+wjwvgM&jk*MmH?eraYY5fy>lrdnJl zPFxsp0QrCDTZTC|a6KEYhK1ONYBAg<(%I8tRN-uj~Y z{7oXrP>tS!^2Cx)2@*d8b-MGGCaMy9$`eqm0{mIJ1Hy9zk6y{=>D5?|#}%y-XJTTy zAV|qBjl4+Ok8Ga$$6HmhRd^;_fb)-CG8gxp=0+iuYZ1! z@#zZGdaaR00X-?n`b0!D#E>woWR#5(^v9fZTX*zz0LH^pk2Af52^ApDdc(GD(pRo9 z;dBJ_>bvd{a~IGn4BIJ@i9f))Onh&LdIp`Ui#Gw}S6*3PM`Tdg$gg96AU5&q6|1YS zI+eoYe@+Bp*F@w=X2v+>Af5XjUfx;A1|DU?aq5C3y(2}_XCx(6cK$xR!)KHygMi;p z-OrByI~>RUXa&xb5Be|8_fKz?z7Ee$#G@d<$StVf05RC3%6NDj1O$nMeZmHvr_r?W9x*NIMRZhU z2{8Kh;Rhg_E7K4zR*@hr-2j>(aCYCxg*@f~f5NXw&?6EOx81@Iyh@%2pH3hl5B60l z#~k5m5f76OT1MZ1_INx9Ookt8!ya!2(@7$^Nvr~izuXi+6qVR;AlLk(L#)^)JakYY z;hB0q`z{}PRCnyiFP%b@(pUUCbT^c-yRwnwd&MpbX>04Fg0_Q3M45)u^0W&#c1RMf z!5;L25m8aH1egZ}R0tS6ifuFp7#Ry|JGU!r1obHa)B_#(FEW@Xtv~)}wi*8;s{R*% z`#-)Fmx^9;i<`s&5u|fYx}8lgfkZHfrL~v0KlSJQ(HIlM`jD5v<^fyp%U*Jhj4Rn~ zd3eVT1$|)rxK!N3ngeTyha~t;*bRPF=&Fbn^#&F3jA?grFj!ga%A$tZ>q3(5TIlIS zUwXwd>Qf?#$VTcjHjvPh8^rJkiwy^kz<;~T-<7=|?R;gTa^%Q6oW*A*sk5#OlD|Bj z;(!#40OY-mXgRszfC%tVq&@a^?EQ^#;GkxEstBrrsA8xgMMXt_;elbub?zmj;!&mZ zCYs=YaHY`BumEIbYs+Gb8LsA}Y8C%B1!&z4=?a}tj~bt@SsLg35Gr)U{VkzVs`B#t zou2MzZ2mpi#P^}N_y9k01NFxV94Wi_M--b*kxp2oNptX?^Yj9Qs!P}pK3G~J3&jX8?upON=AFv%szzdyk2QdSh=|Bj1Uj(3`EK)RxIXGL-`gU$VB7dD_#q36i%&fR zm3=VR08|ND|MeFyUhMe!(*rFiL8U;byBs^w+tZ_q2aDXm^UYo=vnya$)~s360oxzZ zrKT<-bFU&1PgvVgjRYQHLpB&T z-cx~Xh2og_OQg+UDoJm&KyJVJdVJ1j3fjeXDCe~lm(f`ygT)+PI2KMrQ z09jUy=C~NVDIhtNtGnBE3-4}R?Me(e*2lfF^75T{q$o5!bzt!an5WYNkVE!>hTcW` z049kWfP<4>)R7f#;Je=5-q&qxs7R7{@ImYiSOX4{Jn+OA#osXT-BpaOSAPVa{7yM* zv?I7kD$)mZQ<9*d(AMrik5~xT4rx1b4ad#spYlEqbkYI=loM%1q1nPhjtWZ zkHxczim~f0kMZjk4OQWuPl>?V4KvU1GzDYztWXAt4LpedRpN*-nYtfCI(k1e{}f%n zcUM&`Ci+$4D--*>*x*FzwX94St0-+TX>Hd!Trt%E*^z=&2xsSTBWM)=wATKi(Jb?J zQ9$~?U=<*dDuV@fLHHFQT|&nP<%6!JwKWM21vIUsQ{f72**2RXMG`W49-hfaDnOf& zguO#K^J5izMUJ>{rnybf??}A{Tv|TK<*XTwXbRVnDqjfg0e~a9t~5QhtXcPtNagl@ z^ClrSMt^0r1MELG9)5>084$jxJ5N!{QGX2iB12Zo?$NtW9#y_oqD6w2VwpI`nl zA^Urhr1M!>SqbzE{82EVQGpMr2|ASF^{uQazroM^I2^m3+7=BTRL4wJsuJ$`d1s|r zI@%?$x1;}$@jN2^oBgGWcQvw1VAdIE*O4h7m_;0?=> z_U+Z39UYg_Q+j6o6wGGu%(ch~sJ?Oof?E`@`V7S=4iE_N6dvx1SPy%fk-=@#GmEau zq4-H?C^w!js%juyVqoNbUTflVS<<1Y3vAv=4vrv7+l_MV;>yDTT)(5tAC1ZDo}50a z`frQK)Y<=uX2pZji!&;%U3_e8vGqA@N>N7R)07gkiLze*bgM z_3yfV=Q{hrYOVGC4EOz>?qe&0LgxqN6)ocNx41SbwB+gAxAV+=LhlzHi+OHslKY=^ zV=d>WX6v|w?3pyEmv=6emaA()$Jz=GzP%QQ7kqv@1&Dn==Sn42!sW>ap^R8L@JQ}O zwR@UOa^7m6fpqu@%Y{bbyui{zGT=*rLm9%JYP9iMtBM1&2fqcP$8Wsy^v&H^n$Y6Ce=l7FcERfUt84y?~O6*Rd=qy z*IASc@A12P_jU5|vCR6e)$jPWmYejS-45BGrfxBO?z7j9 zvvZFNa{wVVD}Qd-miTA4Vd6lwQ9Hf!oV zU(LbHZ12*^S<80Wc{txZ?nNWr-?O}{&zItsavK^MwPVwt7!cy(E`|RSq^Lq4ZH~UKUy=x%%Zo1`x@2;=X3O0YxIc_&|Ug+xTgD5|5VJ)-$=YBpk zv)^+rD7jI6%Lm-Be#ZNh=`mGNnKz}&FGOEDopLIYLvcFQN`4Z&b0l)H{6?kk9;9`Y zOBGbkl%m;G?zK~i%W%Yi$$6CxTUhnoqwHCZN+LIe4lzPcU%#Hb?_AL0Q1kI$Bp+Eg zTPn70?FKHBThr9dEs4guCE5<5Vhmp;X{#RY=bd}P`EmNu|Kcfs=O!c4EzPb+7$uB-Zkk#DQ?hiB+#JsF<*oSxS@ z+_AXvJj>8Uu@B^{{Jivb?uXN%tJNu=8{Y5n=)DJlaPf|A7+^0?Ce0!F<&A^YwMOH{ zjRh`(cpTYgz>>I|Nqn=@$(fBLq({D4I{E<47a`^SG4j9so}W1Pe&0N#mFCC(8E1|N zxa`yY`GJHh*TY}f?J9BsB@Ms+=oD_b5oc+-q;*A)$83m9-0-Gi*&7|*Y;?56GEdL- zqz(F0JZ+z};_G#*`7F+wz9?rlZ`*F4g@R0gS8CUeTSrIFVvd3>_Mc^h!9?H26B*ii z6M#S~-5LHT(3&K-ui+2UY<=iK`YiR#V{wb>y1g>FnrOXq=jT;D=TvI%II?yEo{%z} zSb>C)*>+0(pk_2Kboou~U5*(2<|lE0L^u{dx1L)T*8L1(NxM%~TP9{<+H#rl6W+AZ zy)&x+9_NL|*<3i-`QvPlMtiQruid^Wt-$ciN$b>i@zw2A>(uUk*PSYF)VJu`yjqJA zo8IOyU*ZY3;`#{T%;F;oftYu6ETp96r#MI{ zBwMkh>fw;Pb9d6)jT*ltJ5S!c38FBt({4OB%(2+XCuJ_q^^xPo4Kp^b>G|okOUZ(` z^VE9RiBl*^Gd#0VO}{>{&~aOzM*jm$2yT^o{(%-Zz#9XRMJ+C=35zdLRP>uogWd0& zAAVal>Uq)Ar)Y8-Z;i-cztHtgM@!YhfBhw0L38<&>C_vdrjyF4oEW9Zpxu@pI%k^w z*p&MH9t6O1n~&Iu>v(eAfIuWE- zgGVkkA5I)vJ!ASi?Y5f1lYpJxk4S5HC4uj(vsR>~R=8uu#RqmqU<#U=`3FXSs(gT~ zf{u1ZN$)Gey*CwnxU!>P6BN326%_DA_)K-CS(?rW40BB31tQl^oma52`lIDe?5u7S ztJY_O<1kap&V2Z$t=li6duZBvOz5ebyJ)$7{mfBUHbkC-#%D#7k#Y9uXI>Le04#So>H{QF7r zdh5RaLSAgm%zP>N1o?0#&+qtRC8~vbVJS}+(F-0TEWY}EL8;afX--RrW#a*J-BVzbl=+X_af=Q|g7!X3eZH+>8%?dJB>bF3(rd=i@?XXh z=11udV=3)D_rN*&Ncjz=Dx=t{nLPDsLNsZ~8#^?yA8Rk@ythjG_4R$V7IhC+MZ?k@ zGNKNYScw^ZbF(K;2$KK(Gh@;JfTw;TWq$PN$Z>4JN-ZPC;`I!maz8I!7adu$3v zKltrHW|{O~^n63~g+v$VFlFPj0E(Sneg62ddqt7s<80D1=Y@p%$7nsb{y0rmaFTXk zuaIFu#HkcDu=Vi)d<*G8GQ$3bk^mlUqM1~WTP&>qLQT$xb==h*wY9J0YncB9xG#8z z_za#eeR+MTQ-<=Y)ix+x*t*p(ti`&@iTp1VlQft9dHAin@2cs{pS0H+erI8@##+|Y zd?n_MlGBnKw?DyAXSKGr9@X9p3r*nw zFZn!#%F83uM@8yPo#XdfJhzT%2$1a$gKclvP&3IGOTMTkMjfB_vC$qplbIsWiHKOw z=dxVpO+l95S(Arghss~6apTm*t!C7QA=iKD&hpZA>tuQnWF*Y~u&%ICu=vwTdi!6h z->6k@M8UWI;rapQ8$0V4@p)+$luNZV$b~j^IAjy7(rS*mCrB~7YHMEvT$FS*C5@vL zfnMM;oFnHc)t)|kCYDdl{{36wHXDMjSO*mbBI+Sd54i`|81GXk1im3AS7Ekza2hs( z>3}npWO4`6Gm3&r7<>fK*HI6S-O;xZdZ7Gtd`grez7~nG%V%uY|B0pQY?nP=tKc9- zAV|RTIkv**Ft0==r%(`HbB;seC=O=$k2>^OCS%7o^dah1ARm6g2m*f=AYWCS#c{D7 zYSCih#q4Y+`uA3Pvy_3T{^EWRfsqU)Xo`qJ#0)shFCs##$sZ{;tJPnh?XWZT3*y== zGsQq)+@*VCR-^eY!zP{~cQff7C&aEL=7vi;Rzn_0< zx56*hvEQ#YG40Bm9FO)37Hp2mv0gNL*hj6ikpD4*ptVEnX3gq4za^8q)*Gr`4eyh! zeLt!4$#B31wOW@=hY!c(q4M(n@m{pGQ6e6K=Fq%Fixwp^QAtiu{_K$B86)7`1q2!< z6Ar)rI2U@-=QSA>2fF{k`m8-Bj5Eo#X_5BLW>3+MOJ=mf;vTq8$JyV&Kx5#*Hh8gX zn=L-mt720#g~$ki%%rzIRaqFQ@Ws_uk4|*U=_z3MvXwE@{RQ|4-JOWH*`Uw8@ zn*2?Uib|~6Pu{+53_BQfZPSOB_Z)qvRoDgJ0cSOLo$=&DJJph4%WWS@qcz8VG3s#N zIX2De@u~W~kLw=a7UTi2tDRHWXb+eI!k1J=kyr7~&eB-+cFFG)B;l9-JRB-? zjn19_;ta4owM>WKznZcUqi3zNKZoCYd*fgeMF$*+UnBP#&GtbSUHR=>5m=RfP*5h5 zZ#IX7tinb31h>W3t6n@#o7Mo4z}lN|?sVwUqY;(Vol_otC_yKcra%`5#4#X~&I>f!p*gSE5 zdf^v#f({8A4H2P2`gA*{&2tac*E(su?<`DR?&Qaufwrz+3bzkwZIO|5>EW5L?H-$| z>cEVa;KUy=(Bnhxgi{~tgH3lCmtelX4zy$R3+~_ipO^--;AqPqJ>vaH2X^Ymr~9)g zpLpidoPF#0`1JDIn+rz@ltNoG^4h}(5A>cprn&t!B(Hc$=JH1yD46k9_oRcQT4~I$ zdywIM|4F-1+(D?nPL@ypvET6xshpcrjOKoeWuMk5h)r}l7L~*^rNSEbiN`uK@IQ~$ zHCssMZU2<5y%xgPzm7oy`}jWrw=u7E`}cm5a|1p|U8-QxbnBt~9LD+*N`jrH$picp zlpgy3)Ja4R{oF=OG$K8vwGzltd=+FoECjKaxO1mT6`eJxnuY-|0Zd8*NBX$crzL^* z5W$Q@+XQsgni57}c@Bx*JQ$g{mGEeF`lmGyJa4qv6dT)}$Fi2Xi2BOr&?&c0ojZpb z&Nc$G4RYS#J{gGdK>v(@(J_3c$y26`8AmH|`(@fhd^AB{5EbYDIxoDmldjFtKu8jhaXfD6dJw5k`UMlA(X7n`mLCVi8xJn7Xqn}IM)R9nuE=iPd+{b#F>CpLq4dV8t3O#EJV_`=SEryo3+95m)OkeG6-R!V4WJyxpUMN(EqV8g7oJ2f$6;r456^!>fb{yDMF zUaV~6{HB*v!R%qvt5BmF5So4MS`)@Az08jeME}=)Gj$q_ zr4u2=t(a&=Nox@UZgfD?vqqr9g3e0S7rD76f$y!0{Y(3b$4K3 z1H=xHdc=vv-A-j9QV^e{2z9^h8J|Id#^_6sY^~m}wLMtKqsL8LF-^-S!9syav7VTE zAS(4-@@sQoXUS}=r^j}ksruSo@utFM=FEc?4O~V!ziD7n$`=TfWB2OHPKuY#jpod_ zQe=F!O8-;YxK6^|nI9bAwj^!KmMvGeG${RS>@oN);B6p)e2GWdn4b;bR5&%{vO|~B zl#_N1M>FvPY7~w)yIvz9dhYdf>~)9AipuCy)eJgz?;d;JxnHtFceNcU57r$Sm^q?O zPlLVwM^tRqW;F4q{pJRrFei1VeYj1)NJo(kgLC4{+5mYL2~P&)n%fkc9RMBEvRaF3 zof>6&$>!vw^tIOt2Q|E`%ZV7j-Rsc1l>P6#bzc0tV;xcT-1#DPA3or6w}TZAS&7IX zGO66e@JC5IBd3}4-`snB4`m-VDsMe0Db9P^de38^^ow?<_4=vv&zFXG&tw^91U$pu zbEC3pXlUpfN}ug^M<{aNfA|p6bAH^Elc{xw3|*Ao(a>Qa8KLHFTeU~(<$-u?Tt))Joo=s z4K3m1uV5^EYIQcP;uB0d*_&sy`Bng!JU z>#uWcOlVbdSYxa{eNRqbJ7LPr{hP8cUVJ%lqV4yO~`EGyFlGS+*mKBpec)^KWDXu9|C&tfIt-|rLYT{GXOZ`Yo*N>bxI+d&wS zNWk%n7LYKRWdwdZC|sPUMf^J zV-9=#f~Wh^_|#YJXe3Q3ndBrxlAu2MGm_2z9v?c1 zQ-{N68q!%<^UiWG6AhGidCJ3Yquy5OMmZE`r4qkW(&t7PPp%dp7=?XM37||5eb1x^ zo;B91Iq>h-u$6`?t)!0M%aW!E?CJhtBu@c`)N|gYZ@w`t?Ej6YkJj&>P*WPR0^8JO zzn-^G)t8yyfo}6Zk}8w8DsQs}y<>+TD;O4FF}K?`>rei=*0bml`(y18To14VqGm5e z@`*(+8q+!-WvruIbsUBHv(uNnSx>ptm}_z<{Awb!4x-Ns+1YiO2XdC{Qn_8bjesy` zA3tu-nU)E1wLrq{LuV6U4P${xasYO@1?Zx`qq$s*^HH4Tt8W?L-62JOI(m1JLE*PW zF1(P10Cpojh&r31=8Zh<5_k}mrl_%vDxcIkk)B?vpMT1r)wdJZm;O|9^HM3v=ZW3@ z+|9cE_OH)(vm>3@Du&x}AZFnVIXXRay~W4e^%Dk#Mf6O6j*jn@SNx_;O-O2Z|Fi1x z&l_ozhw+-zah?ebomGwjgky{)CXZ~a}ZZb&L*MbB7`>_kdfuojWC z#DAnXj`>*O_PDNP${o*nJ;r$a>WzC0khV<+)V-lp(b!PH7Bu{Z(70Yl>?l<+4S?F^ zmMvOn_U+q(Z}uEALox9oH6P>JMARA8d9Z5gA0j@$_FT>=&ZPH@yZyw7wl8}8=);y; z0$x7$`q&8i-EDhdthre#nxL+Bd2gn5N^a| zTNUud^XOWhA_M_ME2M6}ZFqEH*~Y=rID+_vJ5L-le!M(1%4LBlT+(qRV>X*I@ATpS zVV$DCYlfqMu$^_kTPG?8loXE?z83ebZhzwdE5jWl-74kR5STL>npzkD?z(RY4-eoC zGb~k^mRx=r;qopa%Lm#d9|?Sn)DGXSeQBqiohO~jet`$6F?yycpPIF6$Ny&~SMlsA zKEwe~e$<7ag-0|z3;)WOQ3*%CfH(z`Qa!_SW3T({5+onyM-b8zFF71c0 zZZ*hL56pQTxYU03RsN*Qcu@E8eaVE@fTyMZj_*7FC;!D$?l*H5Hjx&Kx|tMaf7^}{HRgUM?Psk8esOY=iZ+8W%#mMfjmFD z!_lW-*7`rv4VtI4Bo1lThWT#HsksA9OG-#4ZI6hcsPwMv9%LW0|Lobb78SdxhnVry z5{a4rrcJj`SPYr>aG+PEvJ_|-p4MO;leu4a2NwO}b=f3i z&PwM!a~p!CO`W>e;j$t3nE-zr$@|=^1i2C$>Z?<9iY^0htInMCQNn6Jy0efkfTfPv z)uT6%b^w+xWtj_;wOFGzWrINHL2D-%d@~+@I<#dIvzsqnwS*%0p=MC5j;)3$E63;Q z2y6_p`ym@8E=!$|fYyQ?QVi`RVu8E-FSEsk46|uQDV@4tD=VUbtOybFGSYU8rxAgB zhi#TFTh<>Ha7{%eU{xOS^|5G9sDMo7%!w;!6xG+g*fkaF=gpP**_?D^od&EuHN1W4 zc(dnBkoBi*leNp0DAk*6nY}M-=aZ%^FQpjP$f5M|6*6|q@`*p&`uw**RfeGL}}rxsDHKexV3B52UH*(`!Cz z3%0%UqXQ;AeL)h#aYQ*0j@Z35n8I(=i zE?J3oCN|n+pRSUI-n{*0z_u=9>+F5mqFrXMCXZ6*?zpLbWLd%qdhF?RVRz1~82t9} znI?c22o$!KE|`94c3eE^G zIBkASed2Njpk--zLXSsT(=nHdY#Fv7sr2tIUFyimx_h>|-(6cRi`$u> zr=U2?nXc!Tx!fznWgHihz)l=fn|JLBlIRYKtOZM#_FHywnWmVkGvUbe6;XhwsR5-EXXGZxc-ke&H1xFr`ct}>D`1L78 zYVpZoFjWTsDBq&z&F;*fdJ@ayIo4PJwv`gCk;vP>>3{8AJjf_z;erL%mpSO(D%{>_ z`_6+I?GqoQ^V&vK>QNP2U#A^zw^*%fdZ+KK=lmWoDO;kmCd~b8((|rL85M{WD=^HooJe!Buc^$w zu5GPPmC4h-eSViM+yGXnWy_YGWlhm*aG-QxPHxoOH^^9bC>tlN>o(8c*mOoL-%&o- z?7G_y%NxP|ORGWJxi4_ASd-g(mp7GxEhWma15N7AsO3u+Dw4+h&gU};DX7<=g?3l> z2_sD$oMNBd9F`+#LsFTRB*KvdeL?w`{}bFQr0QC3Zob->oZbG8-W96!7D82QV1$^@ z)3JLi&zfcC#H&}_>9lS7tSK!YFDTy!<0B3F`vfQop~iL|s)r;YXu z^r(p+@0+dCzPtff5xKf9UbuMiMY)v_KRo3GG_kN~#ywod1|Jh-P9V!g=(DKXQd)(5 zYquv$^I%V|jk+^u&K&6T-PZFB#eBuRjYRcusMJxYon9W;{jQ1*{W&diUB&9Uem%$J zWZf>zZmGEYxml=vzyHK7gk*c6A{ynnJf^k9ZJurL+jsTO#tdIv_fFBV{3op!{`$B@ zi`?BasZ|nL2#BHT(%fY;A?OLz6WC_qABijMJ`NR49i6;<4V%_1W-gztyI&L+yG(ZV zLZTKlW)7oQYH$FcGCceF=dq+cub~V<#?Tt;%2AR@Lr2ZolTl#5!)doo#HTd@ z0rkFqe%C9$SJ$p);X4oBUu5RqNV?$*FT%%T$1m9~Yuw z360h3#n6GI(>z?Y(1R|I$wfL;UdAE)p3t0;m!r3sTg~9s&o79IFq*z^>j7_Xnr_`} z^(`-cs*m|a_(s)%+5jh*R-7A(ar+`QZEq%SiG!0~&Z(JY9q6T@bY{`T5|)I4fLc_l zis%Z8^YirH2i;!7@FgPq5u*anmY9_`c-4B%ZEv`ER`}OsgXbR6qa4SE^{xS7wt1V( z^%4GbQ~SYL6l^TxhQcICG*7N+f69C<6(t1!F%N8!WcOx>iObzvw^|6KG-|+}ZNb4S zIVGgFfWf=~%oR1aR-J}JxYG4{PP~!vg{WrBzsn-}%xp}syO1vetA^gHD8Fbd$9#7E zS&wf2eE0Lm;F8mHHG~Bv$JjV7i^b$FKY4xP;^XrUPG~QjrKB=}N(dpwG=pySzCsL~ zy>UZ@Qg4_93z53~$thQf!^+} zd;vV1U?lPMZOQGeub&BiwTf4K3Ok-9#aeiHy@?YiLgdKh0RKBRWmB-d^A8#)Loezl zzJ0U1Z?VPvj;T1@RfO+iXwJ>t0$41^DgMwgoy!Nf2Cs(dn^OxQ6 zc|mlWqip6`-+D*AqIE2(R>bEZnh@!urG90(NUJPII<}_ibk4MN!Sj|*po`#a0l~-< zEsoc1QU%Z}6r{Jm`Q}wfNHc+hE0<~>Ao_y>|1r05H4433n zu8py)Tyr?4!2zt6JC56Z>>ebQ_$$B~ZoSfRi;4LuZP3$H{*|>|YF}@2Py5d|jxUKV zB2Rf3-3-mZg2IdSr1O6XM3Gkf8J8XXC)&S)Lyg_TcVJY~tjV%aeY-#BMJoHp$;oN8 zG)44e&Z&cbEb~3+Jac9dg}K6)bMvI#rW$6)6A%{rQta;IR>c*#J2x~YYt`{|f|2Cs za87P+eebX3=K$AW7&IO>cEs=7tzPMi7wagkM<2gnGjoYsWXqxS7S$mGbM7d!p|g10 zbrd50$_+g%6%=1F+ZXU+o5y8POblAKOm%~c(|E3EkTH7Rn>eE$%bY^0;pl!ih&2w^v` zsHUxz@$C$_X@>mWKOkTwqBHB_S^2jGQ_lEW+Fb%kW?`dE-S=wO(E0Ar#_KE&>&*x? zjarK;p@x_Vdo1b{6+orKe}EO!HD1PtWc3`XM^W`|`IxNO^7-QLxBADtvt|()r++Dk zs|Ym+NgBOnFJBp;V-3NM5X2!w?^Vf;iMs!E(7=JBOgR0x@d^%k2%pmEIhx)&efpS; z9I3>4t5Cq+UF4#C`s!5!(Lo_nN42Zk?lD8+Qc69rLzzvUya8Rnp*ZTZezJ+@XM7p% zY|+EXhDSrnLvtR0b@<3pDiNP5h{}kXd!ml>^@}g)02@te+tlSHkJ4@35VaE?AOBVm zuvQloVD*(e&&{18FSff%U&c9)}vNs;P!6S zd#bNP$X+?i2m=$m)z;qrRorAv6B+Gde;0MdS&Y`@))^Y7iSeP!O0aJI_4RCn)_P@= zxZA@bBGi&bYg$|Y#ooMUk7N9#$Cuut8Lai>@lREEclS^OHO&}4`%*JY%TC_&bC!ix z^+--kTuBwhTg^L0S;BJMxBc$Uis+k6R^?p9K+N&-j3B;Gv^O*XJAy#7(_F zLp5}yjoz-s{<~My8RtdfE&#&a%~s8V)j;ng*^bWsQrr42dlzS&;s_|D?$bpq73u=M zCneR^K2t(sWQ8JDZ8czt_CH{GOZ%IaZ(tx+E!2AmHZ~7v9&fp|Hj##bqnq6%kWH=t z!+H@!gj}_QYYFjIv`l6 zJWK{~eX0b(yN3Q)T&Pm{IZr`*K7ttid(O&D2Q>-%)iJ)*FhtH+2bgnw{A{H6+noD^%RitgCg&$$A3r$S=m2S}=N* zwSGx44W3A{C6xN{I1SB^w)_UU>HL&;#vN`0zl7up-%GFJZ;bu=vM}cDY;@S30RjGt z*A?*_GMWXa_D{7QyT_?}wpC0|ZkfujU&XB|!tOPr%!tM4R?p6=P(?x2E^I3-%TT3h zzT1?W=By5w5ED!cx`y9ohig|KkjXe8^o_9+hLP|{9FqpTc+-*=*;e_XoYa`vB@_e{ z@-NsmB9JDGUbUM^67e6_uV1gMs=9{8qa!`kwLBGh%W|Ha;nkY8hVRoz zMxn0j8sPuz+{G>h{o%cCl%4=!YdgZ&wA|}y9eG7UjJ z&eZsYb3#eE-=Eb)hp4Z##a{I5VDwZOUE+aw4kpj1a~qm0s%3+0n}RZ{8;Pn|tZ}5KW=ME% zg`%b}Xlt*f-=Hco(XME}`7DBM3atPx>;MSMDRxbU&_%?wd4=R!Ms2GgF=-*TIj$mA z+-o&`Me#reRji_en9@Y%j;H@3wC>WA>Kxx55jS$L0P7z%wzgd*)6N_Av@1nSccFVZH@hM? z(Ny@;aBa6w1=yC5?_mV>pgU1TG@hRd#ANmLi+MI^lGWElm?o|J?Faj4OKgFZ~ z3|1yI`3N64lE|X-Re8ycAON4nVl5=WIfNi z@uSlg3f6iGJoGJ8-(Dz7DJ)BgNwiYhm|)!Mab--&9oIu2Z9};Lloa9+P%Age(O?p^ zLYWJOzn^IJEiuLL@d)>C^Z9DjHpO1s7Jn@}(H%#SWDk)@gui+e>rUf&23@T^O{B$`m^FtS-!1e3>;^X6!H?apPD}z&UxVn}X z=?oZf@_c_uL6cq;Svr3_EUnfzc6bj~zEo9HN(BQ}-XN|8trHYM4;(6$lkWJz0GR+BgcTcNrVj0cQFlB~9+d`TiemTmNk|`#?;yJ#8Gj z+Y}7GYLHQNIV{U&T(-5wv-XZ-bjl_zvJ9>6#?u3CAW4D%OSwEcV z71MFhptkhWs#%B3x=x)vyL*qB&dwV8`Y8{Rv`Wul6^CmceHr5U=+UEHk3A+<_dUSu zcKc7qijCTKRD`}bQ)1`oX-Iw2y$7wjz4NylKQP(suiySi>?rlPxHw^fT@1Q+Z-4|; zFfjrr*9*{vLv84&Q31{OXI$%edRhMrH?O~TC&(F_qBneFLe!Wx_9^Y{-M@I(&V4s{ z%7)nJ>_PDdg5p_nc4{57t&1!Q`gp}opFe*S4e-bWE|f^TiTU06J%SWq!QH4yAJK6C zj)EU|2j@mC`?~4X4XR5W(vMvX=pxarDynv+T~$sj30(I4X~EZ*XCmI-HDW$tT=E{d zUlFFvHM%o(;>$v^B|aSZu^tmS+Nc8u$r`f zo;(!9Qvy;jvzvD>`EYqgQc|q?eK55Se%D`;J>suhZ275f4mvUr1l6prer8|xtf*VJ zE~KuFt%C8JS!wV8moM;7NDKdUNt&_TBTTo)R{r=;}<;f5C)}zD%tRG>Q znwol~ybTvksiqfozGV1_bdUm@?7BRZ(4imGsBOCq_uezYvuuG^yq8yeX|_@J?U)>$ z3|HOMZCRJfLKg=(#eQ;n^>N^lnr-Y2QgdTrMx;Y5ccl%>Ro%fQt!1-Vw`7!QuljdY z_8d5H0GarYX^&db-R+fyxp`A+7t!rg|4>a8 zVVldAj?idg^zj{7$xi?NIwm_iy^NCad+hN}y)?YBE_|9nk zQ4}?~9S4Xtb5bF;@N?`9yloBD)zztcH8JpQv(1d(xWfK)nc)#NzoOA!}gNe4nw%RsLwsajO2LTh)yX-k-jFh8Kf#SKURn%f^28@E$^IQ5p*8`_`;sIDfBdv!O9=j=|1+YK|>=57&M5=Zn_O-#2$Lm~HaESwbZ8I3H85yyT zE<5<`Lb^)Lxk?((8rP6;LaAt%wlejc**ri7Qc4^Fk30)Qo=Bhi4;avqY!g;-Snp{y zr5Jp^@*Y+lgN+HMrs>&O%Sf5;a({Vuc)ah~~`F(m&q)#Q&yl ztfZu2*=!Gu?af)%OE}`u@YvirKur>Vr3&2D?)ZM)h~0h0ecdrqefX9?IE)!0>ZSi`6rSLhy9M= z5I>wjpiPbV9@-c#R$`~$7!wzPQe*4ZsXe@9-i&kmDJdpf79AM3Ld9i$z@HE)T|?w@ z3SWXN9+2x`_wM=gIvRe-Q*7kdE7Bl%1~GJwY~WV&hVwrm5rg-Aia$oQ8!8nt-`2xaQBu&rWa zyA=?@Yw>oG9)s)^Lp;Y9^Bh1E{R|d8@6e%xf||zgu;cA(m2vBP-rx7H!NlYL^VQ?? z?`AT7WaXKkRqFKL*&G?Y5l-y7HPKM#A)BT9>G*+^hl&M6n<$1rxaV%Qvb8;Q<4*ag z_HWEy>~y*J*!14iKQOlchK*!5qouXH#ppfsi%k{2fM&aH0q!V8M&4 zZ53w$VujFx^w|qKa5N<)llkT=0r4BiC*nAYP7=47fKRZ&!eCP*Zq&l_tF!R zUb^q>D8)tiD)X~c`1 z^jt<*{drwIF!+Okfq@#a9W`}FV}KReAXJZxOOVqK2>E*YDOe)_*q6PHH8lk)rO@uk zq0f(Hqf@M=KO#zq&Rj8cf_lyHS7kzSf?h&Gyi$tv$5XKPHFr_^tA8 zb@9US>yAQvg2*0!(7Frnagl_WzA~gWx>y!^Xf1v2#s?Z^s*Kas!KajVp+lq=%P6-k ztWtrZ&L}U88tRd1nwoco(PU?wTx|6MC`s$#87>S&+pa04dj0yn5CGB%afUH^sb`Iu z5TLjBtYKryHV3$ZEDJad@Ikyt&0PqWTPO$7COnQC|ld*hs zeHA%kT+_kDw!VA-<3Xr{UQbNq;;y0^yKdt5iyAhyl+!P=zL?xW1}&04Qi>P!{5bgM zmnNv%VpqTXjkh1tr9EzHMPR9*$s@;)zctF^(W6I|oL%k~Oi8K!vASvsM(e);nM`ZO z>ehe&aorAkwoYU$fQ5$s8-BlB%z2I^^Uf$50|2^gPVVFjk@C>+_n-Uw-`uCXvucC? zAqyY}sZX)&BovfUJYQgWySGu5Ul?45d_Nm#KktxvN83r0a>xa2y%H>zCF^z=74srn;CvW1JEscTQ|Ly6T~|a z2aX{BD1S2UWeaT%WH&Xxnrw5h?c296ZU1nPO~BiZ5F9gVBdl3XO^-ox+&gz27|y7_ zDV*-yyI087?fT{nJ!|r;JmYKT^1GY1?ghxe_&z5@=TgoLXrrlHQ%skaf;%<}seJYf z=eCucJR&pX1&ZWFrkpb%F@8fU9pj(ps$Ye4x-{W6Vobff1`5FisChm=U(&d&##`P* zV5U7O>Ee*4zf;A{J%kW9H(+6iYPZ|UFKEg|2r3E1iYLINBr6z)7hxbnb=ib>xH{{% zoWL|jPOdyst{&9G@5js5reqJ(b*_)wPowjo8Xb`DQV;c5^qMUuSs*5B|NPTpIow~a z7=(%d#&8%Lav^_FRI;1}!q;kRYg>MDN2d((XnCvR-Q)I>4y$4Ex2$eW&!=>poIoQJ zsMFI-G&^R>&E|`WQ$i8)K=NERtixFA#hS5OJHar^`X3wc|5g* zu@Y3W?R#U1{AA!>u@s@~S|({5Nd4IZ-dF zNA)YXVcKArLqi~Z5_FJ=z$OVVXP{gCaX3&q8x?KwcTj>%ldLdN`qQvUloN%Zgdc2? z7=Ke!T_h5lb1!n+UpWV?avfBS_dn`YgZlNOoH$d~u@z;g7Hy!2WcX?~GePFScN)F1 zdyLuwqv^8LWao**ku47K5MY_X{jYd}r_v_i1#*|IxnI$KL{;!2R;ecU`?}^EDMWdJ z8efJzQ3HzYOwI_zH7Q2DB0lXnFc-y22eO@3!f#w)Kd@bA-B0bo0FRAWX0?h?+74xr zz#gW|+i!IEe*1e~w{{;WnOVH1v%mlDMH0S~k&#i;SJ6S53EI?WjR`mR_kWpon^?*k zLvUQ2I`7T!zwQcuatQNSdE$gAdvdOp4#JiiLj()f@WbS^p?rB2HIOEzP<#aD90%(G z(ESnDAHKqJ&O3bVl zP_qk$kGt2!Pg&CF6sGW;(0!@6-IaN+%_LP@(Sb2clcw#li8B0gV7xk-&~6HUrZ0^_ zmg4~A;4j<=c8?lEz)jXuUXCuxxq7t)a7ZLPKsDsM40}M-idr$>IJ754|By(tH{Z}P zjs9$PaB%XEIG3-JbovU+tT1I;S4=6WBP%S;%ECgEczA8nk;J&s%JGwq4Ob{5If1ztQd~*tQ%|8uF1p=kD5m-fvE4YA-iMpn zdP;Y3;jzfRRgCy7IOJ`tBuNW=-Or!L#GP?}we42GwbJq(hA+x^@Di{~39XyG-6776 z5b2b{Nyq0+i7sn3rtnx&)%EAc4wNiC*Q&K{S&scf-t%H~6ZnS3$O|PT;DHRM$9Q$Q zty=YA8@eADgEk~&8v&CVe!jGPe|m&gzy-MrIg#orq(lULRQQ5(DioAl76*3ABrMi^ zuepat51TugHbPNxzpmo{+IFa9AOE?L{-ueh~zr${|*F_UzeSz)M1MS+A(9J|!;o9yoBI)`KPF zL@8t}K<*rPF;NrAAcv5Unj&tnSmTVG=q#67OO4rak$qk787WYSoRdZpwXWpZORg`d zKup=3XA^D=J7cw^-Io8OQ_0t%Q&DvAGwa@tA`BWaA$Qp`>q#qSne4ch8@PdT#B-iV z0O3_Gu)NCNKQ%dpMxj5sE-V^~+-Hq9RaXgGW#v{2WnfCTrEX!|*9x=c=XU_l#ZSNa z>4b$CY=yvhpm<0EVDa#(owSH|)W#uyRrKhp%h4Yj*BN-Fs=W^$rb(N*m762C^slLK5dge=Ya)*s=XDR2Yj65h0NIT5*>V#3>et7_kC&_j><%?k@L?o;+ub3C3-KN33pdVlRHLPQ@ZMTSI!A8|Onp70cocy%ggtrk5e`y+)?! zhF6w&@ev!_NdJY4eIxCTOk$)dTpJiTW{tbd8&&wyQ59k)U}tASp(oDB32}WK5g+?0 zG=f+B<;L|Vh+T75_z@n&s%#Hb_z@NH`sR%B`yg?%&@>F3_PmsE2S0?I6 zhGL%sV46noU;MIX2l%x2ujMuvvwhJ;m8PwY(Zb^EYRNc;vfS_uKDUe!;2O|g^MsAIusmT2bDG!}L_27_q^!XAk*JW=Y zGJNNndU}>ZqD10dtLY2bJSwe%Lw3C6Q6nH_J;p= zZ`RzKQQqiHRoNIS6#0_o%H5jBeFr+ANgk2iwD#7~Nj@LT%b{ZzE=){5b71ZRa)%`( z))Xuf45m3;wZwQ%$3C8)$YrIPRrK;@S783U^TOkuhylqm3YFwOn!zUt6*M8d0{fCN%1Z1L-ApV^ z?@gn;-SCL&BM%Xe^bE#I;@5?S5i#fhIl(kFBVSxaQ@if*il1$nSSxt|D6w@s%V#0p zcG0&V7(7`D`TbVdWC0ODD4qhu8RJ-!_!p6)h=hN@!0OkEnFdzQq4=KBkF^wZF*1&C zk!6-l{wDLTiP6`W9U-w8$=Md3YA7OkfdPeDf2$mDGpp_-X)SAV$$mJ%;Paar8>!c=N#yKfXGjqs-^L;?0>Mb(QH<*ihMpNf=ocr
699I>|ScMcdcgt8xL6qqQnOYhB|%&oe^t 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 literal 46658 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 SqvI8RSq>R(e%#FdkN*dZ^mE?; diff --git a/advanced_source/visualizing_gradients_tutorial.py b/advanced_source/visualizing_gradients_tutorial.py index 50b6da0ad1..3c211daa46 100644 --- a/advanced_source/visualizing_gradients_tutorial.py +++ b/advanced_source/visualizing_gradients_tutorial.py @@ -4,31 +4,16 @@ **Author:** `Justin Silver `__ -When training neural networks with PyTorch, it’s possible to ignore some -of the library’s internal mechanisms. For example, running -backpropagation requires a simple call to ``backward()``. This tutorial -dives into how those gradients are calculated and stored in two -different kinds of PyTorch tensors: leaf vs. non-leaf. It will also -cover how we can extract and visualize gradients at any layer in the -network’s computational graph. By inspecting how information flows from -the end of the network to the parameters we want to optimize, we can -debug issues that occur during training such as `vanishing or exploding -gradients `__. - -By the end of this tutorial, you will be able to: - -- Differentiate leaf vs. non-leaf tensors -- Know when to use ``requires_grad`` vs. ``retain_grad`` -- Visualize gradients after backpropagation in a neural network - -We will start off with a simple network to understand how PyTorch -calculates and stores gradients. Building on this knowledge, we will -then visualize the gradient flow of a more complicated model and see the -effect that `batch normalization `__ -has on the gradient distribution. - -Before starting, it is recommended to have a solid understanding of -`tensors and how to manipulate +This tutorial explains the subtleties of ``requires_grad``, +``retain_grad``, leaf, and non-leaf tensors using a simple example. It +then covers how to extract and visualize gradients at any layer in a +neural network. By inspecting how information flows from the end of the +network to the parameters we want to optimize, we can debug issues such +as `vanishing or exploding +gradients `__ that occur during +training. + +Before starting, make sure you understand `tensors and how to manipulate them `__. A basic knowledge of `how autograd works `__ @@ -54,9 +39,9 @@ ###################################################################### -# Next, we will instantiate a simple network so that we can focus on the -# gradients. This will be an affine layer, followed by a ReLU activation, -# and ending with a MSE loss between the prediction and label tensors. +# Next, we instantiate a simple network to focus on the gradients. This +# will be an affine layer, followed by a ReLU activation, and ending with +# a MSE loss between prediction and label tensors. # # .. math:: # @@ -137,8 +122,9 @@ ###################################################################### # The distinction between leaf and non-leaf determines whether the # tensor’s gradient will be stored in the ``grad`` property after the -# backward pass, and thus be usable for gradient descent optimization. -# We’ll cover this some more in the `following section <#retain-grad>`__. +# backward pass, and thus be usable for `gradient +# descent `__. We’ll cover +# this some more in the `following section <#retain-grad>`__. # # Let’s now investigate how PyTorch calculates and stores gradients for # the tensors in its computational graph. @@ -149,24 +135,24 @@ # ``requires_grad`` # ----------------- # -# To start the generation of the computational graph which can be used for -# gradient calculation, we need to pass in the ``requires_grad=True`` -# parameter to a tensor constructor. By default, the value is ``False``, -# and thus PyTorch does not track gradients on any created tensors. To -# verify this, try not setting ``requires_grad``, re-run the forward pass, -# and then run backpropagation. You will see: +# To build the computational graph which can be used for gradient +# calculation, we need to pass in the ``requires_grad=True`` parameter to +# a tensor constructor. By default, the value is ``False``, and thus +# PyTorch does not track gradients on any created tensors. To verify this, +# try not setting ``requires_grad``, re-run the forward pass, and then run +# backpropagation. You will see: # # :: # # >>> loss.backward() # RuntimeError: element 0 of tensors does not require grad and does not have a grad_fn # -# PyTorch is telling us that because the tensor is not tracking gradients, -# autograd can’t backpropagate to any leaf tensors. If you need to change -# the property, you can call ``requires_grad_()`` on the tensor (notice -# the ’_’ suffix). +# This error means that autograd can’t backpropagate to any leaf tensors +# because ``loss`` is not tracking gradients. If you need to change the +# property, you can call ``requires_grad_()`` on the tensor (notice the \_ +# suffix). # -# We can sanity-check which nodes require gradient calculation, just like +# We can sanity check which nodes require gradient calculation, just like # we did above with the ``is_leaf`` attribute: # @@ -176,11 +162,11 @@ ###################################################################### -# It’s useful to remember that by definition a non-leaf tensor has -# ``requires_grad=True``. Backpropagation would fail if this wasn’t the -# case. If the tensor is a leaf, then it will only have +# It’s useful to remember that a non-leaf tensor has +# ``requires_grad=True`` by definition, since backpropagation would fail +# otherwise. If the tensor is a leaf, then it will only have # ``requires_grad=True`` if it was specifically set by the user. Another -# way to phrase this is that if at least one of the inputs to the tensor +# way to phrase this is that if at least one of the inputs to a tensor # requires the gradient, then it will require the gradient as well. # # There are two exceptions to this rule: @@ -193,8 +179,8 @@ # # In summary, ``requires_grad`` tells autograd which tensors need to have # their gradients calculated for backpropagation to work. This is -# different from which gradients have to be stored inside the tensor, -# which is the topic of the next section. +# different from which tensors have their ``grad`` field populated, which +# is the topic of the next section. # @@ -210,9 +196,9 @@ ###################################################################### -# This single function call populated the ``grad`` property of all leaf -# tensors which had ``requires_grad=True``. The ``grad`` is the gradient -# of the loss with respect to the tensor we are probing. Before running +# Calling ``backward()`` populates the ``grad`` field of all leaf tensors +# which had ``requires_grad=True``. The ``grad`` is the gradient of the +# loss with respect to the tensor we are probing. Before running # ``backward()``, this attribute is set to ``None``. # @@ -242,7 +228,7 @@ ###################################################################### -# We also get ``None`` for the gradient, but now PyTorch warns us that a +# PyTorch returns ``None`` for the gradient and also warns us that a # non-leaf node’s ``grad`` attribute is being accessed. Although autograd # has to calculate intermediate gradients for backpropagation to work, it # assumes you don’t need to access the values afterwards. To change this @@ -304,15 +290,21 @@ # >>> x.retain_grad() # RuntimeError: can't retain_grad on Tensor that has requires_grad=False # -# In summary, using ``retain_grad()`` and ``retains_grad`` only make sense -# for non-leaf nodes, since the ``grad`` attribute will already be -# populated for leaf tensors that have ``requires_grad=True``. By default, -# these non-leaf nodes do not retain (store) their gradient after + + +###################################################################### +# Summary table +# ------------- +# +# Using ``retain_grad()`` and ``retains_grad`` only make sense for +# non-leaf nodes, since the ``grad`` attribute will already be populated +# for leaf tensors that have ``requires_grad=True``. By default, these +# non-leaf nodes do not retain (store) their gradient after # backpropagation. We can change that by rerunning the forward pass, # telling PyTorch to store the gradients, and then performing # backpropagation. # -# The following table can be used as a cheat-sheet which summarizes the +# The following table can be used as a reference which summarizes the # above discussions. The following scenarios are the only ones that are # valid for PyTorch tensors. # @@ -344,16 +336,18 @@ # To illustrate the importance of gradient visualization, we will # instantiate one version of the network with batch normalization # (BatchNorm), and one without it. Batch normalization is an extremely -# effective technique to resolve the vanishing/exploding gradients issue, -# and we will be verifying that experimentally. -# -# The model we will use has a specified number of repeating -# fully-connected layers which alternate between ``nn.Linear``, -# ``norm_layer``, and ``nn.Sigmoid``. If we apply batch normalization, -# then ``norm_layer`` will use +# effective technique to resolve `vanishing/exploding +# gradients `__, and we will be verifying +# that experimentally. +# +# The model we use has a configurable number of repeating fully-connected +# layers which alternate between ``nn.Linear``, ``norm_layer``, and +# ``nn.Sigmoid``. If batch normalization is enabled, then ``norm_layer`` +# will use # `BatchNorm1d `__, -# otherwise it will use the identity transformation -# `Identity `__. +# otherwise it will use the +# `Identity `__ +# transformation. # def fc_layer(in_size, out_size, norm_layer): @@ -416,60 +410,60 @@ def forward(self, x): ###################################################################### -# Because we are using a ``nn.Module`` instead of individual tensors for -# our forward pass, we need another method to access the intermediate -# gradients. This is done by `registering a -# hook `__. +# Because we wrapped up the logic and state of our model in a +# ``nn.Module``, we need another method to access the intermediate +# gradients if we want to avoid modifying the module code directly. This +# is done by `registering a +# hook `__. # # .. warning:: # -# Note that using backward pass hooks to probe an intermediate nodes gradient is preferred over using `retain_grad()`. -# It avoids the memory retention overhead if gradients aren't needed after backpropagation. -# It also lets you modify and/or clamp gradients during the backward pass, so they don't vanish or explode. -# However, if in-place operations are performed, you cannot use the backward pass hook -# since it wraps the forward pass with views instead of the actual tensors. For more information -# please refer to https://github.com/pytorch/pytorch/issues/61519. +# Using backward pass hooks attached to output tensors is preferred over using ``retain_grad()`` on the tensors themselves. An alternative method is to directly attach module hooks (e.g. ``register_full_backward_hook()``) so long as the ``nn.Module`` instance does not do perform any in-place operations. For more information, please refer to `this issue `__. # -# The following code defines our forward pass hook (notice the call to -# ``retain_grad()``) and also gathers descriptive names for the network’s -# layers. +# The following code defines our hooks and gathers descriptive names for +# the network’s layers. # -def hook_forward_wrapper(module_name, outputs): - """Python function closure so we can pass args""" +# note that wrapper functions are used for Python closure +# so that we can pass arguments. + +def hook_forward_wrapper(module_name, grads): def hook_forward(module, args, output): - """Hook for forward pass which retains gradients and saves intermediate tensors""" - output.retain_grad() - outputs.append((module_name, output)) + """Forward pass hook which attaches backward pass hooks to intermediate tensors""" + output.register_hook(hook_backward_wrapper(module_name, grads)) return hook_forward + +def hook_backward_wrapper(module_name, grads): + def hook_backward(grad): + """Backward pass hook which appends gradients""" + grads.append((module_name, grad)) + return hook_backward def get_all_layers(model, hook_fn): - """Register forward pass hook to all outputs in model + """Register forward pass hook (hook_fn) to model outputs - Returns layers, a dict with keys as layer/module and values as layer/module names - e.g.: layers[nn.Conv2d] = layer1.0.conv1 - - Returns outputs, a list of tuples with module name and tensor output. e.g.: - outputs[0] == (layer1.0.conv1, tensor.Torch(...)) - - The layer name is passed to a forward hook which will eventually go into a tuple + Returns: + - layers: a dict with keys as layer/module and values as layer/module names + e.g. layers[nn.Conv2d] = layer1.0.conv1 + - grads: a list of tuples with module name and tensor output gradient + e.g. grads[0] == (layer1.0.conv1, tensor.Torch(...)) """ layers = dict() - outputs = [] + grads = [] for name, layer in model.named_modules(): + # skip Sequential and/or wrapper modules if any(layer.children()) is False: - # skip Sequential and/or wrapper modules layers[layer] = name - layer.register_forward_hook(hook_forward_wrapper(name, outputs)) - return layers, outputs + layer.register_forward_hook(hook_fn(name, grads)) + return layers, grads # register hooks -layers_bn, outputs_bn = get_all_layers(model_bn, hook_forward_wrapper) -layers_nobn, outputs_nobn = get_all_layers(model_nobn, hook_forward_wrapper) +layers_bn, grads_bn = get_all_layers(model_bn, hook_forward_wrapper) +layers_nobn, grads_nobn = get_all_layers(model_nobn, hook_forward_wrapper) ###################################################################### -# Now let’s train the models for a few epochs: +# Let’s now train the models for a few epochs: # epochs = 10 @@ -478,8 +472,8 @@ def get_all_layers(model, hook_fn): # important to clear, because we append to # outputs everytime we do a forward pass - outputs_bn.clear() - outputs_nobn.clear() + grads_bn.clear() + grads_nobn.clear() optimizer_bn.zero_grad() optimizer_nobn.zero_grad() @@ -498,33 +492,33 @@ def get_all_layers(model, hook_fn): ###################################################################### -# After running the forward and backward pass, the ``grad`` values for all -# the intermediate tensors should be present in ``outputs_bn`` and -# ``outputs_nobn``. We reduce the gradient matrix to a single number (mean -# absolute value) so that we can compare the two models. +# After running the forward and backward pass, the gradients for all the +# intermediate tensors should be present in ``grads_bn`` and +# ``grads_nobn``. We compute the mean absolute value of each gradient +# matrix so that we can compare the two models. # -def get_grads(outputs): +def get_grads(grads): layer_idx = [] avg_grads = [] - for idx, (name, output) in enumerate(outputs): - if output.grad is not None: - avg_grad = output.grad.abs().mean() + for idx, (name, grad) in enumerate(grads): + if grad is not None: + avg_grad = grad.abs().mean() avg_grads.append(avg_grad) - layer_idx.append(idx) + # idx is backwards since we appended in backward pass + layer_idx.append(len(grads) - 1 - idx) return layer_idx, avg_grads -layer_idx_bn, avg_grads_bn = get_grads(outputs_bn) -layer_idx_nobn, avg_grads_nobn = get_grads(outputs_nobn) +layer_idx_bn, avg_grads_bn = get_grads(grads_bn) +layer_idx_nobn, avg_grads_nobn = get_grads(grads_nobn) ###################################################################### -# Now that we have all our gradients stored in ``avg_grads``, we can plot -# them and see how the average gradient values change as a function of the -# network depth. We see that when we don’t have batch normalization, the -# gradient values in the intermediate layers fall to zero very quickly. -# The batch normalization model, however, maintains non-zero gradients in -# its intermediate layers. +# With the average gradients computed, we can now plot them and see how +# the values change as a function of the network depth. Notice that when +# we don’t apply batch normalization, the gradient values in the +# intermediate layers fall to zero very quickly. The batch normalization +# model, however, maintains non-zero gradients in its intermediate layers. # fig, ax = plt.subplots() @@ -566,7 +560,7 @@ def get_grads(outputs): # - Try increasing the number of layers (``num_layers``) in our model and # see what effect this has on the gradient flow graph # - How would you adapt the code to visualize average activations instead -# of average gradients? (*Hint: in the ``get_grads()`` function we have +# of average gradients? (*Hint: in the hook_forward() function we have # access to the raw tensor output*) # - What are some other methods to deal with vanishing and exploding # gradients? @@ -585,9 +579,6 @@ def get_grads(outputs): # mechanics `__ # - `Batch Normalization: Accelerating Deep Network Training by Reducing # Internal Covariate Shift `__ -# - - -###################################################################### -# +# - `On the difficulty of training Recurrent Neural +# Networks `__ # \ No newline at end of file