
打造自己的图像识别模型1— 数据准备-将图像数据转为tfrecord形式——【何之源-21个项目玩转深度学习】
'range' object does not support item assignment:这可能是因为在Python3中,某些函数返回的对象不再支持直接赋值操作,通常是由于版本更新导致的API变更。 UnicodeDecodeError:这通常是由于文件路径或内容中包含非ASCII字符,导致在读取或处理时发生编码错误。
发布日期:2021-05-14 10:21:16
浏览次数:10
分类:精选文章
本文共 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到列表转换
在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的使用。
发表评论
最新留言
做的很好,不错不错
[***.243.131.199]2025年04月20日 07时16分08秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
7、回归和特征选择
2019-03-11
pycharm使用(新建工程、字体修改、调试)
2019-03-11
什么是Numpy、Numpy教程
2019-03-11
Python学习笔记——元组
2019-03-11
异常声音检测
2019-03-11
PCB学习笔记——AD17如何添加新的封装
2019-03-11
numpy版本问题
2019-03-11
无法打开文件“opencv_world330d.lib”的解决办法
2019-03-11
maven项目通过Eclipse上传到svn上面,再导入到本地出现指定的类找不到的问题
2019-03-11
maven 项目部署到tomcat下 没有class文件
2019-03-11
算法训练 未名湖边的烦恼(递归,递推)
2019-03-11
算法训练 递归求二项式系数
2019-03-11
算法训练 完数(循环,数学知识)
2019-03-11
android studio下载安装教程
2019-03-11
生成项目依赖包文件requirements.txt
2019-03-11
什么是接口
2019-03-11
2020版nodejs12.18.3安装配置教程
2019-03-11