使用Tensorflow数据将字节数组格式从parquet文件转换为浮点列表

des4xlb0  于 2022-12-19  发布在  其他
关注(0)|答案(1)|浏览(159)

我正在尝试设置一个数据管道,从Parquet文件中读取数据,然后转换适当的格式(字节数组到浮点数列表),之后它将被馈送到tensorflow拟合方法。
注意:我实际输入的数据太庞大了,所以要分批阅读以进行训练。
设置输入数据管道时出现问题
下面是示例代码,其中包含我所获得的输入类型。

import pandas as pd
import numpy as np
import tensorflow as tf
import tensorflow_io as tfio

df1 = pd.DataFrame({'col1':['[1.2, 2.3, 4.5]', '[1.0, 2.2, 4.3]'], 'col2':['[1.2, 0.3, 0.9]', '[1.1, 9.2, 5.3]']})
df2 = pd.DataFrame({'col1':['[1.1, 2.1, 4.1]', '[1.09 2.29, 4.39]'], 'col2':['[12.2, 20.3, 20.96]', '[12.1, 19.2, 15.3]']})

df1.to_parquet("foo.parquet")
df2.to_parquet("bar.parquet")

columns = {
    "col1": tf.TensorSpec(tf.TensorShape([]), tf.string), 
    "col2": tf.TensorSpec(tf.TensorShape([]), tf.string),
}

ds = tf.data.Dataset.list_files("*.parquet")
ds = ds.interleave(lambda f: tfio.IODataset.from_parquet(f, columns=columns), cycle_length=2, block_length=2) # returns an ordered dict

def decode_json(ip):
    return tf.py_function(json.loads, [ip], Tout=[tf.float32])

def decode(ip):
    out1 = ip["col1"].map(decode_json)
    out2 = ip["col2"].map(decode_json)
    return out1, out2

ds = ds.map(decode)

for elem in ds:
    print(elem)

这会产生错误“AttributeError:“Tensor”对象没有属性“map”“

rqqzpn5f

rqqzpn5f1#

这将产生错误“AttributeError:'Tensor'对象没有属性'map'"
如果你告诉我们是哪条线会有帮助。
我很确定是这条线。

out1 = ip["col1"].map(decode_json)

我认为tfio.IODataset.from_parquet(f, columns=columns)返回Tensor字典的数据集。
ds.map(decode)行将decode应用于数据集中的每个项。这些项是Tensor的字典。
我觉得你想要的是:

def decode(ip):
    out1 = decode_json(ip["col1"])
    out2 = decode_json(ip["col2"])
    return out1, out2

相关问题