Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Pascal Lamblin
Objectives
2 / 42
Symbolic expressions
Function compilation
Introduction
Optimized execution
Advanced Topics
Theano vision
3 / 42
Symbolic expressions
Function compilation
Introduction
Optimized execution
Advanced Topics
Current status
4 / 42
Symbolic expressions
Function compilation
Introduction
Optimized execution
Advanced Topics
Related projects
5 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Symbolic expressions
Declaring inputs
Defining expressions
Deriving gradients
Function compilation
Compiling a Theano function
Graph optimizations
Graph visualization
Optimized execution
Code generation and execution
GPU
Advanced Topics
Looping: the scan operation
Debugging
Extending Theano
New features
6 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Overview
7 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Symbolic inputs
8 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Shared variables
import numpy as np
np.random.seed(42)
W_val = np.random.randn(4, 3)
b_val = np.ones(3)
W = theano.shared(W_val)
b = theano.shared(b_val)
W.name = 'W'
b.name = 'b'
9 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Build an expression
NumPy-like syntax
dot = T.dot(x, W)
out = T.nnet.sigmoid(dot + b)
C = ((out - y) ** 2).sum()
I This creates new variables
I Outputs of mathematical operations
I Graph structure connecting them
10 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
pydotprint(out, compact=False)
0 1
dot
1 0
Elemwise{add,no_inplace}
TensorType(float64, vector)
sigmoid
TensorType(float64, vector)
11 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
pydotprint(out)
0 1
1 0 TensorType(float64, vector)
Elemwise{add,no_inplace}
TensorType(float64, vector)
sigmoid
TensorType(float64, vector)
12 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
13 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
Using theano.grad
14 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
pydotprint([dC_dW, dC_db])
1 0
DimShuffle{x} Elemwise{scalar_sigmoid} TensorType(float64, vector) val=2 TensorType(int16, scalar) name=y TensorType(float64, vector) sigmoid val=1 TensorType(int8, scalar)
Elemwise{scalar_sigmoid} id=9 1 TensorType(int16, (True,)) 0 TensorType(float64, vector) 0 TensorType(int16, (True,)) 1 TensorType(int8, (True,))
1 0 TensorType(float64, scalar)
TensorType(float64, scalar)
Elemwise{second}
Elemwise{mul}
0 TensorType(float64, vector)
Elemwise{mul} id=20
0 TensorType(float64, vector)
Elemwise{mul} id=21
0 TensorType(float64, vector)
Elemwise{mul} id=22
TensorType(float64, vector)
DimShuffle{x,0}
1 TensorType(float64, row)
dot id=24
TensorType(float64, matrix)
15 / 42
Symbolic expressions
Declaring inputs
Function compilation
Defining expressions
Optimized execution
Deriving gradients
Advanced Topics
pydotprint([upd_W, upd_b])
1 0
val=2 TensorType(int16, scalar) name=y TensorType(float64, vector) sigmoid val=1 TensorType(int8, scalar) TensorType(float64, vector) Elemwise{scalar_sigmoid} DimShuffle{x}
1 TensorType(int16, (True,)) 0 TensorType(float64, vector) 0 TensorType(int16, (True,)) 1 TensorType(int8, (True,)) Elemwise{scalar_sigmoid} id=11
1 0 TensorType(float64, scalar)
TensorType(float64, scalar)
0 TensorType(float64, vector)
Elemwise{mul}
0 TensorType(float64, vector)
Elemwise{mul} id=22
0 TensorType(float64, vector)
0 TensorType(float64, vector)
1 TensorType(float64, matrix)
Elemwise{sub,no_inplace} id=30
TensorType(float64, matrix)
16 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
Symbolic expressions
Declaring inputs
Defining expressions
Deriving gradients
Function compilation
Compiling a Theano function
Graph optimizations
Graph visualization
Optimized execution
Code generation and execution
GPU
Advanced Topics
Looping: the scan operation
Debugging
Extending Theano
New features
17 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
Computing values
18 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
A function can compute new values for shared variables, and perform updates.
train = theano.function([x, y], C,
updates=[(W, upd_W),
(b, upd_b)])
print(b.get_value())
# -> [ 1. 1. 1.]
train(x_val, y_val)
print(b.get_value())
# -> [ 0.9967082 0.99340064 0.97245715]
I Variables W and b are implicit inputs
I Expressions upd_W and upd_b are implicit outputs
I All outputs, including the update expressions, are computed before the
updates are performed
19 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
Graph optimizations
20 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
Enabling/disabling optimizations
21 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
pydotprint(out)
0 1
1 0 TensorType(float64, vector)
Elemwise{add,no_inplace}
TensorType(float64, vector)
sigmoid
TensorType(float64, vector)
22 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
pydotprint(predict)
InplaceDimShuffle{1,0}
TensorType(float64, matrix)
name=b TensorType(float64, vector) val=1.0 TensorType(float64, scalar) name=x TensorType(float64, vector) name=W.T TensorType(float64, matrix)
0 1 4 3 2
CGemv{no_inplace}
TensorType(float64, vector)
Elemwise{ScalarSigmoid}[(0, 0)]
TensorType(float64, vector)
23 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
pydotprint([upd_W, upd_b])
1 0
val=2 TensorType(int16, scalar) name=y TensorType(float64, vector) sigmoid val=1 TensorType(int8, scalar) TensorType(float64, vector) Elemwise{scalar_sigmoid} DimShuffle{x}
1 TensorType(int16, (True,)) 0 TensorType(float64, vector) 0 TensorType(int16, (True,)) 1 TensorType(int8, (True,)) Elemwise{scalar_sigmoid} id=11
1 0 TensorType(float64, scalar)
TensorType(float64, scalar)
0 TensorType(float64, vector)
Elemwise{mul}
0 TensorType(float64, vector)
Elemwise{mul} id=22
0 TensorType(float64, vector)
0 TensorType(float64, vector)
1 TensorType(float64, matrix)
Elemwise{sub,no_inplace} id=30
TensorType(float64, matrix)
24 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
pydotprint(train)
InplaceDimShuffle{1,0}
TensorType(float64, matrix)
3 4 1 2
CGemv{no_inplace}
TensorType(float64, vector)
val=[ 2.] TensorType(float64, (True,)) 2 TensorType(float64, vector) Elemwise{sub,no_inplace} id=4 3 TensorType(float64, vector) Elemwise{sub,no_inplace} val=[ 0.2] TensorType(float64, (True,))
0 1 TensorType(float64, vector) TensorType(float64, vector) 2 TensorType(float64, vector) 3 TensorType(float64, vector) 4 TensorType(float64, vector) 1 0
val=-0.1 TensorType(float64, scalar) Elemwise{Mul}[(0, 1)] Elemwise{sqr,no_inplace} Elemwise{Composite{(i0 - (i1 * i2 * i3 * i4))}}[(0, 0)]
UPDATE
UPDATE
25 / 42
Symbolic expressions
Compiling a Theano function
Function compilation
Graph optimizations
Optimized execution
Graph visualization
Advanced Topics
debugprint
debugprint(predict)
debugprint(out)
Elemwise{ScalarSigmoid}[(0, 0)] [id A] '' 2
sigmoid [id A] '' |CGemv{no_inplace} [id B] '' 1
|Elemwise{add,no_inplace} [id B] '' |b [id C]
|dot [id C] '' |TensorConstant{1.0} [id D]
| |x [id D] |InplaceDimShuffle{1,0} [id E] 'W.T' 0
| |W [id E] | |W [id F]
|b [id F] |x [id G]
|TensorConstant{1.0} [id D]
26 / 42
Symbolic expressions
Function compilation Code generation and execution
Optimized execution GPU
Advanced Topics
Symbolic expressions
Declaring inputs
Defining expressions
Deriving gradients
Function compilation
Compiling a Theano function
Graph optimizations
Graph visualization
Optimized execution
Code generation and execution
GPU
Advanced Topics
Looping: the scan operation
Debugging
Extending Theano
New features
27 / 42
Symbolic expressions
Function compilation Code generation and execution
Optimized execution GPU
Advanced Topics
28 / 42
Symbolic expressions
Function compilation Code generation and execution
Optimized execution GPU
Advanced Topics
29 / 42
Symbolic expressions
Function compilation Code generation and execution
Optimized execution GPU
Advanced Topics
Configuration flags
30 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
Symbolic expressions
Declaring inputs
Defining expressions
Deriving gradients
Function compilation
Compiling a Theano function
Graph optimizations
Graph visualization
Optimized execution
Code generation and execution
GPU
Advanced Topics
Looping: the scan operation
Debugging
Extending Theano
New features
31 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
Overview of scan
Symbolic looping
I Can perform map, reduce, reduce and accumulate, . . .
I Can access outputs at previous time-step, or further back
I Symbolic number of steps
I Symbolic stopping condition (behaves as do ... while)
I Actually embeds a small Theano function
I Gradient through scan implements backprop through time
I Can be transfered to GPU
We will see a use of scan in the LSTM example.
32 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
k = T.iscalar("k")
A = T.vector("A")
# We only care about A**k, but scan has provided us with A**1 through A**k.
# Discard the values that we don't care about. Scan is smart enough to
# notice this and not waste memory saving them.
final_result = result[-1]
print(power(range(10), 2))
# [ 0. 1. 4. 9. 16. 25. 36. 49. 64. 81.]
print(power(range(10), 4))
# [ 0.00000000e+00 1.00000000e+00 1.60000000e+01 8.10000000e+01
# 2.56000000e+02 6.25000000e+02 1.29600000e+03 2.40100000e+03
# 4.09600000e+03 6.56100000e+03]
33 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
34 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
Extending Theano
35 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
36 / 42
Symbolic expressions Looping: the scan operation
Function compilation Debugging
Optimized execution Extending Theano
Advanced Topics New features
37 / 42
Symbolic expressions
Function compilation
Optimized execution
Advanced Topics
Acknowledgements
38 / 42
Symbolic expressions
Function compilation
Optimized execution
Advanced Topics
39 / 42
Symbolic expressions
Function compilation
Optimized execution
Advanced Topics
github.com/lamblin/bayareadlschool/
I Slides: intro_theano.pdf
I Companion notebook: intro_theano.ipynb
40 / 42
Symbolic expressions
Function compilation
Optimized execution
Advanced Topics
github.com/lamblin/bayareadlschool/
I Slides: intro_theano.pdf
I Companion notebook: intro_theano.ipynb
More resources
I Documentation: deeplearning.net/software/theano/
I Code: github.com/Theano/Theano/
I Article: The Theano Development Team, Theano: A Python framework
for fast computation of mathematical expressions,
arxiv.org/abs/1605.02688
I Deep Learning Tutorials: deeplearning.net/tutorial/
41 / 42
Symbolic expressions
Function compilation
Optimized execution
Advanced Topics
Examples
42 / 42