Точность уменьшается, если я не использую функцию tenorflow mnist.train.next_batch - PullRequest
0 голосов
/ 23 января 2020

Я сделал простую тензорную нейронную сеть для данных mnist, в ней всего 3 плотных слоя. Когда я использую функцию mnist.train.next_batch(batch_size), проблем нет, сеть работает нормально, но я сделал еще одну пакетную функцию, и когда я пытаюсь тренироваться с этой функцией, точность снижается.

Я пытался сравнить партии, которые создает моя функция, и по умолчанию, все партии одинаковы, и самое странное, если я напишу mnist.train.next_batch(batch_size) в верхней части моего l oop, точность снова начнет увеличиваться, даже если я использую партии из своей функции.

is mnist.train.next_batch(batch_size) функция делает что-то еще или как это вообще возможно.

моя функция пакета

def give_me_batch(x, batch_size, batch_number):
    if(batch_number == 0):
        return x[0:batch_size] 
    batch = x[batch_size * batch_number:(batch_number+1)*batch_size]
    return batch

обучение l oop

for epoch in range(epochs):
    epoch_loss = 0
    for i in range(mnist.train.num_examples // batch_size):
        a, b = mnist.train.next_batch(batch_size,shuffle=False) #if I delete this accuricy goes down
        epoch_x = give_me_batch(x_train, batch_size, i)
        epoch_y = give_me_batch(y_train, batch_size, i)
        if(a == epoch_x).all():
            print("same")
            print(epoch_x.shape,a.shape)
        _, c = sess.run([optimizer, cost], feed_dict={x: epoch_x, y: epoch_y})
        epoch_loss += c

        correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y,1))
        accuaricy = tf.reduce_mean(tf.cast(correct, "float"))
        validation_accuracy = accuaricy.eval({x:x_val, y:y_val})
        print("validation accuracy:{}".format(validation_accuracy))


если Я удаляю эту строку a, b = mnist.train.next_batch(batch_size,shuffle=False) точность уменьшается каждую эпоху.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...