Ошибка GradientDescentOptimizer продолжает расти - PullRequest
0 голосов
/ 07 июля 2019

Я пытаюсь выполнить линейную регрессию, используя GradientDescentOptimizer, но в результате я получаю, что моя ошибка очень быстро растет, а затем переполняется.Что я делаю не так?

Вот пример результата моей ошибки на каждой итерации:

2163732.5
1274220300000000.0
7.274338e+23
4.141076e+32
inf
inf
...

Вот мой код

import os 
import pandas as pd
import tensorflow as tf
from sklearn.model_selection import train_test_split

os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
tf.logging.set_verbosity(tf.logging.ERROR)

data = pd.read_csv('test.csv').values
x_vals = data[:,1:]
y_vals = data[:,0]
n_dim = x_vals.shape[1]

W = tf.Variable(tf.ones([1, n_dim]))
b = tf.Variable(0.5, dtype=tf.float32)

X = tf.placeholder(tf.float32)
Y = tf.placeholder(tf.float32)

prediction = tf.reduce_sum(W * X) + b
error = Y - prediction
loss = tf.reduce_mean(tf.square(error))

optimizer = tf.train.GradientDescentOptimizer(0.01).minimize(loss)

with tf.Session() as sess:

    init = tf.initializers.global_variables()
    sess.run(init)

    for i in range (0, 100):

        x_train, x_test, y_train, y_test = train_test_split(x_vals, y_vals, test_size=100, train_size=100)

        _, loss_result = sess.run([optimizer, loss], {X: x_train, Y: y_train})
        print(loss_result)

Я сгенерировал свои данные сформула y = (0.5 * x_1) + (3 * x_2), поэтому она должна быть идеально линейной (игнорируя ошибки округления): Это выглядит так:

y,x_1,x_2
28,9,8
24,6,7
31,9,9
34,8,10
24,12,6
...

Вот мои полные данные

1 Ответ

1 голос
/ 07 июля 2019

Ваш градиент превышал минимумы, следовательно, взрывался. Вы должны попытаться увеличить количество эпох и уменьшить скорость обучения до порядка 1e-5 или даже меньше, например, 1e-7, 1e-8. Он не выходит за пределы для значений эпох = 100000 и скорости обучения = 0,0000003.

...