tensorflow google 开源机器学习库

TensorFlow 白皮书

第一代分布式机器学习框架: DistBelief。
第二代:TensorFlow,通用的计算框架!

基本概念

优化

工具

核心图数据结构

class tf.Graph

基本数据类型

a = tf.constant(5.0)
b = tf.constant(6.0)
c = a * b
with tf.Session() as sess:
    print sess.run(c)
    print c.eval()      # just syntactic sugar for sess.run(c) in the currently active session!
W1 = tf.ones((2,2))
W2 = tf.Variable(tf.zeros((2,2)), name="weights")
R = tf.Variable(tf.random_normal((2,2)), name="random_weights")

使用函数tf.initialize_all_variables()参数初始化,初始值在定义的时候给出。
如果要对变量作用域里面的所有变量用同一个初始化方法,可以在定义作用域的时候指定。
参考https://www.tensorflow.org/versions/r0.7/how_tos/variable_scope/index.html#initializers-in-variable-scope

with tf.variable_scope("foo", initializer=tf.constant_initializer(0.4)):
    v = tf.get_variable("v", [1])
    assert v.eval() == 0.4  # Default initializer as set above.

变量的更新,使用方法tf.add, tf.assign等方法

state = tf.Variable(0, name="counter")
new_value = tf.add(state, tf.constant(1))
update = tf.assign(state, new_value)
with tf.Session() as sess:
    sess.run(tf.initialize_all_variables())
    print sess.run(state)
    for _ in range(3):
        sess.run(update)
        print sess.run(state)

0
1
2
3

利用tf.convert_to_tensor方法可以将数值变量转换为张量。

input1 = tf.placeholder(tf.float32)
input2 = tf.placeholder(tf.float32)
output = tf.mul(input1, input2)
with tf.Session() as sess:
    print sess.run([output], feed_dict={input1:[7.], input2:[2.]})

tf.placeholder(dtype, shape=None, name=None)

注意,这里有个大坑,这个字典的键是一个op,而不是一个字符串!!

优化

当得到损失函数之后,可以通过tf.train.Optimizer优化工具来进行优化,实际优化的时候使用的是他的子类,
GradientDescentOptimizer, AdagradOptimizer, or MomentumOptimizer
优化obj通常有以下几个重要方法可以使用。

tf.distrib.learn 框架

一个高级机器学习框架

CPU vs GPU

TIPS

[1] https://www.tensorflow.org/
[2] http://cs224d.stanford.edu/lectures/CS224d-Lecture7.pdf