【问题标题】:Understanding tensor ranks and behaviour了解张量等级和行为
【发布时间】:2017-06-23 13:21:30
【问题描述】:

我从 tensorflow 开始,当涉及到张量的等级以及它们如何相互作用时,我遇到了一个大问题。

我有以下代码:

w = tf.Variable(tf.constant([0.2,0.6]))  
x = tf.placeholder(tf.float32)  
y =  w * x  

如您所见,这是一个非常简单的设置。
但是,当我执行print w 时,输出为Tensor("Variable_13/read:0", shape=(2,), dtype=float32)
shape(2,) 是什么意思?逗号表示什么?

此外,这是sess = tf.Session() 和初始化变量之后的其他痛点:

print(sess.run(y,{x:[1,2]})) 

[0.2 1.20000005]

print(sess.run(y,{x:[1]}))  

[0.2 0.60000002]

print(sess.run(y,{x:[[1],[2]]})) 

[[ 0.2 0.60000002]
[0.40000001 1.20000005]]

为什么我会出现如此多样的行为? tensorflow 如何确定单个数据点?我现在意识到,在声明占位符的同时指定形状可能比让自己陷入困境要好。
我理解最后两个案例,因为它们是在课堂上教授的,但我无法解释第一个案例的行为。

【问题讨论】:

    标签: python tensorflow rank tensor


    【解决方案1】:

    您的第一个问题很简单。 shape=(2,) 指的是w 的尺寸。在numpy 中,形状始终由整数元组表示,如下所示:

    >>> x = np.random.randn(50)
    >>> x.shape
    (50,)
    

    这是一个一维数组,shape 中只指定了一个整数。现在,...

    >>> x = np.random.randn(50, 50)
    >>> x.shape
    (50, 50)
    

    这是一个二维数组。如您所见,shape 指定了x 沿 2 个维度的大小。


    回答你的第二个问题,x 是一个占位符,这意味着它可以占用你给它的任何值。这正是以下几行的作用:{x:[1,2]}{x:[1]}{x:[[1],[2]]}

    在第一种情况下,x 被分配了一个包含 2 个元素 [1, 2] 的一维数组。在第二种情况下,一维数组有 1 个元素 [1] 等等。

    现在,上面的操作w * x 指定w 应该与x 相乘。因此,在执行sess.run(y,{x:[1,2]}) 时,w 乘以 x 并传递给它的值。您看到的输出会根据您传递给x 的值而变化。

    在第一种情况下,[0.2, 0.6] * [1, 2] 只是将每个元素在其对应的索引处相乘,结果为[0.2 * 1, 0.6 * 2]

    第二种情况做类似的事情。

    在第三种情况下,我们有尺寸为 (2, 1) 的 x。所以x 的每一行依次乘以w 得到一个单独的行,输出[[ 0.2, 0.60000002], [ 0.40000001, 1.20000005]]

    【讨论】:

      【解决方案2】:

      第一个问题

      shape(2,) 表示张量的形状。特别是末尾的逗号表示张量是元组。

      您可以简单地运行检查:

      type((2))
      

      返回int,同时

      type((2,))
      

      返回tuple

      第二个问题

      您刚刚发现了广播

      简而言之,在第一种情况下,您将 2 个输入张量的每个元素单独相乘。

      在第二种情况下,您将张量乘以一个标量。

      在第三种情况下,您将w 的每个元素与x 的每个元素相乘。这是因为 x 的形状为(something, 1)。最后一个维度中的1“触发”了一个广播规则,使操作以这种方式运行。

      您应该阅读此处的广播规则以更好地理解:https://docs.scipy.org/doc/numpy-1.12.0/user/basics.broadcasting.html#general-broadcasting-rules

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-06-11
        • 1970-01-01
        • 2019-02-21
        • 2023-03-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多