标签:build imp rev NPU oss rally import shape proc
Computation graph
TensorFlow separates definition of computations from their execution
Phase 1: assemble a graph
Phase 2: use a session to execute operations in the graph.
TensorBoard
tf.constant and tf.Variable
Constant values are stored in the graph definition
Sessions allocate memory to store variable values
tf.placeholder and feed_dict
Feed values into placeholders with a dictionary (feed_dict)
Easy to use but poor performance
Avoid lazy loading
Phase 1: Assemble our graph
Phase 2: Train our model
在完成phase 1之后,使用tf.summary创建graph的log文件,以备tensorboard可视化
Write log files using a FileWriter: writer = tf.summary.FileWriter(‘./graphs/linear_reg‘, sess.graph)
e.g. Implementing Huber loss
description:
code:
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)
TF Control Flow-table
Control Flow Ops | tf.group, tf.count_up_to, tf.cond, tf.case, tf.while_loop, ... |
Comparison Ops | tf.equal, tf.not_equal, tf.less, tf.greater, tf.where, ... |
Logical Ops | tf.logical_and, tf.logical_not, tf.logical_or, tf.logical_xor |
Debugging Ops | tf.is_finite, tf.is_inf, tf.is_nan, tf.Assert, tf.Print, ... |
Placeholder
Pro: put the data processing outside TensorFlow, making it easy to do in Python
Cons: users often end up processing their data in a single thread and creating data bottleneck that slows execution down.
tf.data:
Instead of doing inference with placeholders and feeding in data later, do inference directly with data
tf.data.Dataset
tf.data.Iterator
tf.data.Dataset
from variables
tf.data.Dataset.from_tensor_slices((features, labels))
tf.data.Dataset.from_generator(gen, output_types, output_shapes)
dataset = tf.data.Dataset.from_tensor_slices((data[:,0], data[:,1]))
from file
tf.data.TextLineDataset(filenames)
tf.data.FixedLengthRecordDataset(filenames)
tf.data.TFRecordDataset(filenames)
tf.data.Iterator
Create an iterator to iterate through samples in Dataset
e.g.
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.
#
iterator = dataset.make_one_shot_iterator()
X, Y = iterator.get_next() # X is the birth rate, Y is the life expectancy
with tf.Session() as sess:
print(sess.run([X, Y])) # >> [1.822, 74.82825]
print(sess.run([X, Y])) # >> [3.869, 70.81949]
print(sess.run([X, Y])) # >> [3.911, 72.15066]
#
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
Handling data in TensorFlow
e.g.
dataset = dataset.shuffle(1000)
dataset = dataset.repeat(100)
dataset = dataset.batch(128)
dataset = dataset.map(lambda x: tf.one_hot(x, 10))
# convert each elem of dataset to one_hot vector
How does TensorFlow know what variables to update? Optimizer
e.g.
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.01).minimize(loss)
_, l = sess.run([optimizer, loss], feed_dict={X: x, Y:y})
# Session looks at all trainable variables that loss depends on and update them
# 比如weight,bias,gradiets_1丢到GradientDescent(),但是只要weights和bias是trainable
Trainable variables
tf.Variable(initial_value=None, trainable=True,...)
# Specify if a variable should be trained or not
# By default, all variables are trainable
List of optimizers in TF
tf.train.GradientDescentOptimizer
tf.train.AdagradOptimizer
tf.train.MomentumOptimizer
tf.train.AdamOptimizer
tf.train.FtrlOptimizer
tf.train.RMSPropOptimizer
...
#
#“Advanced” optimizers work better when tuned, but are generally harder to tune
MNIST Database: Each image is a 28x28 array, flattened out to be a 1-d tensor of size 784.
X: image of a handwritten digit
Y: the digit value
Recognize the digit in the image
Model: Inference:
Y_predicted = softmax(X * w + b)
Cross entropy loss: -log(Y_predicted)
Process data:
from tensorflow.examples.tutorials.mnist import input_data
MNIST = input_data.read_data_sets('data/mnist', one_hot=True)
# MNIST.train: 55,000 examples
# MNIST.validation: 5,000 examples
# MNIST.test: 10,000 examples
# No immediate way to convert Python generators to tf.data.Dataset
#
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()
# problem:
# Can only do inference with train_data.
# Need to build another subgraph with another iterator for test_data!!!
# so improvement。。。
#
# 因为这里的train_data,test_data的type及shape都是相同,同一个dataset来的,只是有不同用途,所以可以共用一个iterator的base class
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) # initializer for train_data
test_init = iterator.make_initializer(test_data) # initializer for train_data
#
#
# Initialize iterator with the dataset you want
with tf.Session() as sess:
...
for i in range(n_epochs):
sess.run(train_init) # use train_init during training loop
try:
while True:
_, l = sess.run([optimizer, loss])
except tf.errors.OutOfRangeError:
pass
#
# test the model
sess.run(test_init) # use test_init during testing
try:
while True:
sess.run(accuracy)
except tf.errors.OutOfRangeError:
pass
Phase 1: Assemble our graph
Step 1: Read in data
Step 2: Create datasets and iterator
train_data = tf.data.Dataset.from_tensor_slices(train)
train_data = train_data.shuffle(10000) # optional(train必须置乱D_train)
train_data = train_data.batch(batch_size)
test_data = tf.data.Dataset.from_tensor_slices(test)
test_data = test_data.batch(batch_size)
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)
Step 3: Create weights and biases
use tf.get_variable()
Step 4: Build model to predict Y
logits = tf.matmul(img, w) + b
# We don’t do softmax here, as we’ll do softmax together with cross_entropy loss.
# It’s more efficient to compute gradients w.r.t. logits than w.r.t. softmax
Step 5: Specify loss function
entropy = tf.nn.softmax_cross_entropy_with_logits(labels=label, logits=logits)
# 等价于先做softmax,再对概率化后的logits和本身就是0或1的labels做cross entropy
loss = tf.reduce_mean(entropy)
Step 6: Create optimizer
tf.train.AdamOptimizer(learning_rate=0.01).minimize(loss)
Phase 2: Train our model
TensorBoard it
标签:build imp rev NPU oss rally import shape proc
原文地址:https://www.cnblogs.com/LS1314/p/10366235.html