Python 线性回归问题中权重的计算

Python 线性回归问题中权重的计算,python,tensorflow,machine-learning,linear-regression,Python,Tensorflow,Machine Learning,Linear Regression,我编写了演示线性回归算法的脚本,如下所示: training_epochs = 100 learning_rate = 0.01 # the training set x_train = np.linspace(0, 10, 100) y_train = x_train + np.random.normal(0,1,100) # set up placeholders for input and output X = tf.placeholder(tf.float32) Y = tf.place

我编写了演示线性回归算法的脚本,如下所示:

training_epochs = 100
learning_rate = 0.01
# the training set
x_train = np.linspace(0, 10, 100)
y_train = x_train + np.random.normal(0,1,100)
# set up placeholders for input and output
X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
# set up variables for weights
w0 = tf.Variable(0.0, name="w0")
w1 = tf.Variable(0.0, name="w1")
y_predicted =  X*w1 + w0
# Define the cost function
costF = 0.5*tf.square(Y-y_predicted)
# Define the operation that will be called on each iteration
train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(costF)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
# Loop through the data training
for epoch in range(training_epochs):
       for (x, y) in zip(x_train, y_train):
              sess.run(train_op, feed_dict={X: x, Y: y})
# get values of the final weights
w_val_0,w_val_1 = sess.run([w0,w1])
sess.close()
使用上面的脚本,我可以轻松地计算w_val_1和w_val_0。但如果我用你的预言改变了什么:

w0 = tf.Variable(0.0, name="w0")
w1 = tf.Variable(0.0, name="w1")
w2 = tf.Variable(0.0, name="w2")
y_predicted =  X*X*w2 + X*w1 + w0
...
w_val_0,w_val_1,w_val_2 = sess.run([w0,w1,w2])

那我就无法计算w_val_0,w_val_1,w_val_2。请帮帮我

当你做
X*X
时,体重(
w2
w1
w0
)迅速增加,达到
inf
,这导致了
nan
值的减少,并且没有训练发生。根据经验,始终将数据标准化为0平均值和单位方差

固定代码 输出:

谢谢mujjiiga!对我来说,答案很好。
training_epochs = 100
learning_rate = 0.01
# the training set
x_train = np.linspace(0, 10, 100)
y_train = x_train + np.random.normal(0,1,100)
                                     
# # Normalize the data
x_mean = np.mean(x_train)
x_std = np.std(x_train)
x_train_ = (x_train - x_mean)/x_std

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)
# set up variables for weights
w0 = tf.Variable(0.0, name="w0")
w1 = tf.Variable(0.0, name="w1")
w2 = tf.Variable(0.0, name="w3")

y_predicted =  X*X*w1 + X*w2 + w0
# Define the cost function
costF = 0.5*tf.square(Y-y_predicted)
# Define the operation that will be called on each iteration
train_op = tf.train.GradientDescentOptimizer(learning_rate).minimize(costF)
sess = tf.Session()
init = tf.global_variables_initializer()
sess.run(init)
# Loop through the data training
for epoch in range(training_epochs):
       for (x, y) in zip(x_train_, y_train):
            sess.run(train_op, feed_dict={X: x, Y: y})                                


y_hat = sess.run(y_predicted, feed_dict={X: x_train_})
print (sess.run([w0,w1,w2]))
sess.close()

plt.plot(x_train, y_train)
plt.plot(x_train, y_hat)
plt.show()
[4.9228806, -0.08735728, 3.029659]