2017-11-17 7 views
1
fq=glob.glob("*.jpg") # ['0.jpg','1.jpg','2.jpg','3.jpg','4.jpg'],labels for images=[1,1,1,0,0] 
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(logits=logits, labels=onehot)) 

に私のインポートされたイメージのために手動でラベルのリストを作るのですか、私"onehot"変数リストに画像0,1,2 .jpgの場合は[1,0]、画像3,4.jpgの場合は[0,1]のような1つのホットエンコードされたラベルが含まれています。多くの感謝:)は、どのように私は2</strong>と<strong>logitsである[2,2]テンソル</strong>、どのようにされただけで<strong>2クラス</strong>と<strong>バッチサイズがあることを想定しtensorflow

答えて

1

あなただけのワンホットラベルのテンソルで

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}) 
+0

しかし、私がログに言ったようにその可変形状は[2,2]あなたの解が[5,2]の* onehot *形を作ることになります。 ValueError:両方の図形の寸法0は等しくなければならないが、[SoftmaxCrossEntropyWithLogits '(op:' SoftmaxCrossEntropyWithLogits ')の入力図形が[2,2]、[5,2]の場合は2と5です。 **何か不足していますか? –

+0

決して、あなたのネットワークにあなたの特定のバッチ用のラベルが何であれ、それを供給してください。これを反映するように答えを更新します。 – Engineero

+1

@yinyang私はあなたが望むと思うようにこれを使う方法を示すために更新しました。私はこれを実行しなかったので、プレースホルダがどのように定義されているかによって次元エラーが発生する可能性があります。もしそうなら、代わりに 'tf.placeholder(tf.int32、[None])'を試してください。 – Engineero

1

ご入力配列がnumpyの配列である場合、あなたはnp.eyeを使用することができます。

label_array = np.array([1, 1, 1, 0, 0]) 
onehot_array = np.eye(2)[label_array] 

結果は:[[0. 0. 1]、[0. 1.]、[0. 1.]、[1. 0.]、[1. 0.]]

関連する問題

 関連する問題