Tensorflow : результат обучающих данных (с использованием sigmoid) выдан в обратном порядке

#python #python-3.x #tensorflow #sigmoid

#python #python-3.x #tensorflow #sigmoid

Вопрос:

Я попытался обучить свои данные, используя «Алгоритм градиентного спуска», чтобы минимизировать стоимость,

и, как ни странно, результат получался по-разному в зависимости от количества шагов.

Ниже приведен мой обучающий код:

 import tensorflow as tf
X = tf.placeholder(tf.float32, shape=[None, 2], name="X")
Y = tf.placeholder(tf.float32, shape=[None, 1], name="Y")
W = tf.Variable(tf.random_normal([2, 1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")

hypo = tf.sigmoid(tf.matmul(X, W)  b)

cost = -tf.reduce_mean(Y*(tf.log*(hypo))   (1-Y)*(tf.log(1-hypo)))
optimizer = tf.train.GradientDescentOptimizer(learning_rate=1e-3)
train = optimizer.minimize(cost)

#### Saving model
SAVER_DIR = "model"
saver = tf.train.Saver()
checkpoint_path = os.path.join(SAVER_DIR, "model")
ckpt = tf.train.get_checkpoint_state(SAVER_DIR)

sess = tf.Session()
sess.run(tf.global_variables_initializer())
for step in range(4201):
    cost_val, hy_val, _ = sess.run([cost, hypo, train], feed_dict={X:x_data, Y=y_data})

saver.save(sess, checkpoint_path, global_step=step)
  

И восстановление модели:

 saver = tf.train.import_meta_graph('./model/model-4200.meta')
saver.restore(sess,'./model/model-4200')

result = sess.run(hypo, feed_dict={X: x_data_test})

fig, ax = plt.subplots()
ax.plot(Julian_test,y_data_test,'ro-') # Correct answer. all items are one of the two:0 or 1.
ax.plot(Julian_test,result,'bo-')      # Result of training. Predict answer within
plt.show() #                            sigmoid function, so all items are in range of 0 ~ 1.
  

график, где шаг = 4200

Как показано на рисунке, результат sigmoid обратный.

Но, когда я изменил количество шагов на 5000, (в моем приведенном выше коде я изменил только шаг.)

результат выдан правильно.

график, где шаг = 5000

Я не могу понять, почему это приводит к различию. Я что-то пропустил? Действительно нужна помощь!

Ответ №1:

проще говоря, увеличивая шаги, вы позволяете вашему коду / модели tensorflow просматривать данные несколько раз, следовательно, предоставляя ему возможность получать больше информации о данных. и обобщаем его представление.

Например, допустим, вы задаете своей модели 2000 шагов, и в конце 2000 шагов она находит минимум, и ваша модель останавливается на нем. но что, если минимальная стоимость, которую модель нашла до сих пор, не является глобальным минимумом, мы не можем сказать, потому что мы ограничили ее 2000 шагами. итак, допустим, вы увеличиваете шаги до 20000, и модель теперь находит другой минимум, который дает более точные результаты.

Но вам нужно убедиться, что ваша модель не подходит, т. е. обеспечивает точность ваших обучающих данных, но не вашего набора проверки. (Поэтому убедитесь, что не увеличиваете количество шагов слишком сильно).

Комментарии:

1. Спасибо за комментарии, гусейн 🙂 Я забыл упомянуть, что каждый раз в конце обучения я строил график пошаговых затрат и проверял, является ли он глобальным минимумом. Поэтому я думаю, что это вызвано другой причиной. Теперь я осторожно предполагаю, что это просто зависит от удачи .. начальной точки. Если обучение начинается с низкой стоимости, оно может обычно заканчиваться.. Хотя я действительно не уверен: (

2. да, это зависит от этого, но это не удача, вы наверняка можете инициализировать свой weights так, как хотите, для этого есть много технологий. Также, что вы имели в виду под пошаговым графиком затрат и как вы проверили свой глобальный минимум? я не могу понять этот момент? также, если вы нашли этот ответ полезным, не могли бы вы, пожалуйста, проголосовать 🙂 спасибо

3. Я имею в виду, что в конце обучения я построил графики шагов для оси x, стоимости для оси y и проверил, где произошел локальный минимум. То есть вы имеете в виду контроль начального значения веса не случайным образом, а до определенной константы, что приводит к надлежащей начальной стоимости?

4. да, вы видите, что минимум, который вы получаете в конце шага, might выглядит как глобальный минимум модели для заданного количества шагов, но что, если модель сможет больше тренироваться и находить более оптимальное решение, учитывая еще несколько шагов? он может найти новое минимальное значение, которое лучше и оптимальнее предыдущего, учитывая, увеличены ли шаги. Методы инициализации только помогают быстрее достичь этой global minimum точки.

5. О, хорошо, я понял! Однако график построен как одна большая, постепенно уменьшающаяся кривая.. Честно говоря, я не могу доверять этому графику на 100% самому себе. Это такая сложная область для изучения: ( Спасибо за твою точку зрения, Гусейн. Я постараюсь найти другой способ обучения!