【发布时间】:2019-10-14 21:39:43
【问题描述】:
我正在尝试在 TensorFlow 中进行以下线性回归,但我的输出都是 Inf 和 NaN。
我的输入数据集必须是 Y=0.5*X + 2 + Noise;其中 X 是大小 (1000) 的正态分布,噪声是高斯分布 (mu=0.0 and 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()
【问题讨论】:
标签: python tensorflow