gpt4 book ai didi

python - TensorFlow 线性回归 - 返回 NaN 表示权重、偏差,返回 Inf 表示损失

转载 作者:行者123 更新时间:2023-12-01 00:54:01 28 4
gpt4 key购买 nike

我正在尝试在 TensorFlow 中执行以下线性回归,但我的输出都是 Inf 和 NaN。

我的输入数据集必须是 Y=0.5*X + 2 + 噪声;其中 X 是大小 (1000) 的正态分布,噪声是高斯分布(mu=0.0 且 sigma=50)

输出:

损失= 82662.945 W= 15974.369 b 24.379812

损失= 81293050000000.0 W= -508895600.0 b -775064.06

损失= 8.250697e+22 W= 16212403000000.0 b 24692003000.0

损失= 8.373905e+31 W= -5.1649487e+17 b -786638100000000.0

损失= inf W= 1.6454498e+22 b 2.5060722e+19

损失= inf W= -5.2420755e+26 b -7.9838474e+23

损失= inf W= 1.6700204e+31 b 2.543495e+28

损失= inf W= -5.320352e+35 b -8.1030665e+32

损失= inf W= inf b inf

损失= inf W= nan b nan

损失= nan W= nan b nan

损失= nan W= nan b nan

损失= nan W= nan b nan

import tensorflow as tf
from sklearn.model_selection import train_test_split
import numpy as np
import pandas as pd
from matplotlib import pyplot as plt


noise=np.random.normal(0.0,50,1000)#.astype(np.float32)
x_data=np.random.uniform(0,1000,1000)#.astype(np.float32)
y_data=0.5*x_data+2+noise#.astype(np.float32)

plt.scatter(x_data,y_data,s=0.1)
plt.show()


X=tf.placeholder(shape=(1000,),dtype=tf.float32)
Y=tf.placeholder(shape=(1000,),dtype=tf.float32)

#Learning W and b over the epochs
W=tf.get_variable(name='Weight',dtype=tf.float32,shape(),initializer=tf.zeros_initializer())
b=tf.get_variable(name='Bias',dtype=tf.float32,shape=(),initializer=tf.zeros_initializer())

Y_pred= tf.add(tf.multiply(X, W),b)
loss = tf.reduce_mean(tf.square(Y_pred - Y))



optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.05).minimize(loss)

epochs=100
with tf.Session() as sess:
init=tf.global_variables_initializer()
sess.run(init)
for e in range(epochs):
_,c=sess.run([optimizer,loss],feed_dict={X: x_data,Y: y_data})
print('loss=',c,'W=',sess.run(W),'b',sess.run(b))

#plt.scatter(x_data, y_data, 'ro', label='Original data')
plt.plot(x_data, sess.run(W) * x_data + sess.run(b), label='Fitted line')
plt.legend()
plt.show()

最佳答案

您已经巧妙地重新创建了 exploding gradient problem 的简单示例。

您可以阅读潜在的解决方案,但对于玩具示例来说,最简单的可能是降低学习率。

直观上,梯度下降就像试图通过指向下坡方向并迈出一步来找到通往谷底的路,然后重复。在每个阶段,您都会根据现在的下坡情况重新评估方向。如果山谷光滑,没有局部低点,并且您的步长足够小,您最终会找到底部。

学习率与步长类似。

因此,如果学习率太高,您现在可以想象自己迈出了如此大的一步,穿过整个山谷,到达对面山上更高的地方。然后你转身再次指向下坡(所以大约 180 度转弯),面向山谷中心,但向右跨过,到达另一边更高的地方。依此类推,山谷两侧的高度越来越高

因此,大幅降低学习率似乎可以使其收敛:

optimizer=tf.train.GradientDescentOptimizer(learning_rate=0.000001).minimize(loss)

关于python - TensorFlow 线性回归 - 返回 NaN 表示权重、偏差,返回 Inf 表示损失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56357799/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com