私は、Cifar10(バイナリファイルsize = 96*96*3
バイト/画像)、1つの画像を次々に(STL-10 dataset)のような形式で画像の束を持っています。私が開いているファイルは138MBです。Tensorflow画像の読み取りと表示
私は&しかし私は2つの質問持って、読み取りが正しく行われていることを確認するために、画像を含むテンソルの内容を確認読み取ろうとしました -
- を
FixedLengthRecordReader
しかしちょうど、ファイル全体をロードしません一度に1つの入力を提供するか?最初のsize
バイトの読み込みは比較的速いはずです。ただし、コードの実行には約2分かかります。 - 実際のイメージの内容を表示可能な形式で取得する方法、またはイメージをよく読み取ることを検証するために内部で表示する方法はありますか?私は
sess.run(uint8image)
でしたが、結果は空です。
コードは以下の通りです:
import tensorflow as tf
def read_stl10(filename_queue):
class STL10Record(object):
pass
result = STL10Record()
result.height = 96
result.width = 96
result.depth = 3
image_bytes = result.height * result.width * result.depth
record_bytes = image_bytes
reader = tf.FixedLengthRecordReader(record_bytes=record_bytes)
result.key, value = reader.read(filename_queue)
print value
record_bytes = tf.decode_raw(value, tf.uint8)
depth_major = tf.reshape(tf.slice(record_bytes, [0], [image_bytes]),
[result.depth, result.height, result.width])
result.uint8image = tf.transpose(depth_major, [1, 2, 0])
return result
# probably a hack since I should've provided a string tensor
filename_queue = tf.train.string_input_producer(['./data/train_X'])
image = read_stl10(filename_queue)
print image.uint8image
with tf.Session() as sess:
result = sess.run(image.uint8image)
print result, type(result)
は出力:
Tensor("ReaderRead:1", shape=TensorShape([]), dtype=string)
Tensor("transpose:0", shape=TensorShape([Dimension(96), Dimension(96), Dimension(3)]), dtype=uint8)
I tensorflow/core/common_runtime/local_device.cc:25] Local device intra op parallelism threads: 4
I tensorflow/core/common_runtime/local_session.cc:45] Local session inter op parallelism threads: 4
[empty line for last print]
Process finished with exit code 137
それが何かを追加する場合、私は、私のCPU上でこれを実行していますよ。
EDIT:Rosaのおかげで純粋なTensorFlowソリューションが見つかりました。明らかに、結果を見るためにstring_input_producer
を使用するときは、キューランナーを初期化する必要があります。
...
with tf.Session() as sess:
tf.train.start_queue_runners(sess=sess)
...
その後、result
に画像がmatplotlib.pyplot.imshow(result)
で表示することができる。 コードに追加する唯一必要なことは、上記の下から2行目はです。私はこれが誰かを助けることを望む。さらなる質問がある場合は、私に尋ねるか、Rosaの答えのリンクを確認してください。
私は、([Dimension(96)、Dimension(96)、Dimension(3)]に基づいて1つの画像しか読んでいないように見えます。 –
これは私がやりたかったことですが、1つのイメージを読み込んで表示するのですが、TensorFlowがまだファイル全体を読み込むかどうかは分かりませんでした。読み込みには数分かかります(これは比較的簡単な操作ですlong) – mttk
numpyのファイルを3D配列として読み込み、tensorFlow変数に入力したくない理由はありますか? –