将"columns"添加到 tf.data.dataset 的最佳方式



向TensorFlow数据集添加列的最佳方法是什么(就运行时和最佳实践而言(?

假设dataset是通过make_csv_dataset从 CSV 生成的PrefetchDataset。我想添加一个基于dataset的预先存在的功能列AB功能列。

我尝试调整本教程中的代码(参见函数PackNumericFeatures()(来创建类

class add_column(object):
def __call__(self, features, labels):
features['B'] = tf.map_fn(
lambda x: len(str(x+"postfix")), features['A'])
return features, labels

然后使用

dataset = dataset.map(add_column())

假设预先存在的要素A是一个字符串,这将成功地将"postfix"添加到从A复制的每个字符串。但是,如果我想用A中每个元素的长度填充B,那么用lambda x: len(x)替换 lambda 函数会给出错误

TypeError: len is not well defined for symbolic Tensors. (TensorArrayV2Read/TensorListGetItem:0) Please call `x.shape` rather than `len(x)` for shape information.

同样,诸如lambda x: 'a' in x之类的基本函数会给出错误

OperatorNotAllowedInGraphError: iterating over `tf.Tensor` is not allowed: AutoGraph is disabled in this function. Try decorating it directly with @tf.function.

使用 pandas 数据帧添加从预先存在的列处理的新列要容易得多。我做错了什么?将map_fn()add_column()等类一起使用甚至是最佳实践吗?

y_dataset = x_dataset.map(fn1(

您可以根据需要定义 fn1

@tf.function
def fn1(x):
##use x to derive additional columns u want. Set the shape as well
y = {}
y.update(x)
y['new1'] = new1
y['new2'] = new2
return y

相关内容

  • 没有找到相关文章

最新更新