小编M45*_*00R的帖子

如何向 tf.data.Dataset 对象添加新的特征列?

我正在使用 Tensorflow 2.0 的数据模块为专有数据构建输入管道,并使用 tf.data.Dataset 对象来存储我的特征。这是我的问题 - 数据源是一个 CSV 文件,它只有 3 列,一个标签列,然后是两列,这些列只包含引用存储数据的 JSON 文件的字符串。我开发了访问我需要的所有数据的函数,并且能够在列上使用 Dataset 的 map 函数来获取数据,但是我不知道如何向我的 tf.data.Dataset 对象添加一个新列保存新数据。因此,如果有人可以帮助解决以下问题,那确实会有所帮助:

  1. 如何将新功能附加到 tf.data.Dataset 对象?
  2. 这个过程应该在迭代之前对整个数据集完成,还是在(我认为在迭代期间可以利用性能提升,但我不知道这个功能是如何工作的)?

我拥有将输入作为列中的元素并执行获取每个元素的特征所需的一切的所有方法,我只是不明白如何将这些数据放入数据集中。我可以做一些“hacky”的解决方法,使用 Pandas Dataframe 作为“中介”或类似的东西,但我想把所有东西都保留在 Tensorflow 数据集和管道过程中,以获得性能提升和更高质量的代码。

我已经查看了 Dataset 类的 Tensorflow 2.0 文档(https://www.tensorflow.org/versions/r2.0/api_docs/python/tf/data/Dataset),但一直找不到方法可以操纵对象的结构。

这是我用来加载原始数据集的函数:

def load_dataset(self):
    # TODO: Function to get max number of available CPU threads
    dataset = tf.data.experimental.make_csv_dataset(self.dataset_path,
                                                    self.batch_size,
                                                    label_name='score',
                                                    shuffle_buffer_size=self.get_dataset_size(),
                                                    shuffle_seed=self.seed,
                                                    num_parallel_reads=1)
    return dataset
Run Code Online (Sandbox Code Playgroud)

然后,我有一些方法可以让我接受一个字符串输入(列元素)并返回实际的特征数据。我可以使用“.map”之类的函数访问数据集中的元素。但是如何将其添加为列?

dataset tensorflow tensorflow-datasets

5
推荐指数
1
解决办法
1868
查看次数

与使用两个Numpy数组进行矢量化相比,为什么对Numpy数组和int进行算术运算时减法会更快?

我对为什么这段代码感到困惑:

start = time.time()
for i in range(1000000):
    _ = 1 - np.log(X)
print(time.time()-start)
Run Code Online (Sandbox Code Playgroud)

比此实现更快地执行:

start = time.time()
for i in range(1000000):
    _ = np.subtract(np.ones_like(X), np.log(X))
print(time.time()-start)
Run Code Online (Sandbox Code Playgroud)

我的理解是,这应该是相反的,因为在第二种实现中,我利用了向量化提供的加速,因为它能够同时操作X中的元素,而不是顺序地进行操作,这就是我假定的第一种实现功能。

我真的很困惑,有人可以帮我一下吗?谢谢!

python arrays numpy matrix linear-algebra

1
推荐指数
1
解决办法
60
查看次数