python - tf.reshape() 如何在内部工作?
问题描述
我试图了解 tf.reshape 是如何工作的。让我们举个例子:
embeddings = tf.placeholder(tf.float32, shape=[N0,N1])
M_2D = tf.placeholder(tf.float32, shape=[N0,None])
M_3D = tf.reshape(M_2D, [-1,N0,1])
weighted_embeddings = tf.multiply(embeddings, M_3D)
这里我有一个 2D 张量 M_2D,它的列表示 N1 维的 N0 个嵌入的系数。我想创建一个 3D 张量,其中 M_2D 的每一列都放置在 M_3D 的第一维中,并且列保持相同的顺序。我的最终目标是创建 2D 嵌入的 3D 张量,每个张量由 M_2D 的列加权。
我如何确定 reshape 实际上将每一列放置在 M_3D 的新维度中。是否有可能改为放置行?tensorflow 文档中是否有关于 tf.reshape 的内部工作过程的明确解释,特别是在提供 -1 时?
解决方案
前后张量tf.reshape
具有相同的展平顺序。
在 tensorflow 运行时,一个张量由原始数据(字节数组)、形状和 dtype 组成,tf.reshape
只改变形状,原始数据和 dtype 不变。-1
或None
intf.reshape
表示可以计算此值。
例如,
# a tensor with 6 elements, with shape [3,2]
a = tf.constant([[1,2], [3,4], [5,6]])
# reshape tensor to [2, 3, 1], 2 is calculated by 6/3/1
b = tf.reshape(a, [-1, 3, 1])
在本例中,a
和b
具有相同的展平顺序,即具有形状,其值为[1,2,3,4,5,6]
,具有形状,其值为。a
[3,2]
[[1,2], [3,4], [5,6]]
b
[2,3,1]
[[[1],[2],[3]],[[4],[5],[6]]]
推荐阅读
- xcode - Swift 5.0 为存储在 EnvironmentObject 中的数组对象赋值的最佳方法
- css - 100vh以下的html空白覆盖背景图像,导致滚动条
- r - 连续计算天数,但在同一天保持计数
- javascript - 无法弄清楚为什么我的 ROT13 转换器适用于小写,但不适用于大写
- python - 使用线程在 ZeroMQ REQ/REP 模式的服务器端创建许多应答器套接字
- arrays - 通过任意长度数组的扩展欧几里得算法找到 Bezout 系数
- javascript - 使用 ACE 语法高亮用于 Flask-Admin 字段覆盖
- php - CakePHP:使用条件参数检索列表
- c# - Await Task.WhenAll(BatchList) - 代码在 Redis 缓存更新之前继续
- javascript - 如何从 React redux reducer 正确返回不可变数据