2017-11-17 4 views
1
import tensorflow as tf 
import numpy as np 
import glob 
fq=glob.glob("*.jpg") 
filename_queue = tf.train.string_input_producer(fq) 
reader = tf.WholeFileReader() 
key, value = reader.read(filename_queue) 
my_img = tf.image.decode_jpeg(value,channels=3) 
my_img=tf.cast(my_img,tf.float32) 
resized_image = tf.image.resize_images(my_img, [50, 50]) 


labels=[1,1,1,0,0] 
onehot = tf.one_hot(labels, depth=2) 



image_batch = tf.train.batch([resized_image], batch_size=2) 

# layer 1 
w1 = tf.Variable(tf.truncated_normal([2, 2, 3, 52], stddev=0.01)) 
b1= tf.Variable(tf.constant(0.01, shape = [52])) 
layer1=tf.nn.conv2d(image_batch,w1,[1,1,1,1],padding='SAME') 
act1=tf.nn.relu(tf.nn.bias_add(layer1,b1)) 
pool1=tf.layers.max_pooling2d(act1,2,2) 

# layer 2 
b2= tf.Variable(tf.constant(0.01, shape = [104])) 
w2=tf.Variable(tf.truncated_normal([2, 2,52, 104], stddev=0.01)) 
layer2=tf.nn.conv2d(pool1,w2,[1,1,1,1],padding='SAME') 
act2=tf.nn.relu(tf.nn.bias_add(layer2,b2)) 
pool2=tf.layers.max_pooling2d(act2,2,2) 

#fully connected layer 
b3= tf.Variable(tf.constant(0.01, shape = [300])) 
w3=tf.Variable(tf.truncated_normal([12*12*104, 300], stddev=0.01)) 
fcl1=tf.reshape(pool2,[-1,12*12*104]) 
fcl1 = tf.add(tf.matmul(fcl1, w3), b3) 
fcl1 = tf.nn.relu(fcl1) 
fcl1 = tf.nn.dropout(fcl1,0.5) 

#output layer 
b_out=b3= tf.Variable(tf.constant(0.01, shape = [2])) 
w_out=tf.Variable(tf.truncated_normal([300, 2], stddev=0.01)) 
ans=tf.add(tf.matmul(fcl1,w_out),b_out) 


#traning , loss , optimizer 
logits = ans 
prediction = tf.nn.softmax(logits) 
loss_op = tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits(
logits=logits, labels=onehot)) 
optimizer = tf.train.AdamOptimizer(learning_rate=0.001) 
train_op = optimizer.minimize(loss_op) 




with tf.Session() as s: 
    s.run(tf.global_variables_initializer()) 
    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 
    for step in range(1, 40): 
     s.run(train_op) 
     print(step,s.run(loss_op)) 
    coord.request_stop() 
    coord.join(threads) 

Traceback (most recent call last): File "test.py", line 56, in logits=logits, labels=onehot))Tensorflow:ラベリング問題

ValueError: Dimension 0 in both shapes must be equal, but are 2 and 5 for 'SoftmaxCrossEntropyWithLogits' (op: 'SoftmaxCrossEntropyWithLogits') with input shapes: [2,2], [5,2].

何が私のミスです教えてください、私は一度に2つのラベルを供給する必要があると思うが、それは一度にすべての5を取っています。ラベルを個別にバッチするにはどうすればよいですか?

答えて

1

入力バッチを作成していますが、バッチを作成していません。ラベルバッチも送ってみてください。後で、その後

labels = tf.placeholder(tf.int32, [None]) 
# Keep the tf.one_hot op. 
onehot = tf.one_hot(labels, depth=2) 

と:あなたのラベルのためのプレースホルダください正直

all_labels = [1, 1, 1, 0, 0] 
start = 0 
with tf.Session() as s: 
    # ... 
    for step in range(40): 
     t = all_labels[start:start+2] # grab next label batch 
     start += 2 
     if start > len(all_labels): 
      start = 0 # reset to start of list when we overrun the end 
     sess.run(train_op, feed_dict={labels: t}) 

を、私はあなたのデータのバッチと、ラベルのバッチの両方を同じように扱うだろうが、私は悩み方法を考え出すを抱えていましたtf.train.batchtf.one_hotの出力で機能するようにするには、生のラベル配列でtf.train.batchを実行してからtf.one_hotに渡すのに問題がありました。

+0

ありがとうございます、魅力的なように働いています。あなたは真の英雄です!人々はこの問題を「話題にはならない」とマークしましたが、デバッグを要求したことはありませんでしたが、疑問を解決したいので、生のコードを投稿することで人々が自分の状況を理解するのに役立ちます。本当にありがとう!再度、感謝します :) –

関連する問題