0
CNNを実装しようとしていますが、マイナーな問題が発生しました。Tensor異なるサイズのオブジェクト
x = tf.placeholder(tf.float32, [None, 28, 28, 1])
# 0-9 digits recognition => 10 classes.
y = tf.placeholder(tf.float32, [None, 10])
...code for layers...
...etc....
# Output has a shape of [batch_size, 10]
logits = tf.layers.dense(inputs=dropout, units=10)
# Softmax layer for deriving probabilities.
pred = tf.nn.softmax(logits, name="softmax_tensor")
# Convert labels to a one-hot encoding.
onehot_labels = tf.one_hot(indices=tf.cast(y, tf.int32), depth=10)
loss = tf.losses.softmax_cross_entropy(onehot_labels=onehot_labels, logits=logits)
見えるようlogits
とonehot_labels
は異なる形状のものであるので、losses
機能が正しく実行されません。 logits
はshape=(2,)
であり、onehot_labels
はshape=(3,)
であり、これはy
プレースホルダー([batch_size, 10]
)に依存するためです。
これを修正する方法がわかりません。私はこれらの変数のいずれかの形状を変更する必要がありますが、どの変数が正しいかわかりません。 CNNは、batch_size
を引数として持つラベルであるy
を要求していますか?どこが間違っていますか?
いくつかの余分な情報、私は
# Assign the contents of `batch_xs` to variable `x`.
_, c = sess.run([train_op, loss], feed_dict={x:sess.run(batch_xs), y:batch_ys})
あなたが正しいとは限りません。私はCNNチュートリアルから別のデータセットを使用しています。データはすでに1つのホットラベルに変換されています – Bolboa