python - 理解张量的秩和行为

标签 python tensorflow rank tensor

我刚开始使用 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 如何确定单个数据点?我现在意识到,在声明占位符时指定形状可能比让自己陷入这样的困境要好。
我理解类里面教授的最后两个案例,但我无法解释第一个案例的行为。

最佳答案

你的第一个问题很简单。 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] .

第二个案例做了类似的事情。

在第三种情况中,x 的尺寸为 (2, 1)。所以每行 x依次乘以w要获得单独的行,请给出 [[ 0.2, 0.60000002], [ 0.40000001, 1.20000005]]作为你的输出。

关于python - 理解张量的秩和行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44722500/

相关文章:

r - 获取 Tensorflow 占位符的形状

python - pandas groupby 并在每组以 1 开头的组内排名

mysql - 如何按多个等级对表进行排序

python - 有没有更快的方法使用 pulp 为线性规划定义变量?

python - 从 Sublime Text 2 运行 .py 文件

python - 二值化数组

python - 配置 Pytest 发现以忽略类名

python - 用于预测的 Tensorflow 导出估计器

tensorflow - 有没有 Eigen/CXX11 的文件?

mysql - 更新 MySQL 表中的排名