tf.decode_csv() error: “Unquoted fields cannot have quotes/CRLFs inside”

一、背景

今天基于TensorFlow跑DNN,报了一个异常InvalidArgumentError (see above for traceback): Unquoted fields cannot have quotes/CRLFs inside”,在decode csv文件的时候报上面这个错,中文解释是“未加引号的字段中不能包含引号/ CRLF”,异常如下:
在这里插入图片描述

二、解决

1.处理引号

本实验中DNN的训练集是将各个特征通过’\t’进行拼接,通过异常显示应该是字符串中有引号,导致在decode的时候无法区分拼接的特征,使得抛出了异常,google了一波,找到了答案,在tf.decode_csv()函数中,有个参数是use_quote_delim 参数,看原始代码的解释为:

se_quote_delim: An optional bool. Defaults to True.
If false, treats double quotation marks as regular
characters inside of the string fields (ignoring RFC 4180, Section 2,
Bullet 5).

此参数默认True,会把双引号当成引用,在使用tf.decode_csv读取文件的时候如果某一行有双引号会报错。

所以需要将其设置为False,这样就会把双引号当做为一个普通的字符串变量,在这里读取不会报错,如下:

在这里插入图片描述

code如下:

features_tuple = tf.decode_csv(raw_features, use_quote_delim=False,record_defaults=features_default,field_delim="\t")

总结:添加use_quote_delim=False或者数据中去除",一般情况这样处理了就不会再报错了,但use_quote_delim=False只能处理双引号"的情况,无法处理回车换行的问题。

2.处理回车换行

有的时候,在数据清洗阶段并未做的很好,在特征中存在了一些回车(CR, ASCII 13, “\r”) 换行(LF, ASCII 10, “\n”)时,也会抛此异常。

小编翻看了tensorflow这段的源码:https://github.com/tensorflow/tensorflow/blob/master/tensorflow/core/kernels/decode_csv_op.cc,如下:
在这里插入图片描述

存在回车换行符也会抛异常。

解决:将训练集中的回车换行全部替换成空串,重新训练

三、总结

经过以上两步,“Unquoted fields cannot have quotes/CRLFs inside”此异常彻底解决了。

经验总结:当使用一些开源框架时,出现了异常,莫慌,先google一波,如果发现google也没办法解决你的问题,直接看对应的源码,分析一下源码,找到是什么原因?什么条件导致这个异常产生,既能快速解决问题,也让你的技术得到了提升。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值