博客
关于我
打造自己的图像识别模型1— 数据准备-将图像数据转为tfrecord形式——【何之源-21个项目玩转深度学习】
阅读量:573 次
发布时间:2019-03-11

本文共 2203 字,大约阅读时间需要 7 分钟。

在准备数据集并将图像数据转为TFRecord格式时,遇到了以下常见的错误及其解决方法:

错误信息:

TypeError: 'range' object does not support item assignmentUnicodeDecodeError: 'gbk' codec can't decode byte 0xff in position 0: illegal multibyte sequence

解释:

  • 'range' object does not support item assignment:这可能是因为在Python3中,某些函数返回的对象不再支持直接赋值操作,通常是由于版本更新导致的API变更。
  • UnicodeDecodeError:这通常是由于文件路径或内容中包含非ASCII字符,导致在读取或处理时发生编码错误。
  • 解决方法:

  • 修复.range到列表转换

    在Python3中,range返回的是一个range对象,而不是列表。为了确保能正确处理,需要将range对象转换为列表。以下是修复代码:

    from __future__ import absolute_importimport argparseimport osimport loggingfrom src.tfrecord import mainimport numpy as npimport tensorflow as tf# coding: utf-8...def _find_image_files(data_dir, labels_file, command_args):    # 现在将range转换为列表    shuffled_index = list(range(len(filenames)))    random.seed(12345)    random.shuffle(shuffled_index)    filenames = [filenames[i] for i in shuffled_index]    texts = [texts[i] for i in shuffled_index]    labels = [labels[i] for i in shuffled_index]    return filenames, texts, labels
  • 修复文件路径的编码问题

    确保数据集目录和文件名只包含ASCII字符,可通过以下方式检查:

    chcp944C ."  # 将当前目录的文件名转换为可打印的ASCII字符

    如果您使用中文目录名,建议改为拼音表示。

  • 修复_bytes_feature函数

    修改TFRecord编码函数,确保返回的是字节列表:

    def _bytes_feature(value):    """Wrapper for inserting bytes features into Example proto."""    value = tf.compat.as_bytes(value)    return tf.train.Feature(bytes_list=tf.train.BytesList(value=[value]))
  • 修复_image_to_jpeg函数

    确保png_to_jpeg函数输出的image_data类型是字节:

    def png_to_jpeg(self, image_data):    return self._sess.run(self._png_to_jpeg,                          feed_dict={self._png_data: image_data})
  • 修复处理范围的函数

    将xrange改为range:

    # 在调用范围函数时更改xrange为rangein Python3中,xrange,该函数返回一个区间的整数序列,适用于for循环,但不会占用内存。但是,现在这个处境下,更改xrange为range:for s in range(num_shards_per_batch):
  • 确保文件编码一致

    检查所有文件读取和Writing操作使用相同的编码方式,避免读取和写入时出现编码不一致的问题。

  • 优化存储路径和文件名

    确保data_dir、train_directory、validation_directory中只包含允许的字符。例如,使用英文文件名和路径分隔符。

  • 更新TensorFlow版本

    确保TensorFlow版本已更新到accelerator支持的版本,以减少兼容性问题。

  • 修复其他潜在错误

    • convert_to_example函数中,确保filename和text字段的处理无误。
    • 确保image/encoded的值是正确的bytes格式。
    • 在读取文本文件时,使用正确的编码,如'utf-8'。
  • 总结:

    通过以上修复措施,您应该能够解决出现的错误,将图像数据成功转换为TFRecord格式。如果仍然遇到问题,可以尝试逐步增加日志输出,检查每一步的数据流,确保每一步处理都如预期般进行。另外,建议在遇到问题时,组建一个最小的示例项目,逐步添加功能,直到错误被准确定位和解决。这样的方法能有效减少调试时间,并帮助您更高效地掌握TensorFlow的使用。

    转载地址:http://pxwtz.baihongyu.com/

    你可能感兴趣的文章
    基于vant-ui的时间选择器二次封装
    查看>>
    个人购买服务器问题?
    查看>>
    pwntools编写技巧
    查看>>
    Python开发常见漏洞
    查看>>
    How2Heap笔记(三)
    查看>>
    阿里云轻量云GPU服务器配置
    查看>>
    深入浅出计算机组成原理目录
    查看>>
    Vue 知识整理—03-指令2
    查看>>
    go--microSocket服务端 php客户端
    查看>>
    go ioutil读写文件
    查看>>
    如何修改Pspice元件库中元件的模型参数?
    查看>>
    51单片机汇编程序——查表
    查看>>
    复杂指针的定义(含复杂函数指针)
    查看>>
    小程序提交新数据后如何返回上一页并刷新数据?
    查看>>
    qt c++实现的ai贪吃蛇吃满屏幕,超详细!(二)ai的具体实现
    查看>>
    linux 查看log日志相关命令
    查看>>
    IDEA 2019 安装 mybatis-plus插件
    查看>>
    div 实现光标悬停变成手型
    查看>>
    layer.confirm 无效
    查看>>
    Java 回调机制
    查看>>