Python 优化是在一个简单的tensorflow示例中进行oposite

Python 优化是在一个简单的tensorflow示例中进行oposite,python,optimization,tensorflow,linear-regression,Python,Optimization,Tensorflow,Linear Regression,我一直在尝试学习TensorFlow,我试图修改一个简单的线性回归示例,并通过添加两个变量将其转换为多项式回归。这应该不会太难,但是当我执行优化器而不是减少损失时,它会使优化器爆炸到无穷大!如果你能了解我做错了什么,我将不胜感激 损失不是减少而是增加 import matplotlib.pyplot as plt import numpy as np import tensorflow as tf num_puntos = 1000 conjunto_puntos = [] for i in

我一直在尝试学习TensorFlow,我试图修改一个简单的线性回归示例,并通过添加两个变量将其转换为多项式回归。这应该不会太难,但是当我执行优化器而不是减少损失时,它会使优化器爆炸到无穷大!如果你能了解我做错了什么,我将不胜感激

损失不是减少而是增加

import matplotlib.pyplot as plt
import numpy as np
import tensorflow as tf

num_puntos = 1000
conjunto_puntos = []
for i in xrange(num_puntos):
    x1= np.random.normal(0.0, 1.55)
    y1= np.sin(x1) * 4.1 + 0.3 + np.random.normal(0.0, 0.03)
    conjunto_puntos.append([x1, y1])
x_data = [v[0] for v in conjunto_puntos]  #x data
y_data = [v[1] for v in conjunto_puntos]  # target data (y data)
x_data2 = [v[0]**2 for v in conjunto_puntos] # x data squared
x_data3 = [v[0]**3 for v in conjunto_puntos] # x data to the power of 3

plt.plot(x_data, y_data, 'ro', label='Original data') #plot of the original data
plt.legend()
plt.show() 



W = tf.Variable(tf.random_uniform([1], -1.0, 1.0))  #variable 1
W1 = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) # variable 2
W2 = tf.Variable(tf.random_uniform([1], -1.0, 1.0)) #variable 3
b = tf.Variable(tf.zeros([1])) # variable 4
y = W * x_data + b + W1 * x_data2 + W2 * x_data3 # my polinomial model
loss = tf.reduce_mean(tf.square(y - y_data)) # the loss function 
optimizer = tf.train.GradientDescentOptimizer(0.5) # the optimizer
train = optimizer.minimize(loss)  #the train function
init = tf.initialize_all_variables() #variable initialization
sess = tf.Session() #tf session
sess.run(init) #initialization of variables

for step in xrange(16): #I train for only 16 times
    sess.run(train) #execute the gradient decent optimizer once.
    plt.plot(x_data, y_data, 'ro') #plot the original data
    plt.plot(x_data, sess.run(W) * x_data + sess.run(b) + sess.run(W1) * x_data2 + sess.run(W2) * x_data3,'ro') #plot my model
    plt.xlabel('x')             
    plt.xlim(-8,6)
    plt.ylim(-8,6)
    plt.ylabel('y')
    plt.legend()
    plt.show()
    print(sess.run(loss))

sess.close()

您的代码在我看来是正确的,因此爆炸式的丢失表明您用于GradientDescentOptimizer的学习率可能太高。你有没有尝试过更小的学习率(大约0.005)或者像亚当这样更聪明的乐观主义者?谢谢你阿维什卡!我们为什么要这样做?为什么它会以高学习率爆发?学习率过高可能会导致乐观者在每一步都“过度调整”。Andrew Ng的这段视频解释得很好,“你救了我,先生。”