2017-01-03 9 views
1

jpeg画像を画像認識のためにバッチに読み込みたいです。イメージは/ Image_p /ファイルにあり、イメージ名は14634_rightのように表示されるlabel.csvファイルにリストされています。テンソルフローで画像を正常に読み取ることができません

私の質問はイメージをバッチに読み込むためにコードを修正するにはどうしたらいいですか? さらに具体的には、forループを記述する必要があるかどうか、および実装する場所がわかりません。元のコードのために

、私は tf.train.shuffle_batch()機能にエラーメッセージが表示されました:

ValueError: All shapes must be fully defined: [TensorShape([Dimension(None), Dimension(None), Dimension(3)]), TensorShape([])] 

私の原点コード:

# filepath 
csv_filepath = r'C:\Users\Jeffy\OneDrive\Course\NMDA\retinaProject\label.csv' 

# image parameter 
pic_num = 100 
pic_height = 64 
pic_width = 64 
batch_size = 10 

# ============================================================================= 
# import library 
import tensorflow as tf 
import numpy as np 

# ============================================================================= 
# read csv data 
csv = np.loadtxt(open(csv_filepath,"rb"), delimiter=",", dtype='str') 
pic_filename = ["" for x in range(pic_num)] 

for i in range(pic_num): 
    pic_filename[i] = eval(csv[i,0]).decode("utf-8") +'.jpeg' 

# read the data into batch 
for i in range(pic_num): 
    # read and decode the image 
    image_contents = tf.read_file('Image_p/' + eval(csv[i,0]).decode("utf-8") +'.jpeg') 
    image = tf.image.decode_jpeg(image_contents, channels=3) 
    image = tf.to_float(image) 

    # Generate batch 
    batch = tf.train.shuffle_batch([image, float(eval(csv[i,1]))], 
            batch_size = batch_size, 
            num_threads = 1, 

            capacity = batch_size * 100, 
            min_after_dequeue = batch_size * 10) 


with tf.Session() as sess:  
    sess.run(tf.global_variables_initializer()) 

    coord = tf.train.Coordinator() 
    threads = tf.train.start_queue_runners(coord=coord) 

    image_tensor = sess.run([batch]) 
    print(batch) 

    coord.request_stop() 
    coord.join(threads) 

プラス、私はまた、画像を読み取ることができる新しいファイルを書かれています首尾よく(マーティンウォールの助けを借りてありがとう)。 私のテストコード:それはまだ読み込まれていないので、

import tensorflow as tf  
# read and decode the image 
image_contents = tf.read_file('Image_p/11247_left.jpeg') 
image = tf.image.decode_jpeg(image_contents, channels=3) 

with tf.Session() as sess: 
    img = sess.run(image) 
    print(img) 
+0

答えが@Jeffyでしたか? – martianwars

答えて

0

image(?, ?, 3)形状を有していますが、decode_jpeg()機能でチャンネルを指定しています。これを代わりに印刷してみてください。

with tf.Session() as sess: 
    img = sess.run(image) 
    print(img) 
+0

ありがとうございます。あなたは最初の起源コードを修正する手助けをしますか?率直に言って、私はforループと 'tf.train.shuffle_batch()'を書くべきかどうか、どこで書くべきか分かりません。私はMLでかなり初心者です、ありがとう! – Jeffy

+0

'sess.run(image)'をやった後に 'tf.train.shuffle_batch()' *を実行しようとすることができますか? – martianwars

+0

thxたくさん!それは動作するようですが、私はまだ画像とそのラベル= – Jeffy

関連する問題