【问题标题】:Cannot read image successfully in tensorflow无法在张量流中成功读取图像
【发布时间】:2017-05-17 07:16:44
【问题描述】:

我想批量读取 jpeg 图像以进行图像识别。图像在 /Image_p/ 文件中,图像名称在 label.csv 文件中列出,显示为 14634_right。

我的问题是如何修复我的代码以成功批量读取图像? 更具体地说,我不知道我是否应该编写一个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)

另外,我还编写了一个可以成功读取图像的新文件(感谢 martianwars 的帮助)。 我的测试代码:

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)

【问题讨论】:

  • 答案对你有帮助吗@Jeffy?

标签: python image machine-learning tensorflow computer-vision


【解决方案1】:

image 将具有 (?, ?, 3) 形状,因为它尚未被读取,但您已在 decode_jpeg() 函数中指定了通道。请尝试打印此内容,

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

【讨论】:

  • 非常感谢。你能帮我修复第一个原始代码吗?坦率地说,我不知道是否应该以及在哪里编写 for 循环和 tf.train.shuffle_batch()。我是 ML 的初学者,非常感谢!
  • 你可以尝试运行tf.train.shuffle_batch()你已经完成sess.run(image)吗?
  • 非常感谢!它似乎有效,但我在将图像与其标签匹配时仍然存在一些问题 =(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-12
  • 1970-01-01
  • 2017-05-11
  • 1970-01-01
相关资源
最近更新 更多