tf.zeros() 的动态大小(与无尺寸的占位符一起使用)

2023-12-25

考虑以下代码:

x = tf.placeholder("float", shape=[42, 4])
y = tf.zeros([42, 4], "float")
xy_stacked = tf.concat(1, [x, y])

print(x.get_shape())
print(y.get_shape())
print(xy_stacked.get_shape())

正如预期的那样,这将产生以下输出:

TensorShape([Dimension(42), Dimension(4)])
TensorShape([Dimension(42), Dimension(4)])
TensorShape([Dimension(42), Dimension(8)])

但是,如果占位符具有动态尺寸,该尺寸在运行时由传递给的值确定feed_dict=,就像占位符经常做的那样:

x = tf.placeholder("float", shape=[None, 4])
y = tf.zeros([None, 4], "float")
xy_stacked = tf.concat(1, [x, y])

这将产生一个错误tf.zeros([None, 4], "float")。显然Dimension(None)不允许用于tf.zeros:

TypeError                                 Traceback (most recent call last)
<ipython-input-24-277eca38a392> in <module>()
      2 
      3 x = tf.placeholder("float", shape=[None, 4])
----> 4 y = tf.zeros([None, 4], "float")
      5 xy_stacked = tf.concat(1, [x, y])
      6 
[...]

/usr/local/lib/python3.4/dist-packages/numpy/core/_methods.py in _prod(a, axis, dtype, out, keepdims)
     33 
     34 def _prod(a, axis=None, dtype=None, out=None, keepdims=False):
---> 35     return umr_prod(a, axis, dtype, out, keepdims)
     36 
     37 def _any(a, axis=None, dtype=None, out=None, keepdims=False):

TypeError: unsupported operand type(s) for *: 'NoneType' and 'int'

我发现如果我将零张量的第一个维度设置为非无,例如 1,它不会产生错误:

x = tf.placeholder("float", shape=[None, 4])
y = tf.zeros([1, 4], "float")
xy_stacked = tf.concat(1, [x, y])

但随后产生的xy_stacked张量被截断为以下大小:

TensorShape([Dimension(None), Dimension(4)])
TensorShape([Dimension(1), Dimension(4)])
TensorShape([Dimension(1), Dimension(8)])

如何用零填充占位符张量,以便获得形状张量TensorShape([Dimension(None), Dimension(8)])在这个例子中?

到目前为止,我发现的唯一“解决方案”是如下所示:

x = tf.placeholder("float", shape=[None, 4])
y = 0 * x
xy_stacked = tf.concat(1, [x, y])

或者简单地声明y作为占位符并始终传递正确大小的零数组。

但这看起来都不是问题的干净解决方案,并且在比这个简单示例更复杂的应用程序中,类似的黑客行为很快就会失控。

我在用着tensorflow-0.6.0-py3.


使用以下方法制作零张量的推荐方法same形状作为另一个张量是使用tf.zeros_like() https://www.tensorflow.org/api_docs/python/tf/zeros_like op:

x = tf.placeholder(tf.float32, shape=[None, 4])
y = tf.zeros_like(x)

得到的张量y似乎有形状[None, None]根据Tensor.get_shape() https://www.tensorflow.org/api_docs/python/tf/Tensor#get_shape,但在运行时它会扩展为与x:

print y.get_shape()
# ==> TensorShape([Dimension(None), Dimension(None)])

sess = tf.Session()
y_result = sess.run(y, feed_dict={x: np.random.rand(4, 4)})

print y_result.shape
# ==> (4, 4)

The [None, None]返回静态形状,因为形状推断尚未专门用于tf.zeros_like()。我已经提交了一份GitHub 问题 https://github.com/tensorflow/tensorflow/issues/744它应该很快就能修复。


EDIT:在您的评论中,您询问如何处理零张量的形状基于的情况,但是不同于原始张量。这也是可能的,使用tf.shape() https://www.tensorflow.org/api_docs/python/tf/shape and tf.stack() https://www.tensorflow.org/api_docs/python/tf/stack构建维度,以及tf.fill() https://www.tensorflow.org/api_docs/python/tf/fill产生零张量:

x = tf.placeholder(tf.float32, shape=[None, 4])

# Use tf.shape() to get the runtime size of `x` in the 0th dimension.
zeros_dims = tf.stack([tf.shape(x)[0], 7])

y = tf.fill(zeros_dims, 0.0)

sess = tf.Session()
y_result = sess.run(y, feed_dict={x: np.random.rand(4, 4)})
print y_result.shape
# ==> (4, 7)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

tf.zeros() 的动态大小(与无尺寸的占位符一起使用) 的相关文章

