为什么线性回归占位符在tensorflow中有形状[1,1]?

2024-03-29 05:19:33 发布

您现在位置:Python中文网/ 问答频道 /正文

我一直在读关于tensorflow的指南:https://medium.com/all-of-us-are-belong-to-machines/the-gentlest-introduction-to-tensorflow-248dc871a224

……而且,我知道发生了什么。在

但是,example code中的线性模型定义了如下线性模型:

# Model linear regression y = Wx + b
x = tf.placeholder(tf.float32, [None, 1])
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))
product = tf.matmul(x,W)
y = product + b
y_ = tf.placeholder(tf.float32, [None, 1])

# Cost function sum((y_-y)**2)
cost = tf.reduce_mean(tf.square(y_-y))

# Training using Gradient Descent to minimize cost
train_step = tf.train.GradientDescentOptimizer(0.0000001).minimize(cost)

问题是:为什么Wx + b用这些值表示:

^{pr2}$

是吗?[None, 1][1, 1]?为什么[None, 1]代表x,而{}代表W?在

如果[1, 1]是1个大小为1的元素,那么为什么b只是[1],这是什么意思?1个大小为0的元素?在

For W = tf.Variable, the first '1' is feature, house size, and the 2nd '1' is output, house price.

这是否意味着如果我试图代表模型,比如:

y = Ax + Bz

这意味着我有两个“特征”(x和z),我的A值和B值应该是成形的[2,1]?好像不太对劲。。。在

这似乎与polynomial regression中所做的完全不同,其中权重因子是形状[1]。这有什么不同?在


Tags: theto模型nonetftensorflowzeros代表
3条回答

我想也许你应该学点线性代数之类的东西。

让我们从这行# Model linear regression y = Wx + b开始,这是您发布的代码中的第一行。实际上,它意味着两个矩阵运算。

第一个是Wx,这意味着矩阵X矩阵相乘{}。在您的情况下,是指:

[x11, x21, x31, ..., xn1]T * [w] = [x11*w, x21*w, x31*w, ..., xn1*w]T

Wx作为R(Result),我们可以将Wx + B重写成{}。这是第二个矩阵运算。在您的情况下,是指:

^{pr2}$

因此,如果您的输入中有多个要素,并且想要输出多个结果,那么模型的定义应该是:

x = tf.placeholder(tf.float32, [None, your_input_features])
W = tf.Variable(tf.zeros([your_input_features, your_output_features]))
b = tf.Variable(tf.zeros([your_output_features]))
product = tf.matmul(x,W)
y = product + b

原作者应该选择形状为[1, 1],因为她/他想要一个比普通标量积更通用的函数。

这样,您就可以将形状改为[1, d],为每个示例提供d特性。

当然,也应该把x的形状改成{}。

你熟悉线性代数吗?

shape[None,1]的占位符表示行数不受限制,列数为1列。 形状[1,1]的占位符表示1行1列。

形状[1,1]和[1]在这个意义上是不同的:

  • [1] =>;plh=[x]
  • [1,1]=>;plh=[[x]]

那么tf.matmul公司计算点积:x.W并加上b。 为了使张量流起作用,张量必须具有相似的形状,这就是为什么W的形状是[1,1],而不仅仅是[1]。

让我们看看:

  • x=[[1],[2],[3]]
  • W=[[10]]
  • b=[[9],[8],[7]]

然后:

  • 在tf.matmul公司(x,W)=[[10],[20],[30]]
  • 在tf.matmul公司(x,W)+b=[[19],[28],[27]]

我希望这能回答你的问题

相关问题 更多 >