Ich bin neu bei TensorFlow und versuche, einen Algorithmus zu schreiben, um Bilder im CIFAR-10-Datensatz zu klassifizieren. Ich erhalte diese Fehlermeldung:tf.nn.softmax_cross_entropy_with_logits() Fehler: Logs und Labels müssen die gleiche Größe haben
InvalidArgumentError (see above for traceback): logits and labels must be same size: logits_size=[10000,10] labels_size=[1,10000]
[[Node: SoftmaxCrossEntropyWithLogits = SoftmaxCrossEntropyWithLogits[T=DT_FLOAT, _device="/job:localhost/replica:0/task:0/cpu:0"](Reshape, Reshape_1)]]
Hier mein Code:
import tensorflow as tf
from tensorflow.examples.tutorials.mnist import input_data
import cPickle
n_nodes_hl1 = 500
n_nodes_hl2 = 500
n_nodes_hl3 = 500
n_classes = 10
batch_size = 100
image_size = 32*32*3 # because 3 channels
x = tf.placeholder('float', shape=(None, image_size))
y = tf.placeholder('float')
def neural_network_model(data):
hidden_1_layer = {'weights':tf.Variable(tf.random_normal([image_size, n_nodes_hl1])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl1]))}
hidden_2_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl1, n_nodes_hl2])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl2]))}
hidden_3_layer = {'weights':tf.Variable(tf.random_normal([n_nodes_hl2, n_nodes_hl3])), 'biases':tf.Variable(tf.random_normal([n_nodes_hl3]))}
output_layer = {'weights':tf.Variable(I am new to TensorFlow and tf.random_normal([n_nodes_hl3, n_classes])), 'biases':tf.Variable(tf.random_normal([n_classes]))}
# input_data * weights + biases
l1 = tf.add(tf.matmul(data, hidden_1_layer['weights']), hidden_1_layer['biases'])
# activation function
l1 = tf.nn.relu(l1)
l2 = tf.add(tf.matmul(l1, hidden_2_layer['weights']), hidden_2_layer['biases'])
l2 = tf.nn.relu(l2)
l3 = tf.add(tf.matmul(l2, hidden_3_layer['weights']), hidden_3_layer['biases'])
l3 = tf.nn.relu(l3)
output = tf.matmul(l3, output_layer['weights']) + output_layer['biases']
return output
def train_neural_network(x):
prediction = neural_network_model(x)
cost = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(prediction, y))//THIS IS LINE 48 WHERE THE ERROR OCCURS
#learning rate = 0.001
optimizer = tf.train.AdamOptimizer().minimize(cost)
hm_epochs = 10
with tf.Session() as sess:
sess.run(tf.initialize_all_variables())
for epoch in range(hm_epochs):
epoch_loss = 0
for i in range(5):
with open('data_batch_'+str(i+1),'rb') as f:
train_data = cPickle.load(f)
print train_data
print prediction.get_shape()
#print len(y)
_, c = sess.run([optimizer, cost], feed_dict={x:train_data['data'],y:train_data['labels']})
epoch_loss += c
print 'Epoch ' + str(epoch) + ' completed out of ' + str(hm_epochs) + ' loss: ' + str(epoch_loss)
correct = tf.equal(tf.argmax(prediction,1), tf.argmax(y,1))
accuracy = tf.reduce_mean(tf.cast(correct, 'float'))
with open('test_batch','rb') as f:
test_data = cPickle.load(f)
accuracy = accuracy.eval({x:test_data['data'],y:test_data['labels']})
print 'Accuracy: ' + str(accuracy)
train_neural_network(x)
Ich bin mir ziemlich sicher, dass dies bedeutet, dass in der Leitung 48 (siehe oben) prediction
und y
ist nicht die gleiche Form, aber Ich verstehe TensorFlow nicht gut genug, um zu wissen, wie ich es beheben kann. Ich verstehe nicht einmal wirklich, wo y
gesetzt wird, ich habe den Großteil dieses Codes aus einem Tutorial und fiedelte damit, um es auf einen anderen Datensatz anzuwenden. Wie kann ich diesen Fehler beheben?
ich habe 'tf.squeeze()' und noch immer bin der gleiche Fehler –
Haben Sie auch swi tch an 'tf.nn.sparse_softmax_cross_entropy_with_logits()'? – mrry
Habe das nicht gesehen, danke. Jetzt bekomme ich 'TypeError: DataType float32 für attr 'Tlabels' nicht in der Liste der erlaubten Werte: int32, int64 'Ich denke, das hängt damit zusammen, worüber du geredet hast. Kann ich einfach 'y = tf.placeholder ('float')' in 'y = tf.placeholder ('int')' '? –