Обновление модели линейной регрессии до проблемы TensorFlow 2.0 - PullRequest
0 голосов
/ 30 марта 2020

Я написал скрипт, который обновляет мой скрипт с TensorFlow 1.X до TensorFow 2.0 следующим образом:

learning_rate = 0.01

# steps of looping through all your data to update the parameters
training_epochs = 100

# the training set
x_train = np.linspace(0, 10, 100)
y_train = x_train + np.random.normal(0,1,100)

w0 = tf.Variable(0.)
w1 = tf.Variable(0.)

def h(x):
    y = w1*x + w0
    return y

def squared_error(y_pred, y_true):
    return 0.5*tf.square(y_pred - y_true)

for epoch in range(training_epochs):
    with tf.GradientTape() as tape:
        y_predicted = h(x_train)
        costF = squared_error(y_predicted, y_train)
    gradients = tape.gradient(costF, [w1,w0])
    w1.assign_sub(gradients[0]*learning_rate)   
    w0.assign_sub(gradients[1]*learning_rate)

print([w0.numpy(), w1.numpy()])

При запуске скрипта выше я получил результат:

[nan, nan]

Однако, если бы я изменил функцию squared_error следующим образом:

def squared_error(y_pred, y_true):
   return tf.reduce_mean(tf.square(y_pred - y_true))

результат мог бы выглядеть так:

[0.14498015, 0.97645897]

Я не понимаю эти различия. Пожалуйста, помогите мне.

...