Add notebooks
This commit is contained in:
293
tutorial-contents-notebooks/202_variable.ipynb
Normal file
293
tutorial-contents-notebooks/202_variable.ipynb
Normal file
@ -0,0 +1,293 @@
|
||||
{
|
||||
"cells": [
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"# 202 Variable\n",
|
||||
"\n",
|
||||
"View more, visit my tutorial page: https://morvanzhou.github.io/tutorials/\n",
|
||||
"My Youtube Channel: https://www.youtube.com/user/MorvanZhou\n",
|
||||
"\n",
|
||||
"Dependencies:\n",
|
||||
"* torch: 0.1.11\n",
|
||||
"\n",
|
||||
"Variable in torch is to build a computational graph,\n",
|
||||
"but this graph is dynamic compared with a static graph in Tensorflow or Theano.\n",
|
||||
"So torch does not have placeholder, torch can just pass variable to the computational graph.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 1,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"import torch\n",
|
||||
"from torch.autograd import Variable"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 2,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"\n",
|
||||
" 1 2\n",
|
||||
" 3 4\n",
|
||||
"[torch.FloatTensor of size 2x2]\n",
|
||||
"\n",
|
||||
"Variable containing:\n",
|
||||
" 1 2\n",
|
||||
" 3 4\n",
|
||||
"[torch.FloatTensor of size 2x2]\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"tensor = torch.FloatTensor([[1,2],[3,4]]) # build a tensor\n",
|
||||
"variable = Variable(tensor, requires_grad=True) # build a variable, usually for compute gradients\n",
|
||||
"\n",
|
||||
"print(tensor) # [torch.FloatTensor of size 2x2]\n",
|
||||
"print(variable) # [torch.FloatTensor of size 2x2]"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Till now the tensor and variable seem the same.\n",
|
||||
"\n",
|
||||
"However, the variable is a part of the graph, it's a part of the auto-gradient.\n"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 3,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"name": "stdout",
|
||||
"output_type": "stream",
|
||||
"text": [
|
||||
"7.5\n",
|
||||
"Variable containing:\n",
|
||||
" 7.5000\n",
|
||||
"[torch.FloatTensor of size 1]\n",
|
||||
"\n"
|
||||
]
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"t_out = torch.mean(tensor*tensor) # x^2\n",
|
||||
"v_out = torch.mean(variable*variable) # x^2\n",
|
||||
"print(t_out)\n",
|
||||
"print(v_out)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 4,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"outputs": [],
|
||||
"source": [
|
||||
"v_out.backward() # backpropagation from v_out"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"$$ v_{out} = {{1} \\over {4}} sum(variable^2) $$\n",
|
||||
"\n",
|
||||
"the gradients w.r.t the variable, \n",
|
||||
"\n",
|
||||
"$$ {d(v_{out}) \\over d(variable)} = {{1} \\over {4}} 2 variable = {variable \\over 2}$$\n",
|
||||
"\n",
|
||||
"let's check the result pytorch calculated for us below:"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Variable containing:\n",
|
||||
" 0.5000 1.0000\n",
|
||||
" 1.5000 2.0000\n",
|
||||
"[torch.FloatTensor of size 2x2]"
|
||||
]
|
||||
},
|
||||
"execution_count": 5,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"variable.grad"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"Variable containing:\n",
|
||||
" 1 2\n",
|
||||
" 3 4\n",
|
||||
"[torch.FloatTensor of size 2x2]"
|
||||
]
|
||||
},
|
||||
"execution_count": 6,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"variable # this is data in variable format"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"\n",
|
||||
" 1 2\n",
|
||||
" 3 4\n",
|
||||
"[torch.FloatTensor of size 2x2]"
|
||||
]
|
||||
},
|
||||
"execution_count": 7,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"variable.data # this is data in tensor format"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"array([[ 1., 2.],\n",
|
||||
" [ 3., 4.]], dtype=float32)"
|
||||
]
|
||||
},
|
||||
"execution_count": 8,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"variable.data.numpy() # numpy format"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "markdown",
|
||||
"metadata": {},
|
||||
"source": [
|
||||
"Note that we did `.backward()` on `v_out` but `variable` has been assigned new values on it's `grad`.\n",
|
||||
"\n",
|
||||
"As this line \n",
|
||||
"```\n",
|
||||
"v_out = torch.mean(variable*variable)\n",
|
||||
"``` \n",
|
||||
"will make a new variable `v_out` and connect it with `variable` in computation graph."
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"torch.autograd.variable.Variable"
|
||||
]
|
||||
},
|
||||
"execution_count": 9,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"type(v_out)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"outputs": [
|
||||
{
|
||||
"data": {
|
||||
"text/plain": [
|
||||
"torch.FloatTensor"
|
||||
]
|
||||
},
|
||||
"execution_count": 10,
|
||||
"metadata": {},
|
||||
"output_type": "execute_result"
|
||||
}
|
||||
],
|
||||
"source": [
|
||||
"type(v_out.data)"
|
||||
]
|
||||
},
|
||||
{
|
||||
"cell_type": "code",
|
||||
"execution_count": null,
|
||||
"metadata": {
|
||||
"collapsed": true
|
||||
},
|
||||
"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.5.2"
|
||||
}
|
||||
},
|
||||
"nbformat": 4,
|
||||
"nbformat_minor": 2
|
||||
}
|
||||
Reference in New Issue
Block a user