为了账号安全,请及时绑定邮箱和手机立即绑定

Tensorflow 线性回归 NaN 输出

Tensorflow 线性回归 NaN 输出

犯罪嫌疑人X 2021-08-11 20:21:58
我正在尝试为机器学习算法编写代码来学习机器学习概念和 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 维的数据点。
查看完整描述

1 回答

?
芜湖不芜

TA贡献1796条经验 获得超7个赞

一般来说,我会避免损失的平方根。问题是,该衍生物的x**0.50.5 * x**-0.5,该装置通过将x。如果x为零,这将产生 NaN。在这种情况下,平方根来自tf.norm并紧随其后tf.square,但操作不会融合在一起,也不会取消。

简化你的损失表达式tf.reduce_sum(tf.square(prediction - _x2))应该使事情更稳定。


查看完整回答
反对 回复 2021-08-11
  • 1 回答
  • 0 关注
  • 355 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号