使用 tfslim 解码 tfrecord

2023-11-30

我在 CPU 上使用 Python 2.7.13 和 Tensorflow 1.3.0。

我想使用 DensNet( https://github.com/pudae/tensorflow-densenet ) 来解决回归问题。我的数据包含 60000 个 jpeg 图像,每个图像有 37 个浮动标签。 我通过以下方式将数据保存到 tfrecords 文件中:

def Read_Labels(label_path):
labels_csv = pd.read_csv(label_path)
labels = np.array(labels_csv)
return labels[:,1:]

`

def load_image(addr):
# read an image and resize to (224, 224)
img = cv2.imread(addr)
img = cv2.resize(img, (224, 224), interpolation=cv2.INTER_CUBIC)
img = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
img = img.astype(np.float32)
return img

def Shuffle_images_with_labels(shuffle_data, photo_filenames, labels):
if shuffle_data:
    c = list(zip(photo_filenames, labels))
    shuffle(c)
    addrs, labels = zip(*c)
    return addrs, labels

def image_to_tfexample_mine(image_data, image_format, height, width, label):
return tf.train.Example(features=tf.train.Features(feature={
  'image/encoded': bytes_feature(image_data),    
  'image/format': bytes_feature(image_format),
  'image/class/label': _float_feature(label),
  'image/height': int64_feature(height),
  'image/width': int64_feature(width),
}))

def _convert_dataset(split_name, filenames, labels, dataset_dir):
assert split_name in ['train', 'validation']

num_per_shard = int(math.ceil(len(filenames) / float(_NUM_SHARDS)))

with tf.Graph().as_default():

    for shard_id in range(_NUM_SHARDS):
      output_filename = _get_dataset_filename(dataset_path, split_name, shard_id)

      with tf.python_io.TFRecordWriter(output_filename) as tfrecord_writer:
          start_ndx = shard_id * num_per_shard
          end_ndx = min((shard_id+1) * num_per_shard, len(filenames))
          for i in range(start_ndx, end_ndx):
              sys.stdout.write('\r>> Converting image %d/%d shard %d' % (
                      i+1, len(filenames), shard_id))
              sys.stdout.flush()

              img = load_image(filenames[i])
              image_data = tf.compat.as_bytes(img.tostring())

              label = labels[i]

              example = image_to_tfexample_mine(image_data, image_format, height, width, label)

              # Serialize to string and write on the file
              tfrecord_writer.write(example.SerializeToString())

sys.stdout.write('\n')
sys.stdout.flush()

def run(dataset_dir):

labels = Read_Labels(dataset_dir + '/training_labels.csv')

photo_filenames = _get_filenames_and_classes(dataset_dir + '/images_training')

shuffle_data = True 

photo_filenames, labels = Shuffle_images_with_labels(
        shuffle_data,photo_filenames, labels)

training_filenames = photo_filenames[_NUM_VALIDATION:]
training_labels = labels[_NUM_VALIDATION:]

validation_filenames = photo_filenames[:_NUM_VALIDATION]
validation_labels = labels[:_NUM_VALIDATION]

_convert_dataset('train',
                 training_filenames, training_labels, dataset_path)
_convert_dataset('validation',
                 validation_filenames, validation_labels, dataset_path)

print('\nFinished converting the Flowers dataset!')

我通过以下方式解码它:

with tf.Session() as sess:

feature = {
  'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
  'image/format': tf.FixedLenFeature((), tf.string, default_value='jpeg'),
  'image/class/label': tf.FixedLenFeature(
      [37,], tf.float32, default_value=tf.zeros([37,], dtype=tf.float32)),
   }

filename_queue = tf.train.string_input_producer([data_path], num_epochs=1)

reader = tf.TFRecordReader()
_, serialized_example = reader.read(filename_queue)

features = tf.parse_single_example(serialized_example, features=feature)

image = tf.decode_raw(features['image/encoded'], tf.float32)
print(image.get_shape())

label = tf.cast(features['image/class/label'], tf.float32)

image = tf.reshape(image, [224, 224, 3])

images, labels = tf.train.shuffle_batch([image, label], batch_size=10, capacity=30, num_threads=1, min_after_dequeue=10)

init_op = tf.group(tf.global_variables_initializer(), tf.local_variables_initializer())
sess.run(init_op)

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

for batch_index in range(6):
    img, lbl = sess.run([images, labels])
    img = img.astype(np.uint8)
    print(img.shape)
    for j in range(6):
        plt.subplot(2, 3, j+1)
        plt.imshow(img[j, ...])
    plt.show()

coord.request_stop()

coord.join(threads)

到目前为止一切都很好。但是当我使用以下命令解码 TFRecord 文件时:

 reader = tf.TFRecordReader

keys_to_features = {
      'image/encoded': tf.FixedLenFeature((), tf.string, default_value=''),
      'image/format': tf.FixedLenFeature((), tf.string, default_value='raw'),
      'image/class/label': tf.FixedLenFeature(
      [37,], tf.float32, default_value=tf.zeros([37,], dtype=tf.float32)),
      }

items_to_handlers = {
      'image': slim.tfexample_decoder.Image('image/encoded'),
      'label': slim.tfexample_decoder.Tensor('image/class/label'),
   }

decoder = slim.tfexample_decoder.TFExampleDecoder(
      keys_to_features, items_to_handlers)

我收到以下错误。

信息:tensorflow:向协调器报告错误:,断言失败:[无法将字节解码为 JPEG、PNG、GIF 或 BMP] [[节点:case/If_0/decode_image/cond_jpeg/cond_png/cond_gif/Assert_1/Assert = Assert[T=[DT_STRING],summary=3,_device="/job:localhost/replica:0/task:0/cpu: 0"](案例/If_0/decode_image/cond_jpeg/cond_png/cond_gif/is_bmp,案例/If_0/decode_image/cond_jpeg/cond_png/cond_gif/Assert_1/Assert/data_0)]] 信息:tensorflow:捕获 OutOfRangeError。停止训练。 信息:sensorflow:培训完成!将模型保存到磁盘。


要使用 Densenet 解决我的问题,我应该首先修复此错误。 有人可以帮我解决这个问题吗?此代码非常适合 https://github.com/pudae/tensorflow-densenet/tree/master/datasets 上提供的花、MNIST 和 CIFAR10 等数据集,但不适用于我的数据。


感谢普达,问题已经解决了。我需要使用:

 image_data = tf.gfile.FastGFile(filenames[i], 'rb').read()

而不是加载数据。现在效果很好。

 img = load_image(filenames[i])
 image_data = tf.compat.as_bytes(img.tostring())
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 tfslim 解码 tfrecord 的相关文章

随机推荐

  • 如何在条形图数据上设置 x 轴 - ios-charts?

    以前我们可以设置条形图数据的 x 轴 如下所示 BarChartData data BarChartData alloc initWithXVals xvals dataSets dataSets 在最新更新的ios charts库 语法更
  • 从 YouTube API V2 迁移到 V3 时遇到问题 - 无法列出频道的上传内容

    首先 很抱歉发布此内容 我不认为这是重复的 因为从昨天开始我一直在抓取 YouTube API 标记的问题 但找不到解决方案 我的问题是 即使官方已弃用 YouTube API V2 我还可以继续使用它吗 原因是因为我有两个问题 我仍然无法
  • 将图像异步加载到 UIImage 中

    我正在使用 iOS 5 0 SDK 和 XCode 4 2 开发 iOS 4 应用程序 我必须在 UITableView 中显示一些帖子博客 当我检索到所有 Web 服务数据后 我使用此方法创建 UITableViewCell BlogTa
  • Objective-C - 如何将 NSString 转换为转义 JSON 字符串?

    我有一个可能包含引号 r n 的 NSString 我想将其转换为 JSON 编码的字符串 这样的字符串 文本1 文本2 becomes 文本1 文本2 是否有现有的功能可以让我这样做 另外 我在我的项目中使用 SBJson 但我找不到 S
  • 限制 OpenFileDialog 的多选

    我有一个OpenFileDialog和它的MultiSelect财产是ON 我的问题是如何限制要选择的项目数量 例如仅 5 个项目 Thanks 您可以使用 FileOk 事件来检查用户单击 确定 按钮时选择的文件 如果您不满意 则显示一条
  • 使用 PHP GD 对 PNG 图像进行着色

    我有一个带有透明背景和白色圆圈的 PNG 图像 我正在尝试将白色圆圈着色为特定颜色 但我在使用此代码时遇到困难 src imagecreatefrompng circle png handle imagecolorclosest src 2
  • Keras:下载 Fashion_MNIST 数据时出错

    我正在尝试从 Fashion MNIST 下载数据 但出现错误 最初 它正在下载并正常工作 但我不得不终止它 因为我必须关闭计算机 当我再次打开该文件时 它给了我一个错误 我不确定问题是什么 但是否是因为我已经下载过一次数据的某些部分 而
  • 使用 MVC 3 依赖注入和 Ninject 2.2 将全局操作过滤器绑定到区域中的所有控制器

    由于我在此收到的帮助 我能够使用 ASP NET MVC 3 和 Ninject 2 2 将记录器对象注入到自定义 ActionFilterAttribute 中post 现在我想将自定义 ActionFilterAttribute 仅绑定
  • 将文件上传到 Google 云端硬盘?

    我按照此文档将文件上传到 Google 云端硬盘 https developers google com drive android files 现在 每次我想上传文件时 都会出现 Google Drive 的弹出窗口 询问我在哪里上传文件
  • PowerShell 递归搜索名称包含“...”的文件和文件夹

    我需要帮助来创建一个可以挽救我生命的脚本 我的备份软件出错了 因为我错误地设计了备份计划 而且我有很多命名文件 文件名或文件夹名称 2 编码冲突 我想递归搜索我的网络共享以查找名称中带有 编码冲突 的文件夹和文件 然后首先导出它们以进行验证
  • Zookeeper运行在两个节点上

    我遇到过这样的情况 Zookeeper 配置为 2 个节点 但有时它开始同时在两个节点上运行 为什么会发生这种情况 要构建具有主从架构的整体 您需要拥有奇数个 Zookeeper 服务器 即 1 3 5 7 等 3 人的集成可以处理一台服务
  • AngularJS Post 请求在 Firefox 上无法正常工作

    我正在使用 AngularJS 编写一个网站 它与服务器上的 API 进行通信并提供一些信息 对于登录部分 我应该发送一个包含电子邮件 密码等的 http post 请求 它在 google Chrome 和 IE 上运行良好 我的意思是它
  • 从 Amazon S3 迁移到 Azure 存储(Django Web 应用程序)

    我维护这个 Django Web 应用程序 用户可以在其中聚集并互相聊天 如果他们愿意 他们也可以发布照片 我处理这些照片 即优化其大小 并将它们存储在 Amazon S3 存储桶 类似于 Azure 存储中的 容器 上 为此 我在 Ama
  • 在 shell 脚本中读取 JSON 数据[重复]

    这个问题在这里已经有答案了 在 shell 中 我有一个要求 其中我必须读取以下格式的 JSON 响应 Messages Body 172 16 1 42 home 480 1234 5 12 2013 1234 toSort Receip
  • R 中的约束线性回归系数[重复]

    这个问题在这里已经有答案了 我正在估计 R 中的几个普通最小二乘线性回归 我想限制回归中的估计系数 使它们相同 例如 我有以下内容 z1 x y z2 x y 我希望第一个回归中 y 的估计系数等于第二个回归中 x 的估计系数 有没有直接的
  • 为什么我的 http://schema.org/BreadcrumbList 未验证?

    我在我的网站上使用 schema org 微数据 但我正在努力解决面包屑列表作为谷歌的结构化数据测试工具不会验证它 它看起来是正确的 我看不出有什么问题 您可以单击上面的链接来查看错误 但总而言之 Google 表示每个项目的 itemty
  • 是否可以更新本地化故事板的字符串?

    我通过创建一个 base lproj 故事板和 3 个字符串文件来本地化我的应用程序的一部分 那是一个月前 之后我向应用程序添加了新的视图控制器 但该控制器的按钮和标签没有出现在字符串文件中 是否可以更新这 3 个情节提要附加的字符串文件
  • 在循环中绑定单击事件处理程序会导致 jQuery 出现问题

    我正在尝试运行以下代码 我将参数传递给函数 但它始终具有循环中运行的最后一个对象的值 我在 stackoverflow 上阅读了一些有关它的文章 但我找不到如何使其在我的解决方案中运行 该对象是从服务器返回的 JSON 对象 它的所有值都是
  • bootstrap自定义发生了什么?

    Bootstrap 3 曾经有这个自定义选项 https getbootstrap com docs 3 3 customize 但是 我无法找到 Bootstrap 4 的此类链接 我只是构建一个简单的网站 并且肯定不会使用它 80 的功
  • 使用 tfslim 解码 tfrecord

    我在 CPU 上使用 Python 2 7 13 和 Tensorflow 1 3 0 我想使用 DensNet https github com pudae tensorflow densenet 来解决回归问题 我的数据包含 60000