TensorFlow
TensorFlow核心程序由2个独立部分组成:
node1 = tf.constant(3.0, dtype=tf.float32) node2 = tf.constant(4.0)# also tf.float32 implicitly print(node1, node2)
结果:
Tensor("Const:0", shape=(), dtype=float32) Tensor("Const_1:0",shape=(), dtype=float32)
1.2运行计算图
我们必须用到session:一个session封装了TensorFlow运行时的控制和状态
sess = tf.Session() print(sess.run([node1, node2]))
1.3 我们可以组合Tensor节点操作(操作仍然是一个节点)来构造更加复杂的计算,
node3 = tf.add(node1, node2) print("node3:", node3) print("sess.run(node3):", sess.run(node3))
运行结果:
node3:Tensor("Add:0", shape=(), dtype=float32) sess.run(node3):7.0
1.4 TensorFlow提供一个统一的调用称之为TensorBoard,它能展示一个计算图的图片;如下面这个截图就展示了这个计算图
a = tf.placeholder(tf.float32) b = tf.placeholder(tf.float32) adder_node = a + b # + provides a shortcut for tf.add(a, b)
print(sess.run(adder_node, {a:3, b:4.5})) print(sess.run(adder_node, {a: [1,3], b: [2,4]}))
7.5
[3. 7.]
add_and_triple = adder_node *3. print(sess.run(add_and_triple, {a:3, b:4.5})) 输出结果是: 22.5
W = tf.Variable([.3], dtype=tf.float32) b = tf.Variable([-.3], dtype=tf.float32) x = tf.placeholder(tf.float32) linear_model = W*x + b
1.8 当你调用tf.constant时常量被初始化,它们的值是不可以改变的,而变量当你调用tf.Variable时没有被初始化,
1 init = tf.global_variables_initializer() 2 sess.run(init)
1.9 要实现初始化所有全局变量的TensorFlow子图的的处理是很重要的,直到我们调用sess.run,这些变量都是未被初始化的。
1 print(sess.run(linear_model, {x: [1,2,3,4]})) 2 求值linear_model 3 输出为 4 [0. 0.30000001 0.60000002 0.90000004]
1.10 我们已经创建了一个模型,但是我们至今不知道它是多好,在这些训练数据上对这个模型进行评估,我们需要一个
1 y = tf.placeholder(tf.float32) 2 squared_deltas = tf.square(linear_model - y) 3 loss = tf.reduce_sum(squared_deltas) 4 print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]})) 5 输出的结果为 6 23.66
1.11 我们分配一个值给W和b(得到一个完美的值是-1和1)来手动改进这一点,一个变量被初始化一个值会调用tf.Variable,
fixW=tf.assign(W,[1.]) fixb = tf.assign(b, [1.]) sess.run([fixW, fixb]) print(sess.run(loss, {x: [1,2,3,4], y: [0, -1, -2, -3]})) 最终打印的结果是: 0.0
1.12 tf.train APITessorFlow提供optimizers(优化器),它能慢慢改变每一个变量以最小化损失函数,最简单的优化器是
optimizer = tf.train.GradientDescentOptimizer(0.01) train = optimizer.minimize(loss) sess.run(init)# reset values to incorrect defaults. for iin range(1000): sess.run(train, {x: [1,2,3,4], y: [0, -1, -2, -3]}) print(sess.run([W, b])) 输出结果为 [array([-0.9999969], dtype=float32), array([ 0.99999082], dtype=float32)]
本文仅用于学习研究,非商业用途,如需参考,请注明出处,作者:木子龙。
本文参考了以下地址的讲解,万分感谢,如有侵权,请联系我会尽快删除,929994365@qq.com:
https://blog.csdn.net/lengguoxing/article/details/78456279
https://www.cnblogs.com/kang06/p/9373600.html