Незначительные изменения приводят к наноразрешению в тензорном потоке - PullRequest
1 голос
/ 08 марта 2019

Я новичок в тензорном потоке.У меня есть небольшие изменения в коде статьи, но веса нэн.Я разместил здесь правильный код и модифицированный.Пожалуйста, помогите мне разобраться в проблемах.Правильный код:

import tensorflow as tf    
import numpy as np
import pandas as pd
df=pd.read_csv('D:/newcars.csv')
# mileage, cylinder,doors are placeholders for our training data
mileage = tf.placeholder("float")
cylinder = tf.placeholder("float")
doors = tf.placeholder("float")
price = tf.placeholder("float")
a=tf.Variable(1.0)
b=tf.Variable(1.0)
c=tf.Variable(1.0)
d=tf.Variable(1.0)

y_model = tf.multiply(mileage, a) + tf.multiply(cylinder, b) + 
tf.multiply(doors, c) + d
error = tf.square(price - y_model)
train_op = tf.train.GradientDescentOptimizer(0.5).minimize(error)

model = tf.global_variables_initializer()

with tf.Session() as session:
session.run(model)
for i in range(len(df)):        
    mileage_value = np.random.rand()
    cylinder_value = np.random.rand()
    doors_value = np.random.rand()
    price_value = 2*mileage_value+ 3*cylinder_value+4*doors_value+1

    print(str(mileage_value) + ' ' + str(cylinder_value) + ' ' + 
    str(doors_value) + ' ' + str(price_value))

    session.run(train_op, feed_dict={mileage: mileage_value, cylinder: 
    cylinder_value,doors:doors_value,price:price_value})
    a_value = session.run(a)
    b_value = session.run(b)
    c_value = session.run(c)
    d_value = session.run(d)
    print(str(a_value)+' ' + str(b_value)+ ' ' + str(c_value) + ' ' + 
    str(d_value))

Модифицированный код: я только заменил

mileage_value = np.random.rand()
cylinder_value = np.random.rand()
doors_value = np.random.rand()
price_value = 2*mileage_value+ 3*cylinder_value+4*doors_value+1

на:

mileage_value = df.loc[i]['Mileage']
cylinder_value = df.loc[i]['Cylinder']
doors_value = df.loc[i]['Doors']
price_value = df.loc[i]['Price']

, и ошибки nan произошли, хотя mipal_value, цилиндр_значение, doors_value и цена_значениевсе было правильно.

1 Ответ

0 голосов
/ 08 марта 2019

Наконец-то я выяснил причину проблемы.Причина в том, что я не нормализовал входные данные.Поэтому величина колебаний во входных данных огромна.В результате после нескольких первых итераций веса обновляются, но до некоторой точки эти веса становятся такими маленькими или такими большими, и в конечном итоге они становятся inf или nan.После нормализации входных данных модель может дать ожидаемые результаты.

...