Получение нанотрубок в тензорном потоке - PullRequest
0 голосов
/ 16 декабря 2018

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

Набор данных, который я решил использовать, взят из kaggle.

https://www.kaggle.com/andonians/random-linear-regression/version/2

Поскольку я новичок, я не хотел делить набор данных на 2 части, а именно: обучение и проверка.

Мой код выглядит следующим образом

train=train.reindex(np.random.permutation(train.index))
train['x']=train['x']/(train['x'].max())
train['y']=train['y']/(train['y'].max())
train_features=np.array(train[['x']])

train_label=np.array(train[['y']])

train_features=tf.convert_to_tensor(train_features)
train_label=tf.convert_to_tensor(train_label)

w=tf.convert_to_tensor(tf.Variable(tf.truncated_normal([1,700],mean=0.0,stddev=1.0,dtype=tf.float64)))

b=tf.convert_to_tensor(tf.Variable(tf.zeros(1,dtype=tf.float64)))
def cal(x,y):
prediction=tf.add(tf.matmul(w,x),b)
error=tf.reduce_mean(tf.square(y-prediction))
return [prediction,error]
y,cost=cal(train_features,train_label)

learning_rate=0.05

epochs=3000

init=tf.global_variables_initializer()
optimize=tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)

with tf.Session() as sess:

sess.run(init)
for i in list(range(epochs)):
sess.run(optimize)
print(sess.run(cost))

Но вывод, который я получаю, - это Nan.до 3000 строк (эпох - 3000).

Кажется, я не могу понять причину.Я даже пытался запустить его без нормализации, то есть без преобразования значений между 0 и 1. Я также снизил скорость обучения до 0,0005.Но, похоже, ничего не даст.

Заранее спасибо.

PS - Я не включил тестовый набор, так как сначала хочу потренироваться и посмотреть, работает ли он.Я добавлю это позже.

1 Ответ

0 голосов
/ 23 декабря 2018

Примечание : Поскольку никто не ответил на мой вопрос, и я сам понял его, я решил ответить на мой вопрос в случае, если кто-то столкнется с такими же проблемами.

1) значения нанЯ получал при запуске программы, потому что исходный набор данных имел значения nan.Чтобы решить эту проблему, используйте

train.dropna(inplace=True)

Это должно очистить значения nan.

2) Размер w должен соответствовать размеру x .Для отдельной функции пусть размер x будет (м, 1).Тогда размер w будет (1, м).Это по сути матричное умножение.

...