Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python TensorFlow解码\u csv形状错误_Python_Tensorflow_Tensorflow Datasets - Fatal编程技术网

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]
    。我同意这个案例的信息不是很有用