Увеличение стоимости в конце каждой эпохи - PullRequest
0 голосов
/ 02 июля 2018

Я относительно новичок в TensorFlow, и я пытался поиграться с набором данных MNIST.

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

Было бы здорово, если бы кто-нибудь мне помог.

import tensorflow as tf
import numpy as np
from tensorflow.examples.tutorials.mnist import input_data

mnist = input_data.read_data_sets('/tmp/data/',one_hot = True)

def NN(x):
    layer1 = 10
    layer2 = 10
    inps = 28*28
    outs = 10

    w1 = tf.Variable(np.random.randn(layer1, inps))
    w2 = tf.Variable(np.random.randn(layer2, layer1))
    w3 = tf.Variable(np.random.randn(outs, layer2))

    l1 = tf.matmul(w1,x)
    l1 = tf.nn.relu(l1)

    l2 = tf.matmul(w2,l1)
    l2 = tf.nn.relu(l2)

    l3 = tf.matmul(w3, l2)

    return l3


x = tf.placeholder(tf.float64, [28*28, None])
y = tf.placeholder(tf.int64, [10, None])
predic = NN(x)

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = predic,labels = y))
optimizer = tf.train.AdamOptimizer().minimize(cost)

batch_size = 512
epoch = 5

with tf.Session() as sess:
    sess.run(tf.global_variables_initializer())
    for e in range(epoch):
        e_cost = 0
        for b in range(0,int(mnist.train.num_examples/batch_size)):
            x1, y1 = mnist.train.next_batch(batch_size)
            c,_ = sess.run([cost, optimizer], feed_dict = {x: x1.T, y: y1.T})
            e_cost += c
        print("Epoch Cost: ", e_cost)

Вывод выглядит так

Epoch Cost:  485846.36608997884
Epoch Cost:  1133384.4635202957
Epoch Cost:  3738400.689635882
Epoch Cost:  9999002.612394715
Epoch Cost:  22214906.41488508

1 Ответ

0 голосов
/ 02 июля 2018

Я понял это.

Функция:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = predic,labels = y))

требует, чтобы логиты и метки были матрицами, чтобы иметь форму: (batch_size, num_outputs). Мне пришлось транспонировать матрицы, чтобы получить правильный результат.

Исправленная функция:

cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits = tf.transpose(predic), labels = tf.transpose(y)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...