Ich habe eine tf.RandomShuffleQueue
genannt data_queue wie folgt definiert:Rang von Etiketten (1 empfangen) sollte gleich Rang Logits minus 1 (4 empfangen)
self.data_queue = tf.RandomShuffleQueue(capacity=1024,
min_after_dequeue=21,
dtypes=[tf.float32,
tf.int32],
shapes=[[221, 221, 3], []],
name="data_queue")
ich in der Lage bin, um erfolgreich enqueue Datenelemente hinein.
Der dequeue Betrieb ist wie folgt definiert:
[self.batch_images, self.batch_labels] = self.data_queue.dequeue_up_to(self.batchsize)
In dem obigen Schnipsel self.batchsize
ist eine Konstante Tensor.
Das Problem beginnt nun wie folgt:
es diese direkt auf mein Diagramm schieben will. Nur aus Gründen der Übersichtlichkeit die erste Schicht meines Diagramm ist wie folgt:
conv1 = tf.layers.conv2d(self.batch_images, filters=96, kernel_size=7,
strides=2,
activation=tf.nn.relu,
kernel_regularizer=tf
.random_uniform_initializer,
name='conv1')
Die letzten Zeilen, wo der Fehler verwiesen wird, sind:
drop2 = tf.layers.dropout(fc2, name='drop2')
cross_entropy = tf.nn.sparse_softmax_cross_entropy_with_logits(
logits=drop2,
labels=self.batch_labels,
name="cross_entropy_per_example")
Der Fehler, den ich erhalten ist:
line 1709, in sparse_softmax_cross_entropy_with_logits
(labels_static_shape.ndims, logits.get_shape().ndims))
ValueError: Rank mismatch: Rank of labels (received 1) should equal rank of logits minus 1 (received 4).
Als ich die
tf.rank
vonself.images
undself.labels
überprüfte, bekam ich th e folgendes:Labels Tensor ("Rank: 0", die Form =(), dtype = float32) Bilder Tensor ("Rank_1: 0", die Form =(), dtype = int32)
Was ist der Grund dafür?
HINWEIS Ich will nicht tf.placeholder
und feed_dict
verwenden. Ich möchte den self.data_queue
direkt mit dem Graphen verbinden.