[英]Tensorflow Linear Regression NaN output
我正在嘗試為機器學習算法編寫代碼,以學習機器學習概念和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。 我認為我做錯了幾件事,但我不知道如何糾正。
當我希望預測值為[1,300]時,預測的形狀為[20,300]。 我希望它基於單個x1和x2進行預測,而不是一次全部預測,然后嘗試從所有數據點的誤差總和中學習(我假設是分段的)。 我不確定如何處理此問題,但是由於我認為目前正在基於20,300矩陣而不是20,1,300矩陣的總和最小化。
我認為matmul是正確的,因為乘法是元素明智的?
我將輸入數據作為np數組的列表輸入。 每個np數組都是一個300個維度的數據點。
謝謝。
通常,我會避免損失的平方根。 問題是x**0.5
的導數是0.5 * x**-0.5
,這意味着除以x
。 如果x
永遠為零,將產生NaN。 在這種情況下,平方根來自tf.norm
,緊隨其后的是tf.square
,但是這些操作不會融合在一起並且不會取消。
將損失表達式簡化為tf.reduce_sum(tf.square(prediction - _x2))
應該會使情況更穩定。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.