发新帖

TFRecord读取数据图像数据维度问题

[复制链接]
1902 14

快来加入 TensorFlowers 大家庭!

您需要 登录 才可以下载或查看,没有帐号?加入社区

x
在制作自己的数据集时采用了TFRecord形式但是在读取时出现了问题
捕获.PNG
代码如图中所示,我在制作tfrecord文件的时候保存了图像维度信息,然后在解码以后重新用tf.reshape()恢复,但是在用tf.train.shuffle_batch()时,报错出现
ValueError: All shapes must be fully defined: [TensorShape([Dimension(None), Dimension(None), Dimension(None)]), TensorShape([Dimension(None), Dimension(None)])]

这就很困惑了,我已经reshape了但是为什么他说我没有定义!!!!!
求解!!!!




我知道答案 回答被采纳将会获得10 金币 + 50 金币 已有14人回答
无标题.jpg
无标题1.jpg
本楼点评(0) 收起

精彩评论14

唐青枫  TF荚荚  发表于 2018-8-21 14:53:56 | 显示全部楼层
额!!!图好像挂了……还是贴代码吧!
  1. def read_tfRecord(tfRecord_path):
  2.     filename_queue = tf.train.string_input_producer([tfRecord_path], shuffle=True)
  3.     reader = tf.TFRecordReader()
  4.     _, serialized_example = reader.read(filename_queue)
  5.     features = tf.parse_single_example(serialized_example,
  6.                                        features={
  7.                                         'label': tf.FixedLenFeature([], tf.string),
  8.                                         'image_raw': tf.FixedLenFeature([], tf.string),
  9.                                         'height': tf.FixedLenFeature([], tf.int64),
  10.                                         'width': tf.FixedLenFeature([], tf.int64),
  11.                                         'channel': tf.FixedLenFeature([], tf.int64)                                       
  12.                                         })
  13.    
  14.     img = tf.decode_raw(features['image_raw'], tf.uint8)
  15.     label = tf.decode_raw(features['label'], tf.float32)
  16.    
  17.     height = tf.cast(features['height'], tf.int32)
  18.     width = tf.cast(features['width'], tf.int32)
  19.     channel = tf.cast(features['channel'], tf.int32)
  20.    
  21.    
  22.     image = tf.reshape(img, [height, width, channel])
  23.     groundtruth = tf.reshape(label, [height, width])
  24.    
  25.    

  26.    
  27.     print(height)
  28.     print(image)
  29.     print(groundtruth)
  30.    

  31.     return image, groundtruth
  32.       
  33. def get_tfrecord(num, isTrain=True):
  34.     if isTrain:
  35.         tfRecord_path = tfRecord_train
  36.     else:
  37.         tfRecord_path = tfRecord_test
  38.     img, label = read_tfRecord(tfRecord_path)
  39.    
  40.    
  41.     img_batch, label_batch = tf.train.shuffle_batch([img, label],
  42.                                                     batch_size = num,
  43.                                                     num_threads = 2,
  44.                                                     capacity = 10,
  45.                                                     min_after_dequeue = 7)
  46.    
  47.     return img, label
复制代码
本楼点评(0) 收起
魇餍  TF荚荚  发表于 2018-8-21 15:41:38 | 显示全部楼层
tensor.set_shape([height, width, 1])
手动设置一下就可以了
本楼点评(4) 收起
  • 唐青枫我试过了 image.set_shape()但是还是有问题吧,set_shape()要求参数不能是tensor,而我从tfrecord解码出来的height和width都是tensor~~哎
    2018-8-21 15:59 回复
  • 魇餍就不要使用解析之后的宽高,自己定义一个全局变量IMAGE_HIGHT,IMAGE_WITH
    2018-8-21 18:47 回复
  • 唐青枫回复 魇餍 :问题在于我数据集中的图片尺寸是不定的~~难点在于这一点,如果尺寸都一样反而容易了
    2018-8-21 19:04 回复
  • 魇餍载数据增强中先对数据进行随机裁剪一样大小的图片,distorted_image1 = tf.random_crop(image1, [height, width, 3]),在set_shape()
    2018-8-22 15:04 回复
唐青枫  TF荚荚  发表于 2018-8-21 19:08:00 | 显示全部楼层
对了~在这里再说明一下:我采用的数据集图像尺寸是不一样的!!!而网上大多是图像尺寸固定的方式
本楼点评(0) 收起
yagegege  TF豆豆  发表于 2018-8-24 09:15:09 | 显示全部楼层
大神,我知道啦
know.png
本楼点评(1) 收起
舟3332  TF芽芽  发表于 2018-8-25 23:04:40 | 显示全部楼层
为什么图片都看不到?
本楼点评(1) 收起
MPhone  TF荚荚  发表于 2019-1-21 22:25:47 | 显示全部楼层
哈哈哈哈我也遇到了
插个眼看看有没有大神
本楼点评(0) 收起
MPhone  TF荚荚  发表于 2019-1-21 22:26:19 | 显示全部楼层
楼主解决了吗
本楼点评(0) 收起
meiyu_422321  TF荚荚  发表于 2019-1-22 10:07:55 | 显示全部楼层
我最近也遇到同样问题,求解决
本楼点评(0) 收起
您需要登录后才可以回帖 登录 | 加入社区

本版积分规则

快速回复 返回顶部 返回列表