tf.assign, tf.while_loop的一些理解和坑

本文介绍了在TensorFlow中使用tf.assign和tf.while_loop时可能遇到的问题和理解。tf.assign本质是对Variable的内存区域进行赋值,其输出是一个tensor,但在某些情况下可能会导致意外的结果。tf.while_loop中的循环变量处理需要注意操作顺序和类型转换,以避免执行顺序的不确定性。理解这些细节有助于深入掌握TensorFlow的工作原理。
摘要由CSDN通过智能技术生成

炎炎夏天,如果如果还开个满负荷运转的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函

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值