首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >在递归循环中分配给TensorFlow变量

在递归循环中分配给TensorFlow变量
EN

Stack Overflow用户
提问于 2018-08-20 11:35:59
回答 1查看 132关注 0票数 2

在Tensorflow 1.9中,我希望创建一个网络,然后递归地将网络的输出(预测)反馈到网络的输入中。在这个循环中,我希望将网络所做的预测存储在一个列表中。

以下是我的尝试:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
    # Define the number of steps over which to loop the network
    num_steps = 5

    # Define the network weights
    weights_1 = np.random.uniform(0, 1, [1, 10]).astype(np.float32)
    weights_2 = np.random.uniform(0, 1, [10, 1]).astype(np.float32)

    # Create a variable to store the predictions, one for each loop
    predictions = tf.Variable(np.zeros([num_steps, 1]), dtype=np.float32)

    # Define the initial prediction to feed into the loop
    initial_prediction = np.array([[0.1]], dtype=np.float32)
    x = initial_prediction

    # Loop through the predictions
    for step_num in range(num_steps):
        x = tf.matmul(x, weights_1)
        x = tf.matmul(x, weights_2)
        predictions[step_num-1].assign(x)

    # Define the final prediction
    final_prediction = x

    # Start a session
    sess = tf.Session()
    sess.run(tf.global_variables_initializer())

    # Make the predictions
    last_pred, all_preds = sess.run([final_prediction, predictions])
    print(last_pred)
    print(all_preds)

这个打印出来:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
[[48.8769]]

[[0.]
 [0.]
 [0.]
 [0.]
 [0.]]

因此,虽然final_prediction的值看起来是正确的,但predictions的值并不如我所期望的那样。predictions似乎从来没有被实际分配给,尽管行predictions[step_num-1].assign(x)

请有人给我解释一下为什么这不管用,我该做什么呢?谢谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-20 13:14:09

之所以会发生这种情况,是因为assign ist和其他任何TF一样只是一个TF op,因此只有在需要时才会执行。由于到final_prediction的路径上没有任何东西依赖于赋值op,而且predictions只是一个变量,所以分配永远不会执行。

我认为最直截了当的解决办法是替换这条线路

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
predictions[step_num-1].assign(x)

通过

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
x = predictions[step_num-1].assign(x)

这是因为assign还返回它正在赋值的值。现在,要计算final_prediction TF,实际上需要“通过”assign操作,因此应该执行任务。

另一种选择是使用tf.control_dependencies,这是一种在计算其他操作时“强迫”TF计算特定操作的方法。但是,在这种情况下,它可能有点不舒服,因为我们要强制的op (assign)取决于循环中正在计算的值,而且我不确定TF在这种情况下执行操作的顺序。下列措施应能发挥作用:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for step_num in range(num_steps):
    x = tf.matmul(x, weights_1)
    x = tf.matmul(x, weights_2)
    with tf.control_dependencies([predictions[step_num-1].assign(x)]):
        x = tf.identity(x)

我们使用tf.identity作为noop,只是为了用control_dependencies包装一些东西。我认为这是两者之间比较灵活的选择。然而,它附带了在医生们中讨论的一些注意事项。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51937445

