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

时间:2017-05-28 15:26:01

标签: python tensorflow

我一直在阅读有关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为什么用这些值表示:

x = tf.placeholder(tf.float32, [None, 1])
W = tf.Variable(tf.zeros([1,1]))
b = tf.Variable(tf.zeros([1]))

[None, 1][1, 1]?为什么[None, 1]代表x而[1, 1]代表W?

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

  

对于W = tf.Variable,第一个'1'是特征,房子大小,第二个'1'输出,房价。

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

y = Ax + Bz

这意味着我有两个'特征'(x和z),我的A和B值应该被塑造为[2,1]?这似乎不对......

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

3 个答案:

答案 0 :(得分:1)

我想也许你应该学习像线性代数这样的东西。

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

第一个是Wx,这意味着矩阵X矩阵乘以x。在您的情况下,意味着:

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

Wx设为R(结果),我们可以将Wx + B重写为R + B。这是第二个矩阵运算。在您的情况下,意味着:

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

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

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 :(得分:0)

原作者应该选择[1, 1]形状,因为她/他想要比普通标量产品具有更广泛的功能。

这样,您可以将形状更改为[1, d],以便为每个样本提供d个功能。

当然,还应该将x的形状更改为d

答案 2 :(得分:0)

你熟悉线性代数吗?

形状的占位符[无,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]]

我希望这能回答你的问题