簡體   English   中英

Tensorflow線性回歸NaN輸出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM