Линейная регрессия и оценка, возвращающая неправильные потери.Tensorflow - PullRequest
0 голосов
/ 27 ноября 2018

Я реализовал эту модель с помощью Keras, и результат оказался ожидаемым.Сейчас я пытаюсь с Tensorflow, и я просто не могу понять это правильно.Как вы можете видеть ниже, моя потеря не совсем правильна.

что я здесь не так делаю?

ps: я предпочитаю использовать оценки вместо кратных тензоров и т. Д.

X = numpy.array([ 1.1, 1.3, 1.5, 2.0, 2.2, 2.9, 3.0, 3.2, 3.2, 3.7, 3.9, 4.0, 4.0, 4.1, 4.5, 4.9, 5.1, 5.3, 5.9, 6.0, 6.8, 7.1, 7.9, 8.2, 8.7, 9.0, 9.5, 9.6, 10.3, 10.5])

y = numpy.array([ 39.343, 46.205, 37.731, 43.525, 39.891, 56.642, 60.15, 54.445, 64.445, 57.189, 63.218, 55.794, 56.957, 57.081, 61.111, 67.938, 66.029, 83.088, 81.363, 93.94, 91.738, 98.273, 101.302, 113.812, 109.431, 105.582, 116.969, 112.635, 122.391, 121.872])


#reduce salaries to unit of thousands
#Split 70% training, 30% test
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.3, random_state=1)

#Create estimator
feat_cols = [ tf.feature_column.numeric_column('X', shape=[1]) ]
estimator = tf.estimator.LinearRegressor(feature_columns=feat_cols)

#input functions
train_input_func = tf.estimator.inputs.numpy_input_fn({'X': X_train}, y_train, shuffle=False)
test_input_func = tf.estimator.inputs.numpy_input_fn({'X': X_test}, y_test, shuffle=False)

#Train and test
estimator.train(input_fn=train_input_func)
train_metrics = estimator.evaluate(input_fn=train_input_func)
test_metrics = estimator.evaluate(input_fn=test_input_func)

#Predict salary for arbitrary years of experience
X_single_data = np.array([4.6])
pred_input_func = tf.estimator.inputs.numpy_input_fn({'X': X_single_data}, shuffle=False)
single_pred = estimator.predict(pred_input_func)

print('--Train metrics--')
print(train_metrics)
print(' ')
print('--Test metrics--')
print(test_metrics)

- Метрики поезда -

{'Average_loss': 5795,477, 'метка / среднее значение': 72,32367, 'потеря': 121705,016, 'прогноз / среднее значение': 1,2057142, ''global_step ': 1}

- Метрики теста -

{' average_loss ': 7422.221,' label / mean ': 84.588104,' убыток ': 66799.99,' прогноз /означает ': 1.3955557,' global_step ': 1}

К вашему сведению: вот что я получил с помощью keras: Ссылка на изображение

1 Ответ

0 голосов
/ 29 ноября 2018

Вам не хватает количества эпох для обучения вместе с размером партии.Добавьте эти параметры к определению входных функций, например, в случае ввода поезда для линейной регрессии это может выглядеть следующим образом

train_input_func = \
    tf.estimator.inputs.numpy_input_fn({'X': X_train},\
                                       y_train,\
                                       num_epochs=500,\
                                       batch_size=1,\
                                       shuffle=False)

После этого должно начаться обучение, и функция потерь снизится.

...