【问题标题】:How does tf.reshape() work internally ?tf.reshape() 如何在内部工作?
【发布时间】:2019-01-13 08:48:53
【问题描述】:

我正在尝试了解 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 时?

【问题讨论】:

    标签: python tensorflow reshape


    【解决方案1】:

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

    在 tensorflow 运行时,一个张量由原始数据(字节数组)、形状和 dtype 组成,tf.reshape 只改变形状,原始数据和 dtype 不变。 tf.reshape中的-1None表示可以计算这个值。

    例如,

    # 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的形状为@987654334 @,其值为[[[1],[2],[3]],[[4],[5],[6]]]

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-10-14
      • 2013-09-28
      • 2012-08-01
      • 2011-12-10
      • 2018-02-10
      • 2014-09-29
      • 2011-03-18
      • 1970-01-01
      相关资源
      最近更新 更多