Python TensorFlow解码\u csv形状错误
我使用Python TensorFlow解码\u csv形状错误,python,tensorflow,tensorflow-datasets,Python,Tensorflow,Tensorflow Datasets,我使用tf.data.TextLineDataset读取*.csv文件,并在其上应用map: dataset=tf.data.TextLineDataset(os.path.join(data\u dir,subset,'label.txt')) dataset=dataset.map(lambda值:parse_record_fn(值,is_training), num_parallel_calls=num_parallel_calls) 解析函数Parse\u record\u fn如下所
tf.data.TextLineDataset
读取*.csv
文件,并在其上应用map
:
dataset=tf.data.TextLineDataset(os.path.join(data\u dir,subset,'label.txt'))
dataset=dataset.map(lambda值:parse_record_fn(值,is_training),
num_parallel_calls=num_parallel_calls)
解析函数Parse\u record\u fn
如下所示:
def parse_记录(原始记录,is_培训):
默认_记录=[“/”,-1]
文件名,label=tf.decode\u csv([raw\u record],默认\u record)
#做点什么
返回图像、标签
但是在解析函数中的tf.decode\u csv
处出现ValueError
:
ValueError:对于输入形状为[1]、[]、[]的“decodeCV”(op:'decodeCV'),形状必须为秩1,但为秩0。
My*.csv
文件示例:
/data/1.png,5
/data/2.png,7
问题:
形状:[1],[],[]
是什么意思将tensorflow导入为tf
导入操作系统
def parse_记录(原始记录、is_培训):
默认_记录=[“/”,-1]
文件名,label=tf.decode\u csv([raw\u record],默认\u record)
#做点什么
返回图像、标签
使用tf.Session()作为sess:
csv_路径='./labels.txt'
dataset=tf.data.TextLineDataset(csv_路径)
dataset=dataset.map(lambda值:parse_记录(值,True))
sess.run(数据集)
查看的文档,其中说明了默认记录:
记录默认值:具有特定类型的张量对象列表。
可接受的类型有float32、float64、int32、int64和string。一个
输入记录每列的张量,默认为标量
该列的值,如果需要该列,则为空
我相信您所得到的错误源于您如何定义张量default\u记录
。您的default\u记录
当然是一个张量对象列表(或可转换为张量的对象),但我认为错误消息告诉您,它们应该是秩1张量,而不是像您的情况那样的秩0张量
您可以通过将默认记录设为秩1张量来解决此问题。请参见以下玩具示例:
import tensorflow as tf
my_line = 'filename.png, 10'
default_record_1 = [['./'], [-1]] # do this!
default_record_2 = ['./', -1] # this is what you do now
decoded_1 = tf.decode_csv(my_line, default_record_1)
with tf.Session() as sess:
d = sess.run(decoded_1)
print(d)
# This will cause an error
decoded_2 = tf.decode_csv(my_line, default_record_2)
最后一行产生的错误很常见:
ValueError:形状必须为秩1,但对于“解码CSV_1”(op:
“DecodeCCSV”)具有以下输入形状:[]、[]、[]
在消息中,输入形状,即三个括号
[]
,指的是tf.decode\u csv
的输入参数记录
、记录_默认值
和字段_delim
的形状。在您的情况下,这些形状中的第一个是[1]
,因为您输入了[raw\u record]
。我同意本案例的信息不是很有信息性…查看的文档,它说明了默认记录:
记录默认值:具有特定类型的张量对象列表。
可接受的类型有float32、float64、int32、int64和string。一个
输入记录每列的张量,默认为标量
该列的值,如果需要该列,则为空
我相信您所得到的错误源于您如何定义张量default\u记录
。您的default\u记录
当然是一个张量对象列表(或可转换为张量的对象),但我认为错误消息告诉您,它们应该是秩1张量,而不是像您的情况那样的秩0张量
您可以通过将默认记录设为秩1张量来解决此问题。请参见以下玩具示例:
import tensorflow as tf
my_line = 'filename.png, 10'
default_record_1 = [['./'], [-1]] # do this!
default_record_2 = ['./', -1] # this is what you do now
decoded_1 = tf.decode_csv(my_line, default_record_1)
with tf.Session() as sess:
d = sess.run(decoded_1)
print(d)
# This will cause an error
decoded_2 = tf.decode_csv(my_line, default_record_2)
最后一行产生的错误很常见:
ValueError:形状必须为秩1,但对于“解码CSV_1”(op:
“DecodeCCSV”)具有以下输入形状:[]、[]、[]
在消息中,输入形状,即三个括号[]
,指的是tf.decode\u csv
的输入参数记录
、记录_默认值
和字段_delim
的形状。在您的情况下,这些形状中的第一个是[1]
,因为您输入了[raw\u record]
。我同意这个案例的信息不是很有用