示例代码

ii=tf.constant(0,dtype=tf.int32)
loop__cond=lambda a: tf.less(a,sentence_length)
loop__vars=[ii]
def __recurrence(ii):
#前面的0到sentence_length-1的下标,存储的就是最原始的词向量,但是我们也要将其转变为Tensor
new_column_tensor=tf.expand_dims(sentence_embeddings[:,ii],1)
self.nodes_tensor=self.modify_one_column(self.nodes_tensor,new_column_tensor,ii,numlines_tensor,numcolunms_tensor)
ii=tf.add(ii,1)
return ii
ii=tf.while_loop(loop__cond,__recurrence,loop__vars,parallel_iterations=1)

我是将nodes_tensor直接通过self.nodes_tensor的方式使得其成为类的成员变量。然后类调用自身方法的时候,执行上面的循环对nodes_tensor进行操作。

但是,如果此时外层还嵌套有另外一层循环,此时,再使用self.nodes_tensor,比如(tf.reduce_sum(self.nodes_tensor))或者(tf.identity(self.nodes_tensor))就会报错。

会提示类似于如下的信息:

ValueError: Cannot use 'while/Sum' as input to 'while/while_1/concat_3' because they are in different while loops. See info log for more details.

也就是说,self.nodes_tensor是一个对象的引用,其指向的实体是处于一个while loop中。如果在另外一while loop中使用它的话,就会报错。

但是,我们可以将上述代码进行修正,修正后代码如下:

ii=tf.constant(0,dtype=tf.int32)
loop__cond=lambda a,b: tf.less(a,sentence_length)
loop__vars=[ii,nodes_tensor]
def __recurrence(ii,nodes_tensor):
#前面的0到sentence_length-1的下标,存储的就是最原始的词向量,但是我们也要将其转变为Tensor
new_column_tensor=tf.expand_dims(sentence_embeddings[:,ii],1)
nodes_tensor=self.modify_one_column(nodes_tensor,new_column_tensor,ii,numlines_tensor,numcolunms_tensor)
ii=tf.add(ii,1)
return ii,nodes_tensor
ii,nodes_tensor=tf.while_loop(loop__cond,__recurrence,loop__vars,parallel_iterations=1)

此时,通过内层循环返回的nodes_tensor就可以在外层循环中继续使用。

这种错误比较小众。最好的就是用return在__recurrence中返回你想使用的tensor节点。

另一种错误形式

在循环内部产生的tensor,不能直接在循环外部使用。

比如:

self.batch_constructionError=tf.reduce_sum(self.batch_trees_total_cost)[0]

self.batch_trees_total_cost是在循环内部产生的。在循环外部继续加上tf的op操作,会提示如下错误结论:

*** ValueError: Cannot use 'while/concat' as input to 'loss/Sum' because 'while/concat' is in a while loop. See info log for more details.

9 tensorflow提示in different while loops的错误该如何解决的更多相关文章

  1. Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附 ...

  2. SQLServer2005+附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    SQLServer2005+ 附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 我们在用Sql SQLServer2005+附加数据库文件时弹出错误信息如下图的处理办法: 方案一: ...

  3. [经使用有效]Sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    sqlserver2005附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法 最近几天从网上找了几个asp.net的登录案例想要研究研究代码,结果在用 Sql Server2005附 ...

  4. Sqlserver 2012附加数据库时出错提示操作系统错误5(拒绝访问)错误5120的解决办法

    环境: Win10系统 SQLSERver 2012 情况: 使用混合登陆方式,sa账户密码正确登陆后,附加.mdf文件出现此错误. 尝试解决方法一:使用管理员运行SQLSERver2012,sa账户 ...

  5. 使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误

    使用phpmailer发送smtp邮件时提示 SMTP Error: Could not authenticate 错误 这个错误是验证出现错误, $mail->Port = 25; //SMT ...

  6. 运行WampServer时,提示Exception Exception in module wampmanager.exe at 000F15A0.解决办法

    出现问题:运行WampServer时,提示Exception Exception in module wampmanager.exe at 000F15A0.解决办法 出现问题原因: ①:缺少Visu ...

  7. 运行js提示库没有注册错误8002801d的解决办法

    运行js提示库没有注册错误8002801d的解决办法这个错误主要是因为服务器上的windows scripts版本较低,请按下面的链接下载较高版本windows scripts 5.6并在服务器上进行 ...

  8. 安装concrete时提示“...database does not support InnoDB database tables..."如何解决

    安装很多系统时,经常有有提示: "...database does not support InnoDB database tables..." 解决办法: 找到MySQL的配置文 ...

  9. PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法

    这篇文章主要介绍了PHP提示Deprecated: mysql_connect(): The mysql extension is deprecated的解决方法,是在进行PHP数据库程序开发中常会遇 ...

随机推荐

  1. (转)Windows下MySQL :GUI安装和使用(MySQL GUI tools)

    原文:http://blog.csdn.net/dahunbi/article/details/52970815 MySQL GUI Tools是MySQL官方提供的图形化管理工具,功能很强大,值得推 ...

  2. JavaScript位移运算多个大于号的使用方法

    JavaScript中的无符号位移运算符是用三个大于号来表示的 计算方法 例 100>>>2 100的二进制是 01100100 向右移2位后为 00011001 最后结果为25 1 ...

  3. nginx添加多站点

    1.登陆服务器2.修改ngnix配置文件3.重启ngnix4.测试是否添加成功 修改/nginx/conf/nginx.confviminclude /alidata/server/nginx/con ...

  4. 【好书分享】容器网络到kubernetes网络

    Nginx 公司的 Michael Hausenblas 发布了一本关于 docker 和 kubernetes 中的容器网络的小册子.这份资料一共 72 页,是大家由浅入深的了解 Docker 和 ...

  5. 一条命令在Centos7中换163 yum源、安装python3并与python2共存、使用豆瓣pip源加速

    打开一个Terminal: 换yum源: mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup & ...

  6. 面试:C/C++常见库函数实现

    1. void *mymemcpy(void *dest, const void* src, size_t n): 内存拷贝函数,memcpy函数的功能是从源src所指的内存地址的起始位置开始拷贝n个 ...

  7. springMVC中ModelAndView学写笔记

    api介绍: 构造函数摘要 ModelAndView()           bean样式用法的默认构造函数:填充bean属性,而不是传递构造函数参数. ModelAndView(Object vie ...

  8. 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装”

    (摘自http://blog.sina.com.cn/s/blog_14eea47cb0102w25n.html) 解决火狐浏览器安装不上Selenium IDE插件“此附加组件无法安装” 1.打开火 ...

  9. Python使用Redis数据库

    Redis 简介 Redis是开源的高性能Key-Value数据库,可以用于缓存等用途. Redis可以提供事务和持久化支持保证并发安全性,并提供TTL(time to life)服务. 使用Redi ...

  10. [转]ASP.NET MVC4中@model使用多个类型实例的方法

    本文转自:http://blog.csdn.net/hulihui/article/details/48199897 有时需要在ASP.NET MVC4的视图的@model中使用多个类型的实例,.NE ...