炎炎夏天,如果如果还开个满负荷运转的GPU机器训练模型。看着变幻莫测的误差下降曲线,真的有种在炼丹的感觉。
如果你还用TensorFlow,这种不可捉摸的感觉又添加几分,这里就用tf.assign, tf.while_loop两个函数来举例。
aa=tf.Variable([0])
bb=tf.assign(aa,1)
cc=tf.assign(aa,2)
with tf.session() as sess:
sess.run([aa, bb, cc])
请问上面代码运行下来,aa, bb, cc的值分别是什么。
aa=tf.Variable([0])
cc=tf.assign(aa,1)
bb=tf.assign(aa,2)
with tf.session() as sess:
sess.run([aa, bb, cc])
aa=tf.Variable([0])
cc=tf.assign(aa,1)
bb=tf.assign(aa,2)
with tf.session() as sess:
sess.run([aa, cc, bb])
又问这个代码的结果呢?答案是aa,bb,cc的值要不都是1,要不都是2,其中规律非常复杂。为了理解这个现象,需要理解assign函数的本质。
assign函数只能对Variable(准确的说只能对类型为ref的结构)做操作。Variable其实是对应的内存的一块区域的地址,所以其dtype只能为xxx_ref(float32_ref, string_ref)。而assign的第一个参数要求必须传入一个ref类型的变量。
所以assign函