如何使用tf.data.Dataset.apply()重塑数据集 - python

我正在使用张量流中的时间序列模型。我的数据集包含物理信号。我需要将此信号划分为多个窗口,以将此切成薄片的窗口作为模型输入。

这是我读取数据并对其进行切片的方式:

import tensorflow as tf
import numpy as np
def _ds_slicer(data):
    win_len = 768
    return {"mix":(tf.stack(tf.split(data["mix"],win_len))),
            "pure":(tf.stack(tf.split(data["pure"],win_len)))}
dataset = tf.data.Dataset.from_tensor_slices({
    "mix" : np.random.uniform(0,1,[1000,24576]),
    "pure" : np.random.uniform(0,1,[1000,24576])
})
dataset = dataset.map(_ds_slicer)
print dataset.output_shapes
# {'mix': TensorShape([Dimension(768), Dimension(32)]), 'pure': TensorShape([Dimension(768), Dimension(32)])}

我想将此数据集重塑为# {'mix': TensorShape([Dimension(32)]), 'pure': TensorShape([Dimension(32))}

numpy中的等效转换如下所示:

signal  = np.random.uniform(0,1,[1000,24576])
sliced_sig = np.stack(np.split(signal,768,axis=1),axis=1)
print sliced_sig.shape #(1000, 768, 32)
sliced_sig=sliced_sig.reshape(-1, sliced_sig.shape[-1])
print sliced_sig.shape #(768000, 32)

我想到了将tf.contrib.data.group_by_window用作dataset.apply()的输入,但无法确切地知道如何使用它。有没有一种方法可以使用任何自定义转换来重塑数据集?

参考方案

我认为您只是在寻找转换tf.contrib.data.unbatch。这正是您想要的:

x = np.zeros((1000, 768, 32))

dataset = tf.data.Dataset.from_tensor_slices(x)
print(dataset.output_shapes)  # (768, 32)
dataset = dataset.apply(tf.contrib.data.unbatch())
print(dataset.output_shapes)  # (32,)

从文档中:

如果数据集的元素的形状为[B,a0,a1,...],其中B随元素的不同而变化,则对于数据集中的每个元素,未分批处理的数据集将包含形状为[a0,a1]的B个连续元素,...]。

编辑TF 2.0

(感谢@DavidParks)

在TF 2.0中,您可以直接使用tf.data.Dataset.unbatch

x = np.zeros((1000, 768, 32))

dataset = tf.data.Dataset.from_tensor_slices(x)
print(dataset.output_shapes)  # (768, 32)
dataset = dataset.unbatch()
print(dataset.output_shapes)  # (32,)

从Azure Data Factory执行python脚本 - python

有人可以帮我从Azure数据工厂执行python函数吗?我已经将python函数存储在blob中,并且我试图触发同样的功能。但是我无法做到这一点。请协助。第二,我可以从ADF参数化python函数调用吗? python参考方案 您可能会发现ADF中的Azure Function Activity概念,它允许您在Data Factory管道中运行Azure F…

将数据直接从Python导出到Tableau - python

我有一个将数据导出到csv中的python代码,然后将该csv加载到Tableau中。我不想将csv加载到tableau中。有没有一种方法可以将我的python脚本的return值直接放入tableau中?问题类似于Export data from Python into Tableau using JSON?,但他们询问Json格式,答案是使用csv。如果…

使用TensorFlow Dataset API和flat_map的并行线程 - python

我正在将TensorFlow代码从旧队列界面更改为新的Dataset API。使用旧的接口,我可以为num_threads队列指定tf.train.shuffle_batch参数。但是,控制Dataset API中线程数量的唯一方法似乎是使用map参数在num_parallel_calls函数中。但是,我改用flat_map函数,该函数没有这样的参数。问:是…

登录节点如何与Slurm群集中的计算节点通信? - python

我只是开始使用随Slurm Workload Manager运行的计算集群。我对计算节点在计算时如何与登录节点通信感到好奇,因为要运行的脚本与该脚本可能读取的其他文件一起存储在登录节点中。例如,在工作词典中,浮点列表以可以用pickle加载的格式存储。我希望在计算节点上运行的脚本如下所示:import pickle with open('data_…

Python使用with子句打开或创建文件 - python

                                我有以下代码,但是如果文件不存在,它将无法正常工作:def log(self, action, data): import json with open('ReservationsManagerApp/logs/'+data['booking']+…