Я сделал простую тензорную нейронную сеть для данных 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)
точность уменьшается каждую эпоху.