あなただけのワンホットラベルのテンソルで
tf.one_hot(labels, depth=2)
の結果を使用し、あなたがlabels = [1, 1, 1, 0, 0]
をしたい知っている場合:
array([[ 0., 1.],
[ 0., 1.],
[ 0., 1.],
[ 1., 0.],
[ 1., 0.]], dtype=float32)
注tf.one_hot
どんな指標で1
を置きますあなたがそれを与える最初の入力によって示されます。
<tf.Tensor 'one_hot:0' shape=(5, 2) dtype=float32>
、示す値をとるものと評価されるまで、それはありません。また、あなたはノートでこれを実行し、テンソルを印刷しようとした場合、あなたのようなものを取得しますので、これはテンソルであることに注意してくださいそれがTensorFlowのしくみです。
したがって、バッチサイズが2の場合、トレーニングステップごとに2つのラベルをネットワークに供給し、それらのラベルを(トレーニングステップまたはネットワークのいずれかで)ワンホットに変換しています。あなたのトレーニングプロセスに続いて
labels = tf.placeholder(tf.int32, [None]) # 'None' means it has one dimension that is determined by your batch size
# ... define your network ...
loss_op = tf.nn.softmax_cross_entropy_with_logits(logits=logits,
labels=tf.one_hot(labels))
loss_op = tf.reduce_mean(loss_op)
:私のような何かをするだろう
for _ in range(num_iter):
d = # generate data batch
t = # generate label batch, e.g. [1, 1] for the first two images
_, batch_loss = sess.run([train_op, loss_op],
feed_dict={data: d, labels: t})
しかし、私がログに言ったようにその可変形状は[2,2]あなたの解が[5,2]の* onehot *形を作ることになります。 ValueError:両方の図形の寸法0は等しくなければならないが、[SoftmaxCrossEntropyWithLogits '(op:' SoftmaxCrossEntropyWithLogits ')の入力図形が[2,2]、[5,2]の場合は2と5です。 **何か不足していますか? –
決して、あなたのネットワークにあなたの特定のバッチ用のラベルが何であれ、それを供給してください。これを反映するように答えを更新します。 – Engineero
@yinyang私はあなたが望むと思うようにこれを使う方法を示すために更新しました。私はこれを実行しなかったので、プレースホルダがどのように定義されているかによって次元エラーが発生する可能性があります。もしそうなら、代わりに 'tf.placeholder(tf.int32、[None])'を試してください。 – Engineero