Матрица путаницы с использованием тензорного потока по классификации CNN - PullRequest
1 голос
/ 27 апреля 2020

Я пытаюсь построить путаницу матрицы для анализа моего поезда и теста, и у меня возникают трудности с печатью / графикой матрицы. Я использую сверточные нейронные сети с Tensorflow для классификации, и у меня есть 3 метки для классификации.

Вот как я пытаюсь напечатать это:

    true_class = tf.argmax(y, 1)
    predicted_class = tf.argmax(prediction, 1)
    confusion = tf.confusion_matrix(true_class, predicted_class, 3)

    print(confusion)

Но печать возвращает меня следующий результат:

Tensor("confusion_matrix/SparseTensorDenseAdd:0", shape=(3, 3), dtype=int32)

Затем я искал людей с той же проблемой, и я попытался сделать это:

    true_class = tf.argmax(y, 1)
    predicted_class = tf.argmax(prediction, 1)
    confusion = tf.confusion_matrix(true_class, predicted_class, 3)

    print('Confusion Matrix: \n\n', tf.Tensor.eval(confusion,feed_dict=None, session=sess))

И это дает мне следующую ошибку:

tensorflow.python.framework.errors_impl.InvalidArgumentError: You must feed a value for placeholder tensor 'Placeholder' with dtype float
         [[{{node Placeholder}}]]

Мой код:

def convolutional_neural_network(x):
    number = calc()

    weights = {'W_conv1': tf.Variable(tf.random_normal([3, 3, 3, 1, 32])),
               'W_conv2': tf.Variable(tf.random_normal([3, 3, 3, 32, 64])),
               'W_fc': tf.Variable(tf.random_normal([number, 1024])),
               'out': tf.Variable(tf.random_normal([1024, n_classes]))}

    biases = {'b_conv1': tf.Variable(tf.random_normal([32])),
              'b_conv2': tf.Variable(tf.random_normal([64])),
              'b_fc': tf.Variable(tf.random_normal([1024])),
              'out': tf.Variable(tf.random_normal([n_classes]))}

    x = tf.reshape(x, shape=[-1, IMG_SIZE_PX, IMG_SIZE_PX, SLICE_COUNT, 1])

    conv1 = tf.nn.relu(conv3d(x, weights['W_conv1']) + biases['b_conv1'])
    conv1 = maxpool3d(conv1)

    conv2 = tf.nn.relu(conv3d(conv1, weights['W_conv2']) + biases['b_conv2'])
    conv2 = maxpool3d(conv2)

    fc = tf.reshape(conv2, [-1, number])
    fc = tf.nn.relu(tf.matmul(fc, weights['W_fc']) + biases['b_fc'])
    fc = tf.nn.dropout(fc, keep_rate)

    output = tf.matmul(fc, weights['out']) + biases['out']

    return output


def train_neural_network(x):
    much_data = np.load('muchdata-50-50-30-pre.npy', allow_pickle=True)
    train_data = much_data[400:410]
    validation_data = much_data[390:399]

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

    hm_epochs = 1
    with tf.Session() as sess:
        sess.run(tf.global_variables_initializer())

        for epoch in range(hm_epochs):
            epoch_loss = 0
            for data in train_data:
                X = data[0]
                Y = data[1]
                _, c = sess.run([optimizer, cost], feed_dict={x: X, y: Y})
                epoch_loss += c

            print('Epoch', epoch + 1, '/', hm_epochs, '. Loss:', epoch_loss)

        true_class = tf.argmax(y, 1)
        predicted_class = tf.argmax(prediction, 1)
        confusion = tf.confusion_matrix(true_class, predicted_class, 3)

        print('Confusion Matrix: \n\n', tf.Tensor.eval(confusion,feed_dict=None, session=sess))

        correct = tf.equal(tf.argmax(prediction, 1), tf.argmax(y, 1))
        accuracy = tf.reduce_mean(tf.cast(correct, 'float'))

        saver = tf.train.Saver()

        saver.save(sess, '../api/modelo')

        print('Accuracy:', accuracy.eval(
            {x: [i[0] for i in validation_data], y: [i[1] for i in validation_data]}))

Если кто-нибудь может помочь мне выяснить, что происходит, я буду очень благодарен! Я новичок в этом топи c, и я действительно борюсь.

Большое спасибо!

1 Ответ

0 голосов
/ 27 апреля 2020

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

print('Confusion Matrix: \n\n', tf.Tensor.eval(confusion,feed_dict=None, session=sess))

на следующую, где your_X и your_Y - ваш тестовый ввод и метки, которые нам нужны для построения графика Матрица смешения на.

print(sess.run(confusion, feed_dict={x:your_X, y:your_Y}))

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