随机推荐

  • 如何在 ASP.NET/C# 中检查 URL 的顶级域?

    假设 www mysite fr home 是 URL 现在如何从中获取 fr 只是 fr 实际上我想做的是在检测到访问者的国家 地区后在运行时更改母版页 是的 我可以使用其他类中存在的countryCode变量 但也许我只能这样做 只是想
  • C#(锐利)从txt文件中读取随机行[重复]

    这个问题在这里已经有答案了 谁能告诉我如何从txt文件中读取随机行 我想从 txt 文件中读取随机行并在文本框中仅显示该行 代码示例会很棒 感谢转发 var lines File ReadAllLines path var r new Ra
  • jQuery UI - 加速自动完成

    我的自动完成功能运行良好 但我正在尝试找出使其更快的方法 这是我的 HTML Country
  • LyX 中的 Zed 表示法

    是否可以在 LyX 中创建 Zed 表示法方案 如何做呢 解决了 我通过 MikTeX 安装了 zed csp 样式包 然后 在 LyX 我去了Document gt Settings gt Latex Preamble并添加了 usepa
  • 如何捕获回滚异常

    对 catch 子句中已存在的 SqlTransaction RollBack 实现错误处理的最佳方法是什么 我的代码大致是这样的 using SqlConnection objSqlConn new SqlConnection connS
  • 如何在C#项目中实现和进行OCR?

    我已经搜索了一段时间 并且看到了一些 OCR 库请求 我想知道如何实现最纯粹 易于安装和使用的 OCR 库 并提供安装到 C 项目的详细信息 如果可能的话 我只想像通常的 dll 引用一样实现它 Example using org pdfb
  • 尝试将 yaml 数据转换为结构时输出为空[重复]

    这个问题在这里已经有答案了 我正在尝试将 yaml 数据转换为结构并打印它 我得到的这个程序的输出是空的 package main import fmt gopkg in yaml v2 type example struct variab
  • 当 size < 1 时,geom_sf 大小参数不起作用

    问题 我正在尝试使用 sf 包创建美国州 县的地图 并且geom sf 来自 ggplot2 但我无法得到size多边形边界线宽度的参数geom sf 正确创建细线时size lt 1 e g ggplot sf obj gt geom s
  • 将平面对象数组转换为嵌套对象

    我有以下数组 实际上来自后端服务 const flat Item id a name Root 1 parentId null id b name Root 2 parentId null id c name Root 3 parentId
  • C++ time_t 问题

    我在 C VS 2008 中的日期管理方面遇到问题 根据MSDN 规范 http msdn microsoft com en us library 323b6b3k 28v VS 90 29 aspx time t代表 自 1970 年 1
  • Erlang ping 节点问题

    我在 erlang shell 中做了 1 gt node nonode nohost But 2 gt net adm ping node pang 为什么 什么问题 为什么不打乒乓球 谢谢 你没有启动 Erlang name or sn
  • 使用 k 均值算法进行异常值检测

    我希望你能帮助我解决我的问题 我正在尝试使用 kmeans 算法来检测异常值 首先 我执行算法并选择那些距聚类中心距离较远的对象作为可能的异常值 我不想使用绝对距离 而是想使用相对距离 即对象到聚类中心的绝对距离与聚类中所有对象到其聚类中心
  • 如何检测 scanf() 末尾的空格或换行符?

    我正在编写一个程序 我必须接受来自用户的命令 就像用户可以在其中设置环境变量值的 shell 一样 我遇到的问题是如果用户输入set var var value我需要知道用户输入了一个空格而不仅仅是set并按下 Enter 键 这是一个不同
  • Beanshell 不允许我将 jar 添加到“默认”JRE 类加载器吗?

    我有一个问题豆壳 http www beanshell org manual bshmanual html我在任何地方都找不到答案 我只能通过以下两种方式之一运行 Beanshell 脚本 其中Classpath是在调用Beanshell之
  • 是我的类内装饰器不够 Pythonic 还是 PyCharm 在 lint 警告方面不够智能?

    我想在类中定义一个装饰器 我不想将它定义为一个单独的 独立的函数 因为这个装饰器是专门针对这个类的 我想将相关的方法保留在一起 这个装饰器的目的是检查一些先决条件 特别是成员变量持有的数据库连接 SSH连接等是否仍然可用 如果不是 则不会调
  • imshow(img, cmap=cm.gray) 显示 128 值的白色

    我正在从 MatLab 转向 python 并使用 imshow 函数 我似乎无法理解为什么它不将值 128 显示为灰色 而我选择了 cmap 为灰度 看起来它使用最高 128 和最低值的灰度 我希望它使用 0 255 的灰度 我怎么做 U
  • Objective-C – UILocalNotification AlertBody 长度

    我正在寻找一些文档来找到最大长度alertBody of a UILocalNotification之前它会被剪辑在通知中心 横幅 或弹出警报中 I haven t found any specific limit documented H
  • 我应该使用哪个 HTML5 标签来标记作者姓名?

    例如博客文章或文章
  • 如何将对象从其基类转换为其子类

    我有课User这是类的子类PFUser class User PFUser var isManager false 在我的一种方法中 我收到了PFUser对象 我想将其转换为User object func signUpViewContro
  • tf.zeros() 的动态大小(与无尺寸的占位符一起使用)

    考虑以下代码 x tf placeholder float shape 42 4 y tf zeros 42 4 float xy stacked tf concat 1 x y print x get shape print y get