我正在尝试为机器学习算法编写代码来学习机器学习概念和 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.5是0.5 * x**-0.5,该装置通过将x。如果x为零,这将产生 NaN。在这种情况下,平方根来自tf.norm并紧随其后tf.square,但操作不会融合在一起,也不会取消。
简化你的损失表达式tf.reduce_sum(tf.square(prediction - _x2))应该使事情更稳定。
添加回答
举报
0/150
提交
取消
