{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "https://pytorch.org/tutorials/beginner/blitz/autograd_tutorial.html" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The gradient for this tensor will be accumulated into .grad attribute." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [], "source": [ "import torch" ] }, { "cell_type": "code", "execution_count": 92, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 1.])" ] }, "execution_count": 92, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = torch.ones(1, requires_grad=True); x" ] }, { "cell_type": "code", "execution_count": 93, "metadata": {}, "outputs": [], "source": [ "y = x**2\n", "z = x**3" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### accumulated from `y.backward()` then `z.backward()`" ] }, { "cell_type": "code", "execution_count": 94, "metadata": {}, "outputs": [], "source": [ "y.backward()" ] }, { "cell_type": "code", "execution_count": 95, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 2.])" ] }, "execution_count": 95, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "code", "execution_count": 96, "metadata": {}, "outputs": [], "source": [ "z.backward()" ] }, { "cell_type": "code", "execution_count": 97, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "tensor([ 5.])" ] }, "execution_count": 97, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### accumulated from `z` then `y`" ] }, { "cell_type": "code", "execution_count": 98, "metadata": {}, "outputs": [], "source": [ "x = torch.ones(1, requires_grad=True)\n", "y = x**2\n", "z = x**3" ] }, { "cell_type": "code", "execution_count": 99, "metadata": {}, "outputs": [], "source": [ "z.backward()" ] }, { "cell_type": "code", "execution_count": 100, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 3.])" ] }, "execution_count": 100, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "code", "execution_count": 101, "metadata": {}, "outputs": [], "source": [ "y.backward()" ] }, { "cell_type": "code", "execution_count": 102, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 5.])" ] }, "execution_count": 102, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Set back to 0 after `y.backward()`" ] }, { "cell_type": "code", "execution_count": 103, "metadata": {}, "outputs": [], "source": [ "x = torch.ones(1, requires_grad=True)\n", "y = x**2\n", "z = x**3" ] }, { "cell_type": "code", "execution_count": 104, "metadata": {}, "outputs": [], "source": [ "y.backward()" ] }, { "cell_type": "code", "execution_count": 105, "metadata": { "scrolled": true }, "outputs": [ { "data": { "text/plain": [ "tensor([ 2.])" ] }, "execution_count": 105, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "code", "execution_count": 106, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 0.])" ] }, "execution_count": 106, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad.zero_()" ] }, { "cell_type": "code", "execution_count": 107, "metadata": {}, "outputs": [], "source": [ "z.backward()" ] }, { "cell_type": "code", "execution_count": 90, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([ 3.])" ] }, "execution_count": 90, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## vector version" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0.3725],\n", " [ 0.4378]])" ] }, "execution_count": 3, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x = torch.rand((2, 1), requires_grad = True); x" ] }, { "cell_type": "code", "execution_count": 4, "metadata": {}, "outputs": [], "source": [ "y = torch.zeros(3, 1)\n", "\n", "y[0] = x[0]**2\n", "y[1] = x[1]**3\n", "y[2] = x[1]**4" ] }, { "cell_type": "code", "execution_count": 5, "metadata": {}, "outputs": [], "source": [ "y.backward(gradient=torch.ones(y.size()))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Cummulative grad of `x[0]` and `x[1]` respectively." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "tensor([[ 0.7450],\n", " [ 0.9105]])" ] }, "execution_count": 6, "metadata": {}, "output_type": "execute_result" } ], "source": [ "x.grad" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "(tensor([ 0.7450]), tensor([ 0.5749]), tensor([ 0.3356]))" ] }, "execution_count": 7, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2*x[0], 3*x[1]**2, 4*x[1]**3" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "scrolled": false }, "outputs": [ { "data": { "text/plain": [ "(tensor([ 0.7450]), tensor([ 0.9105]))" ] }, "execution_count": 8, "metadata": {}, "output_type": "execute_result" } ], "source": [ "2*x[0], 3*x[1]**2 + 4*x[1]**3" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.6.4" } }, "nbformat": 4, "nbformat_minor": 2 }