03 - Lecture Slide - Basic Models in TensorFlow
03 - Lecture Slide - Basic Models in TensorFlow
1
2
Agenda
Review
Control Flow
tf.data
Optimizers, gradients
Loss functions
3
Review
4
Computation graph
5
TensorBoard
x = 2
y = 3 useless pow_op
add_op = tf.add(x, y)
mul_op = tf.multiply(x, y)
useless = tf.multiply(x, add_op)
pow_op = tf.pow(add_op, mul_op)
with tf.Session() as sess:
z = sess.run(pow_op)
add_op mul_op
6
tf.constant and tf.Variable
7
tf.placeholder and feed_dict
8
Avoid lazy loading
9
Download from the class’s GitHub
examples/03_linreg_starter.py
examples/03_logreg_starter.py
examples/utils.py
data/birth_life_2010.txt
10
Linear Regression
in TensorFlow
11
Model the linear relationship between:
● dependent variable Y
● explanatory variables X
12
13
Visualization made by Google, based on data collected by World Bank
World Development Indicators dataset
X: birth rate
Y: life expectancy
190 countries
14
Want
15
Model
Inference: Y_predicted = w * X + b
16
Interactive Coding
data/birth_life_2010.txt
17
Interactive Coding
examples/03_linreg_starter.py
18
Phase 1: Assemble our graph
19
Step 1: Read in data
20
Step 2: Create placeholders for
inputs and labels
21
Step 3: Create weight and bias
tf.get_variable(
No need to specify shape if
using constant initializer
name,
shape=None,
dtype=None,
initializer=None,
) 22
Step 4: Inference
Y_predicted = w * X + b
23
Step 5: Specify loss function
24
Step 6: Create optimizer
opt = tf.train.GradientDescentOptimizer(learning_rate=0.001)
optimizer = opt.minimize(loss)
25
Phase 2: Train our model
26
Write log files using a FileWriter
27
See it on TensorBoard
28
TypeError?
29
TypeError
total_loss = 0
for x, y in data:
total_loss += loss
30
TypeError
total_loss = 0
for x, y in data:
total_loss += loss_
31
32
Plot the results with matplotlib
33
34
Huber loss
Robust to outliers
If the difference between the predicted value and the real value is small, square it
35
Implementing Huber loss
Can’t write:
36
You can write it if eager mode were enabled. Stay tuned for the next lecture!
Implementing Huber loss
37
Implementing Huber loss
tf.cond(pred, fn1, fn2, name=None)
def huber_loss(labels, predictions, delta=14.0):
residual = tf.abs(labels - predictions)
def f1(): return 0.5 * tf.square(residual)
def f2(): return delta * residual - 0.5 * tf.square(delta)
return tf.cond(residual < delta, f1, f2)
38
TF Control Flow
40
Placeholder
41
Placeholder
data, n_samples = utils.read_birth_life_data(DATA_FILE)
X = tf.placeholder(tf.float32, name='X')
Y = tf.placeholder(tf.float32, name='Y')
…
with tf.Session() as sess:
…
# Step 8: train the model
for i in range(100): # run 100 epochs
for x, y in data:
# Session runs train_op to minimize loss
sess.run(optimizer, feed_dict={X: x, Y:y})
42
tf.data
43
tf.data
tf.data.Dataset
tf.data.Iterator
44
Store data in tf.data.Dataset
● tf.data.Dataset.from_tensor_slices((features, labels))
● tf.data.Dataset.from_generator(gen, output_types, output_shapes)
45
Store data in tf.data.Dataset
tf.data.Dataset.from_tensor_slices((features, labels))
46
Store data in tf.data.Dataset
tf.data.Dataset.from_tensor_slices((features, labels))
47
Can also create Dataset from files
● tf.data.TextLineDataset(filenames)
● tf.data.FixedLengthRecordDataset(filenames)
● tf.data.TFRecordDataset(filenames)
48
tf.data.Iterator
49
tf.data.Iterator
● iterator = dataset.make_one_shot_iterator()
● iterator = dataset.make_initializable_iterator()
50
tf.data.Iterator
● iterator = dataset.make_one_shot_iterator()
Iterates through the dataset exactly once. No need to initialization.
● iterator = dataset.make_initializable_iterator()
Iterates through the dataset as many times as we want. Need to initialize with each epoch.
51
tf.data.Iterator
iterator = dataset.make_one_shot_iterator()
X, Y = iterator.get_next() # X is the birth rate, Y is the life expectancy
52
tf.data.Iterator
iterator = dataset.make_initializable_iterator()
...
for i in range(100):
sess.run(iterator.initializer)
total_loss = 0
try:
while True:
sess.run([optimizer])
except tf.errors.OutOfRangeError:
pass
53
Handling data in TensorFlow
dataset = dataset.shuffle(1000)
dataset = dataset.repeat(100)
dataset = dataset.batch(128)
54
Does tf.data really perform better?
55
Does tf.data really perform better?
56
Should we always use tf.data?
● For prototyping, feed dict can be faster and easier to write (pythonic)
● tf.data is tricky to use when you have complicated preprocessing or multiple
data sources
● NLP data is normally just a sequence of integers. In this case, transferring the
data over to GPU is pretty quick, so the speedup of tf.data isn't that large
57
How does TensorFlow know what variables
to update?
58
Optimizers
59
Optimizer
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
60
Optimizer
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001).minimize(loss)
Session looks at all trainable variables that loss depends on and update them
61
Optimizer
Session looks at all trainable variables that optimizer depends on and update them
62
Trainable variables
tf.Variable(initial_value=None, trainable=True,...)
63
List of optimizers in TF
tf.train.GradientDescentOptimizer
tf.train.AdagradOptimizer
“Advanced” optimizers work better when tuned,
tf.train.MomentumOptimizer but are generally harder to tune
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.RMSPropOptimizer
...
64
Discussion question
65
Assignment 1
Out tomorrow
Due 1/31
Optional Interactive Grading
66
Logistic Regression
in TensorFlow
67
Then he separated the
light from the darkness
69
MNIST
70
MNIST
71
Model
72
Process data
from tensorflow.examples.tutorials.mnist import input_data
MNIST = input_data.read_data_sets('data/mnist', one_hot=True)
73
Process data
from tensorflow.examples.tutorials.mnist import input_data
MNIST = input_data.read_data_sets('data/mnist', one_hot=True)
74
Process data
from tensorflow.examples.tutorials.mnist import input_data
MNIST = input_data.read_data_sets('data/mnist', one_hot=True)
75
Process data
mnist_folder = 'data/mnist'
utils.download_mnist(mnist_folder)
train, val, test = utils.read_mnist(mnist_folder, flatten=True)
76
Create datasets
mnist_folder = 'data/mnist'
utils.download_mnist(mnist_folder)
train, val, test = utils.read_mnist(mnist_folder, flatten=True)
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
test_data = tf.data.Dataset.from_tensor_slices(test)
77
Create iterator
mnist_folder = 'data/mnist'
utils.download_mnist(mnist_folder)
train, val, test = utils.read_mnist(mnist_folder, flatten=True)
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
test_data = tf.data.Dataset.from_tensor_slices(test)
iterator = train_data.make_initializable_iterator()
78
Create iterator
mnist_folder = 'data/mnist'
utils.download_mnist(mnist_folder)
train, val, test = utils.read_mnist(mnist_folder, flatten=True)
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
test_data = tf.data.Dataset.from_tensor_slices(test)
iterator = train_data.make_initializable_iterator()
Problem?
img, label = iterator.get_next()
…
79
Create iterator
mnist_folder = 'data/mnist'
utils.download_mnist(mnist_folder)
train, val, test = utils.read_mnist(mnist_folder, flatten=True)
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
test_data = tf.data.Dataset.from_tensor_slices(test)
iterator = train_data.make_initializable_iterator()
img, label = iterator.get_next()
…
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
test_data = tf.data.Dataset.from_tensor_slices(test)
iterator = tf.data.Iterator.from_structure(train_data.output_types,
train_data.output_shapes)
img, label = iterator.get_next()
82
Initialize iterator with the dataset you want
with tf.Session() as sess:
...
for i in range(n_epochs):
sess.run(train_init)
try:
while True:
_, l = sess.run([optimizer, loss])
except tf.errors.OutOfRangeError:
pass
84
Step 1: Read in data
85
Step 2: Create datasets and iterator
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional
train_data = train_data.batch(batch_size)
test_data = tf.data.Dataset.from_tensor_slices(test)
test_data = test_data.batch(batch_size)
86
Step 2: Create datasets and iterator
iterator =
tf.data.Iterator.from_structure(train_data.output_types,
train_data.output_shapes)
img, label = iterator.get_next()
train_init = iterator.make_initializer(train_data)
test_init = iterator.make_initializer(test_data)
87
Step 3: Create weights and biases
use tf.get_variable()
88
Step 4: Build model to predict Y
logits = tf.matmul(img, w) + b
89
Step 5: Specify loss function
entropy = tf.nn.softmax_cross_entropy_with_logits(labels=label,
logits=logits)
loss = tf.reduce_mean(entropy)
90
Step 6: Create optimizer
tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss)
91
Phase 2: Train our model
92
TensorBoard it
93
Next class
Structure your model in TensorFlow
Example: word2vec
Eager execution
Feedback: [email protected]
Thanks!
94