2015-12-15 3 views
8

Я пытаюсь реализовать очень базовую нейронную сеть в TensorFlow, но у меня возникают некоторые проблемы. Это очень базовая сеть, которая берет в качестве входных данных значения (часы или сон и часы обучения) и предсказывает баллы на тесте (я нашел этот пример на вашей трубке). Таким образом, в основном у меня есть только один скрытый слой с тремя единицами, каждый из которых вычисляет функцию активации (сигмоид), а функция стоимости - это сумма квадратных ошибок, и я использую градиентный спуск, чтобы свести его к минимуму. Таким образом, проблема заключается в том, что, когда я тренирую сеть с данными обучения и пытаюсь сделать некоторые прогнозы, используя одни и те же данные обучения, результаты не совсем совпадают, и они также кажутся странными, потому что они выглядят одинаково друг для друга.Основная нейронная сеть в TensorFlow

import tensorflow as tf 
import numpy as np 
import input_data 

sess = tf.InteractiveSession() 

# create a 2-D version of input for plotting 
trX = np.matrix(([3,5], [5,1],[10,2]), dtype=float) 
trY = np.matrix(([85], [82], [93]), dtype=float) # 3X1 matrix 
trX = trX/np.max(trX, axis=0) 
trY = trY/100 # 100 is the maximum score allowed 

teX = np.matrix(([3,5]), dtype=float) 
teY = np.matrix(([85]), dtype=float) 
teX = teX/np.amax(teX, axis=0) 
teY = teY/100 

def init_weights(shape): 
    return tf.Variable(tf.random_normal(shape, stddev=0.01)) 

def model(X, w_h, w_o): 
    z2 = tf.matmul(X, w_h) 
    a2 = tf.nn.sigmoid(z2) # this is a basic mlp, think 2 stacked logistic regressions 
    z3 = tf.matmul(a2, w_o) 
    yHat = tf.nn.sigmoid(z3) 
    return yHat # note that we dont take the softmax at the end because our cost fn does that for us 

X = tf.placeholder("float", [None, 2]) 
Y = tf.placeholder("float", [None, 1]) 

W1 = init_weights([2, 3]) # create symbolic variables 
W2 = init_weights([3, 1]) 

sess.run(tf.initialize_all_variables()) 

py_x = model(X, W1, W2) 

cost = tf.reduce_mean(tf.square(py_x - Y)) 
train_op = tf.train.GradientDescentOptimizer(0.5).minimize(cost) # construct an optimizer 
predict_op = py_x 

sess.run(train_op, feed_dict={X: trX, Y: trY}) 

print sess.run(predict_op, feed_dict={X: trX}) 

sess.close() 

Это дает:

[[0,51873487] [0,51874501] [0.51873082]]

, и я считаю, что это должно быть похоже на результаты обучения данных.

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

ответ

9

Основной причиной того, что ваша сеть не обучение, что заявление:

sess.run(train_op, feed_dict={X: trX, Y: trY}) 

... только выполняется один раз. В TensorFlow, работает train_op (или любой другой операции возвращается из Optimizer.minimize() только вызовет сеть, чтобы сделать один шаг градиентного спуска. Вы должны выполнить в цикле для выполнения итеративного обучения, а веса в конечном итоге сходятся.

Два другие советы: (i) вы можете добиться более быстрой конвергенции, если вы подаете подмножество ваших данных обучения на каждом шаге, а не на весь набор данных, и (ii) скорость обучения 0,5, вероятно, слишком высока (хотя это зависит от данные)

+0

Спасибо за ваш ответ. Поэтому я поставил тренировочный этап в петле и попробовал множество комбинаций размеров петель, и, хотя на самом деле оценки приблизились к данным обучения, это не совсем сходилось. Даже пытаясь преодолеть модель, я мог бы получить максимум: [[0.85000151] [0.85349745] [0.89352685]] – Thalles

+0

@Thalles, я тоже очень зелёный, но могу сказать, что существует два способа: тренируйте свой nnet: онлайн или стохастическое обучение, где backpropagation учится только по каждому наблюдению и периодически изучает, где он учится у всех одновременно. Существует также мини-пакет, который представляет собой смесь обоих. Стохастик имеет тенденцию быть быстрее, но конвергенция идет повсеместно. Пакет имеет тенденцию быть медленнее, но конвергенция более устойчива. Вы знаете, какой из них используется? –

+0

@Thalles вы никогда не получите 100% -ной точности, но ваша модель может быть намного лучше, если бы она включала, например, условия смещения. –

Смежные вопросы