【发布时间】:2019-04-12 07:31:33
【问题描述】:
我正在尝试为机器学习算法编写代码,以学习机器学习概念和 Tensorflow。我要写的算法是:
(没有足够的声誉来嵌入图片)https://i.imgur.com/lxgC7YV.png
“相当于分段线性回归模型。”
从(等式 7):
https://arxiv.org/pdf/1411.3315.pdf
我已经加载了我想要执行此操作的向量。并初始化我的占位符和变量:
size = len(originalVecs)
_x1 = tf.placeholder(tf.float64, shape=[size, 300], name="x1-input")
_x2 = tf.placeholder(tf.float64, shape=[size, 300], name="x2-input")
_w = tf.Variable(tf.random_uniform([300,300], -1, 1, dtype = tf.float64), name="weight1")
我设置的预测、成本和训练步骤如下:
prediction = tf.matmul(_x1,_w)
cost = tf.reduce_sum(tf.square(tf.norm(prediction - _x2)))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
初始化后,我使用以下内容进行训练:
for i in range(10000):
sess.run(train_step, feed_dict={_x1: timedVecs, _x2 : originalVecs})
if i % 1001 == 0:
print('Epoch ', i)
print('Prediction ', sess.run(prediction, feed_dict={_x1: timedVecs, _x2 : originalVecs}).shape)
当我运行我的代码时,它非常不稳定,并且只会在大约 20 次迭代内增长到仅打印 NaN。我认为我做错了几件事,但我不知道如何纠正。
预测的形状是 [20,300],而我预计它是 [1,300]。我希望它基于单个 x1 和 x2 进行预测,而不是一次全部预测,然后尝试从所有数据点的误差总和中学习(我假设分段是)。我不知道如何解决这个问题,因为我认为目前我正在根据 20,300 矩阵而不是 20 1,300 矩阵的总和进行最小化。
我假设 matmul 是正确的,因为乘法是元素明智的?
我将输入数据作为 np 数组的列表输入。每个 np 数组是一个 300 维的数据点。
谢谢。
【问题讨论】:
-
我没有过多地研究它,但
tf.norm在您使用它时会压平张量并计算结果向量的范数。因为你也有tf.reduce_sum这让我觉得你真的想计算prediction行的范数。您可以为此使用axis参数。 -
你说得对,我确实错过了。范数应该计算向量范数并返回一个包含 20 个条目的数组。我已经纠正了这一点,但错误仍在传播。谢谢。
标签: python tensorflow regression linear-regression