2017-02-16 24 views
0
import tensorflow as tf 
import pandas as pd 
import numpy as np 

def normalize(data): 
    return data - np.min(data)/np.max(data) - np.min(data) 

df = pd.read_csv('sat.csv', skipinitialspace=True) 
x_reading = df['reading_score'] 
x_math = df['math_score'] 
x_reading, x_math = np.array(x_reading[df.reading_score != 's']), np.array(x_math[df.math_score != 's']) 

x_data = normalize(np.float32(np.array([x_reading, x_math]))) 

y_writing = df[['writing_score']] 
y_data = normalize(np.float32(np.array(y_writing[df.writing_score != 's']))) 

W = tf.Variable(tf.random_uniform([1, 2], -.5, .5)) #float32 
b = tf.Variable(tf.ones([1])) 
y = tf.matmul(W, x_data) + b 

loss = tf.reduce_mean(tf.square(y - y_data.T)) 
optimizer = tf.train.GradientDescentOptimizer(0.005) 
train = optimizer.minimize(loss) 

init = tf.initialize_all_variables() 

with tf.Session() as sess: 
    sess.run(init) 

    for step in range(1000): 
     sess.run(train) 
     print step, sess.run(W), sess.run(b), sess.run(loss) 

Вот мой код. Мой sat.csv содержит данные чтения, записи и математических вычислений на SAT. Как вы можете догадаться, разница между функциями не такая уж большая.My TensorFlow Gradient Descent расходится

Это часть sat.csv.

DBN,SCHOOL NAME,Num of Test Takers,reading_score,math_score,writing_score 
01M292,HENRY STREET SCHOOL FOR INTERNATIONAL STUDIES,29,355,404,363 
01M448,UNIVERSITY NEIGHBORHOOD HIGH SCHOOL,91,383,423,366 
01M450,EAST SIDE COMMUNITY SCHOOL,70,377,402,370 
01M458,FORSYTH SATELLITE ACADEMY,7,414,401,359 
01M509,MARTA VALLE HIGH SCHOOL,44,390,433,384 
01M515,LOWER EAST SIDE PREPARATORY HIGH SCHOOL,112,332,557,316 
01M539,"NEW EXPLORATIONS INTO SCIENCE, TECHNOLOGY AND MATH HIGH SCHOOL",159,522,574,525 
01M650,CASCADES HIGH SCHOOL,18,417,418,411 
01M696,BARD HIGH SCHOOL EARLY COLLEGE,130,624,604,628 
02M047,47 THE AMERICAN SIGN LANGUAGE AND ENGLISH SECONDARY SCHOOL,16,395,400,387 

Я использовал только математику, письмо и чтение. Моя цель для вышеприведенного кода - предсказать написание баллов, если я дам математику и чтение баллов.

Я никогда не видел, чтобы модель с градиентным спусками Tensorflow расходилась с такими простыми данными. Что было бы неправильно?

ответ

1

Вот несколько вариантов, вы можете попробовать:

  • Нормализация Вам входные и выходные данные
  • Установить меньшие начальные значения для весов
  • использовать более низкую скорость обучения
  • Разделите ваши потери на количество образцов, которые у вас есть (не помещая ваши данные в местозаполнитель, уже встречается редко).

Позвольте мне знать, что (если есть) из этих вариантов помогло и удачи!

+0

Благодарим за помощь! Но со всеми усилиями, которые я пробовал с вашими советами, ничего не улучшилось. Предыдущий код линейной регрессии, который я сделал без TF, имел такую ​​же проблему с кодом выше. Линейная регрессия начинает урод меня! –

+0

О, я только что изменил курс обучения до 0,0000252, и он работает !!! Спасибо. Но еще одна проблема заключается в том, что моя модель учится так медленно. –