Я пытаюсь написать код для алгоритма машинного обучения, чтобы изучить как концепции машинного обучения, так и Tensorflow. Алгоритм, который я пытаюсь написать:
(недостаточно репутации для вставки изображения) https://i.imgur.com/lxgC7YV.png
«Что эквивалентно кусочно-линейной модели регрессии».
Из (Уравнение 7):
https://arxiv.org/pdf/1411.3315.pdf
Я загрузил векторы, на которых хочу это сделать. И инициализировал мои заполнители и переменные:
size = len(originalVecs)
_x1 = tf.placeholder(tf.float64, shape=[size, 300], name="x1-input")
_x2 = tf.placeholder(tf.float64, shape=[size, 300], name="x2-input")
_w = tf.Variable(tf.random_uniform([300,300], -1, 1, dtype = tf.float64), name="weight1")
Мой прогноз, стоимость и шаг обучения я установил так:
prediction = tf.matmul(_x1,_w)
cost = tf.reduce_sum(tf.square(tf.norm(prediction - _x2)))
train_step = tf.train.GradientDescentOptimizer(0.01).minimize(cost)
После инициализации я тренируюсь со следующим:
for i in range(10000):
sess.run(train_step, feed_dict={_x1: timedVecs, _x2 : originalVecs})
if i % 1001 == 0:
print('Epoch ', i)
print('Prediction ', sess.run(prediction, feed_dict={_x1: timedVecs, _x2 : originalVecs}).shape)
Когда я запускаю свой код, он дико нестабилен и просто растет в течение примерно 20 итераций, чтобы просто напечатать NaN. Я думаю, что делаю пару вещей неправильно, но я не знаю, как исправить.
Форма прогноза - [20 300], когда я ожидаю, что он будет [1300]. Я хочу, чтобы он предсказывал, основываясь на единичных x1 и x2, а не на всех сразу, а затем попытался извлечь из суммы ошибок для всех точек данных (что я предполагаю кусочно). Однако я не знаю, как это сделать, так как думаю, что в настоящее время я минимизирую на основе матрицы 20 300, а не суммы 20 1300 матриц.
Я полагаю, что matmul верна, так как умножение является элементным?
Я ввожу свои входные данные в виде списка np-массивов. Каждый массив np является точкой данных с 300 измерениями.
Спасибо.