复制
相关文章
【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )
如果需要在外部访问 for 循环的临时变量 , 建议将该 临时变量 预定义在 for 循环的外部 , 然后在后续的所有代码中可以访问该 临时变量 ;
韩曙亮
2023/10/11
7460
【Python】循环语句 ⑥ ( 变量作用域 | for 循环临时变量访问 | 分析在 for 循环外部访问临时变量的问题 | 在 for 循环外部访问临时变量的正确方式 )
在递归函数中因不正确使用公共变量而形成死循环
昨天碰到了挺郁闷的错误,我写的一个递归函数,形成了死循环。代码如下: '递归删除频道,参数:频道ID Sub DeleteBoard(bid)     '删除该频道所有新闻     News.DeleteByCondition "BoardID=" & bid     '删除该频道所有子频道     Dim bs     bs = Board.GetList("FartherID=" & bid, false, -, -)     If IsArray(bs) Then         For i=LBo
大石头
2018/03/12
3.4K0
for循环、递归、回溯
递归:无限调用自身这个函数,每次调用总会改动一个关键变量,直到这个关键变量达到边界的时候,不再调用。
vv彭
2020/10/27
1.2K0
for循环、递归、回溯
循环?还是递归?
--------------------------------------------------------------------------
xcbeyond
2020/03/25
1.2K0
循环?还是递归?
递归改成循环_递归比循环效率高吗
递归容易造成栈溢出,在jdk1.5前虚拟机给每个栈桢的运行空间128kb,在1.5以后为1m的运行空间.递归是指先进后出,也就是说第一进栈的对象会最后一个出站,然后栈桢的空间只有1m,生产环境的数据需要递归的深度,一般情况下我们无法通过测试来进行模拟。所以对于递归的深度不可把控的情况下,是有栈溢出的风险。
全栈程序员站长
2022/09/30
6020
递归改成循环_递归比循环效率高吗
【SQL】小心在循环中声明变量——浅析SQL变量作用域
如果你认为这个语句跑起来没问题,那你值得看下去,会避免以后踩到【SQL变量作用域】的坑。
AhDung
2019/02/25
1.7K0
循环、递归与魔术(一)——递归与循环的数理逻辑
今天我们开启一段新的旅程,聊聊循环(circulation)和递归(recursion)背后的数理逻辑以及艺术应用。
magic2728
2019/10/28
1.4K0
循环、递归与魔术(一)——递归与循环的数理逻辑
变量运算及循环变量
变量就像一个存储数据的盒子,每次设置变量的值,就会修改变量中存储的内容,就像是把盒子里旧的内容倒掉清空,再替换成新的内容。
楚客追梦
2022/11/11
1.2K0
算法--递归--走台阶问题(2种递归+递归改循环)
一个问题可以分解成若干子问题,且求解思路一样,当到一定的情况下有终止条件,这样的问题可以用递归方法求解
Michael阿明
2021/02/20
1.9K0
算法--递归--走台阶问题(2种递归+递归改循环)
SQL递归实现循环判断
以前的文章Python小案例(五)循环判断进行分组介绍了如何使用python解决循环判断的问题。现在重新回顾一下这个问题背景:有一列按照某规则排序后的产品,想打包进行组合售卖。要求按顺序进行价格累积,当价格累积超过2000后,需要从下一个产品重新开始打包。
HsuHeinrich
2023/03/29
2.6K0
SQL递归实现循环判断
在DevOps中分层安全性[DevOps]
将DevSecOps方法分层进行,在强大的安全性需求和快速部署需求之间取得了适当的平衡。
yyx
2019/12/05
8400
在DevOps中分层安全性[DevOps]
python中函数递归VS循环
可以理解为在定义的函数内部调用函数自己,形成一个回路。既然形成了一个回路,那么必须要有一个退出的方式。而这种退出的方式一般都是采用条件判断来实现的。
刘金玉编程
2019/08/01
1.7K0
Tensorflow:模型变量保存
[1]Tensorflow实战Google深度学习框架: https://github.com/caicloud/tensorflow-tutorial/tree/master/Deep_Learning_with_TensorFlow/1.4.0
演化计算与人工智能
2020/08/14
1.3K0
2.2 TensorFlow变量管理
版权声明:本文为博主原创文章,未经博主允许不得转载。python版本为python3,实例都是经过实际验证。 https://blog.csdn.net/jinxiaonian11/article/details/83038677
锦小年
2019/05/27
8190
TensorFlow 使用变量共享
TensorFlow中的变量一般就是模型的参数。当模型复杂的时候共享变量会无比复杂。
10JQKA
2018/08/15
1.3K0
共享变量 tensorflow解读
你可以在怎么使用变量中所描述的方式来创建,初始化,保存及加载单一的变量.但是当创建复杂的模块时,通常你需要共享大量变量集并且如果你还想在同一个地方初始化这所有的变量,我们又该怎么做呢.本教程就是演示如何使用tf.variable_scope() 和tf.get_variable()两个方法来实现这一点.
用户1332428
2018/07/26
7310
循环、递归、分治、回溯、动态规划
采用“试错”思想,尝试“分步”去解决问题。在分步的过程中。根据上层结果,尝试此层最优解决此问题,如果此层较于上层不是最优则回溯。
PayneWu
2020/12/18
5710
递归与循环的效率迷思
已经不记得最初是从哪里获取的信息了,自己总有一个印象是递归的效率比循环差,因为递归有很大的函数调用开销,再加上递归可能存在的堆栈溢出问题(本文暂不考虑该问题),所以书写代码时还是尽量使用循环为好.
用户2615200
2019/07/02
1.4K0
C++核心准则ES.74:尽量在循环变量初始化表达式中定义循环变量​
Limit the loop variable visibility to the scope of the loop. Avoid using the loop variable for other purposes after the loop.
面向对象思考
2020/06/03
9550
点击加载更多

相似问题

递归地分配给Tensorflow中的变量切片

159

在for循环中分配变量

12

在循环中分配变量

47

在批处理中分配给引用变量

13

在循环中分配变量标签

15
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文