4.3.3 节 调度在TF上的应用(开始学习TensorFlow)
64页末尾直到72页特殊情况上面
讨论的是调度框架在TensorFlow上面的应用。
首先就学习一下TensorFlow,http://c.biancheng.net/view/1885.html 这里讲的很好。
t_random=tf.random_normal([2,3],mean=2.0,stddev=4,seed=12),创建随机张量的方法,2X3的矩阵,均值为2,标准差为4,
seed我猜是随机种子。
tf.truncated_normal也是正态分布的随机数,但是根据3σ原则,距离mean为2σ以上的随机数将会被随机生成,因此叫截断的
正态分布随机数。
t_random_3=tf.random_uniform([2,3],minval=-1.0,maxval=1.0,seed=12),给定上下界的伽玛分布数组,,,不知道为何要用
伽玛分布。
变量
var1=tf.Variable(3) var2=tf.Variable(4) sum=tf.add(var1,var2) with tf.Session() as sess: sess.run(var1.initializer) sess.run(var2.initializer) print(sess.run(sum))
可以看到变量是需要初始化的。
嫌麻烦可以全局化初始化。
代码如下
var1=tf.Variable(3) var2=tf.Variable(4) sum=tf.add(var1,var2) init=tf.global_variables_initializer() with tf.Session() as sess: sess.run(init) print(sess.run(sum))
占位符
感觉更麻烦了。
feed_dict是一个关键字,可以向占位符当中喂数据。
简单的如:
x=tf.placeholder("float") y=2*x data=tf.random_uniform([4,5],10) with tf.Session() as sess: print(sess.run(y),feed_dict={x:sess.run(data)})
只有一步计算
复杂的同样如此
x1=tf.placeholder("float") w1=tf.placeholder("float") x2=tf.placeholder("float") w2=tf.placeholder("float") z1=tf.multiply(x1,w1) z2=tf.multiply(x2,w2) z3=tf.add(z1,z2) with tf.Session() as sess: feed_dict={x1:[1],w1:[2],x2:[3],w2:[4]} print(sess.run(z3,feed_dict))
可以看出在DAG图上的所有占位符可以一次性全都定义完。
然后一个问题就是placeholder声明的时候的那些参数。
要声明:
x1=tf.placeholder("float")
或者
x1=tf.placeholder(tf.float32)
写x1=tf.placeholder(float)是错误的
而且datatype后面也有其他的参数。。好像是数据维度什么的。。。还没搞懂
操作1 tf.cast改变数据类型
import tensorflow as tf b=tf.Variable(tf.random_uniform([5,10],0,2,tf.int32)) with tf.Session() as sess: sess.run(b.initializer) print(sess.run(b))
这段代码生成了一个只包含0,1的矩阵
import tensorflow as tf b=tf.Variable(tf.random_uniform([5,10],0,2,tf.int32)) b_new=tf.cast(b,tf.float32) with tf.Session() as sess: sess.run(b.initializer) print(sess.run(b_new))
这样就把数据类型改为浮点类型了
操作2 另外操作
sess=tf.interactiveSession()
x.initializer.run()
print(x.eval())
这好像是另外一套可行的操作。