функция стоимости постоянно увеличивается - PullRequest
0 голосов
/ 03 декабря 2018
import matplotlib.pyplot as plt
import tensorflow as tf
import numpy as np
import pandas as pd
from sklearn.model_selection import train_test_split

df = pd.read_csv("FuelConsumption.csv")
df = df[['ENGINE SIZE','CYLINDERS', 'Mcity', 'Mhwy', 'Mcmb', 'McmbMPG', 'CO2']]

features = np.asanyarray(df[['ENGINE SIZE','CYLINDERS', 'Mcity', 'Mhwy', 'Mcmb', 'McmbMPG']])
label    = np.asanyarray(df[['CO2']])

mu = np.mean(features,axis=0)
sigma = np.std(features,axis=0)
feature_normalized = (features - mu)/sigma

n_training_samples = feature_normalized.shape[0]
n_dim = feature_normalized.shape[1]

feature_reshaped = np.reshape(features,[n_training_samples,n_dim])
label_reshaped = np.reshape(label,[n_training_samples,1])

train_X, test_X, train_Y, test_Y = train_test_split\
                 (feature_reshaped, label_reshaped,shuffle = True , test_size=0.25, random_state=42)
print("shape of training input = ", train_X.shape)
print("shape of training output = ", train_Y.shape)


numFeatures = train_X.shape[1]
print("Number of features = ", numFeatures)
numLabels = train_Y.shape[1]
print("Number of labels = ", numLabels)

learning_rate = 0.01
training_epochs = 1000

X = tf.placeholder(tf.float32,[None,numFeatures])
Y = tf.placeholder(tf.float32,[None,numLabels])
W = tf.Variable(tf.ones([numFeatures,numLabels]))
B = tf.Variable(tf.ones([1,numLabels]))

init = tf.global_variables_initializer()

Y_model = tf.add(tf.matmul(X, W, name="apply_weights"), B, name="add_bias")
cost = tf.reduce_mean(tf.square(Y_model - Y))
training_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

sess = tf.Session()
sess.run(init)

loss_values = []
train_data = []
for epoch in range(training_epochs):
_, loss_val, a_val, b_val = sess.run([training_step, cost, W, B],feed_dict={X: train_X,Y: train_Y})
loss_values.append(loss_val)
if epoch % 20 == 0:
    print(epoch, loss_val, a_val, b_val)
    train_data.append([a_val, b_val])


plt.plot(loss_values, '--')
plt.show()

Я пытаюсь предсказать выброс CO2, используя несколько переменных, таких как цилиндры, пробег, размер двигателя и т. Д., Используя линейную регрессию.Я использовал приведенный выше код в tenorflow.Когда я пытаюсь запустить значение потери модели, вес и уклоны обновляются только для 20 итераций, и после этого они равны бесконечности (Nan).Проблема здесь с кодом или выбором функции затрат / Оптимизатора?

Я составил значения потерь, которые выглядят как this.

Если в качестве характеристик используются только размеры двигателя и цилиндры, результат будет хорошим.Любые другие особенности (Milage в городе, Milage на шоссе, Milage вместе взятые) приводят к вышеупомянутой проблеме.Я придерживаюсь строгого заговора Макити, Мви.Это проблема с самими данными? Пожалуйста, взгляните на разбросанный участок города и города. enter image description here enter image description here

...