градиентный спуск представляет собой повторяющийся процесс, который минимизирует функцию стоимости пути обновления параметров много времени с:
W»= W - в delta_W
где W есть множество параметры вашей модели, a скорость обучения и delta_W - это приближение градиента функции стоимости. (см. подробности here)
sess.run(train_op, feed_dict={X:...,Y:...})
вычислить только одну итерацию с использованием X и Y для приближения градиента.
Таким образом, ваш второй код приближает градиент, используя все учебные данные (это дорого, но приближение является точным) и применяйте только один. Недостаточно сближения с минимумом.
Ваш первый код лучше, вы применяете один пример обновления, но приближение не очень точно (потому что вы используете только один пример).
Я предлагаю вам создать функцию generate_mini_batch
которая возвращает случайный набор данных на тренировочном наборе данных с их связанными этикетками и запустить этот цикл:
for i in range(N_STEPS) : # with N_STEPS very large
batch_x,batch_y = generate_mini_batch(trX,trY,s) # s is th size of the mini-batch
sess.run(train_op, feed_dict={X: batch_x, Y: batch_y})
Этот метод называется мини-партию градиентного спуска (см это video), и это фактически широко используется для проблемы оптимизации.
Привет, JLB, можете ли вы дать больше кода о втором случае? Что такое train_op, переменные X и Y? – Corentin
Конечно, здесь ниже есть код с определением стоимости, gradientDescent. Единственное различие действительно в отношении цикла оценки, упомянутого выше. стоимость = tf.square (Y - y_model) # использование квадратичной ошибки для функции стоимости train_op = tf.train.GradientDescentOptimizer (0,001) .minimize (стоимость) var_grad = tf.gradients (стоимость, W) с ТФ. Session() as sess: tf.initialize_all_variables(). Run() для i в диапазоне (100): sess.run (train_op, feed_dict = {X: trX, Y: trY}) – JLB
Вероятно, вы хотите, чтобы последний - получить tenorflow для управления исполнением. – drpng