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

    你可能感兴趣的文章
    使用ElementUI进行页面布局
    查看>>
    ElementUI表单构建
    查看>>
    一些面试的准备的回答
    查看>>
    django中文件的上传问题
    查看>>
    Spark Standalone模式下启动集群的基本流程
    查看>>
    LeetCode Top-100 T22-括号生成
    查看>>
    svg基础+微信公众号交互(二)
    查看>>
    webstorm 自定义快捷键
    查看>>
    CSS3实现动画不会影响主线程,JS实现动画会影响主线程
    查看>>
    vscode设置eslint保存文件时自动修复eslint错误
    查看>>
    2020-12-02 微信JSAPIV3支付
    查看>>
    deepin 安装过程记录
    查看>>
    ES6 Class 继承与 super
    查看>>
    JAVA 多线程
    查看>>
    VMware打开centos黑屏解决方法汇总
    查看>>
    jquery获取本地json数据
    查看>>
    shell脚本内使用pwd命令
    查看>>
    Springboot+Shiro 去除因JSESSIONID导致第一次访问请求时报400错误
    查看>>
    操作系统复习思维导图(二、进程的控制与描述)
    查看>>
    用Idea 生成 JavaDoc帮助文档
    查看>>