我一直在读关于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
用这些值表示:
是吗?[None, 1]
,[1, 1]
?为什么[None, 1]
代表x,而{
如果[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]
。这有什么不同?在
我想也许你应该学点线性代数之类的东西。
让我们从这行
# Model linear regression y = Wx + b
开始,这是您发布的代码中的第一行。实际上,它意味着两个矩阵运算。第一个是}。在您的情况下,是指:
Wx
,这意味着矩阵X
矩阵相乘{让}。这是第二个矩阵运算。在您的情况下,是指:
^{pr2}$Wx
作为R
(Result),我们可以将Wx + B
重写成{因此,如果您的输入中有多个要素,并且想要输出多个结果,那么模型的定义应该是:
原作者应该选择形状为
[1, 1]
,因为她/他想要一个比普通标量积更通用的函数。这样,您就可以将形状改为
[1, d]
,为每个示例提供d
特性。当然,也应该把}。
x
的形状改成{你熟悉线性代数吗?
shape[None,1]的占位符表示行数不受限制,列数为1列。 形状[1,1]的占位符表示1行1列。
形状[1,1]和[1]在这个意义上是不同的:
那么tf.matmul公司计算点积:x.W并加上b。 为了使张量流起作用,张量必须具有相似的形状,这就是为什么W的形状是[1,1],而不仅仅是[1]。
让我们看看:
然后:
我希望这能回答你的问题
相关问题 更多 >
编程相关推荐