Я пытаюсь построить путаницу матрицы для анализа моего поезда и теста, и у меня возникают трудности с печатью / графикой матрицы. Я использую сверточные нейронные сети с 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, и я действительно борюсь.
Большое спасибо!