python - tf.reshape() 在内部是如何工作的?

标签 python tensorflow 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)

这里我有一个二维张量 M_2D,其列表示 N1 维的 N0 个嵌入的系数。我想创建一个 3D 张量,其中 M_2D 的每一列都放置在 M_3D 的第一维中,并且列保持相同的顺序。我的最终目标是创建一个 2D 嵌入的 3D 张量,每个嵌入由 M_2D 的列加权。

我如何确定 reshape 实际上将每一列放置在 M_3D 的新维度中。是否有可能改为放置行? tensorflow 文档中是否有关于 tf.reshape 内部工作过程的明确解释,特别是在提供 -1 时?

最佳答案

tf.reshape 之前和之后的张量具有相同的展平顺序

在tensorflow runtime中,一个Tensor由原始数据(字节数组)、shape和dtype组成,tf.reshape只改变shape,原始数据和dtype没有改变。 -1tf.reshape 中的None 表示可以计算出这个值。

例如,

# 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])

在这个例子中,ab具有相同的展平顺序,即[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]]].

关于python - tf.reshape() 在内部是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51706848/

相关文章:

python - celery worker 队列

php - Python OOP 与 PHP OOP 相比如何?

python - TensorFlow 二进制文件经过优化,可在性能关键型操作中使用以下 CPU 指令 : AVX2 FMA

python - TensorFlow - 如果存在则恢复

r - 如何在不聚合的情况下在 reshape 中使用 "cast"

r - 为什么reshape2的Melt无法捕获转换中的行名?

python - 用于产品数据分析的最佳 Python 聚类库

python - 第一次追加后,append_entry() 不起作用。我将 Fieldlist 与 Flask-wtf、jinja 和 Python 3.4 一起使用

python - tensorflow 周期性填充

syntax-error - reshape 长多个变量时出错