Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/12.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
Tensorflow 将张量重塑为序列的最有效方法_Tensorflow - Fatal编程技术网

Tensorflow 将张量重塑为序列的最有效方法

Tensorflow 将张量重塑为序列的最有效方法,tensorflow,Tensorflow,我正在TensorFlow中处理音频,并希望获得一系列序列,可以说,这些序列可以通过在我的数据上滑动窗口获得。举例说明我的情况: 当前数据格式: 形状=[批次大小,数量特征] example = [ [1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11, 12], [13, 14, 15] ] example = [ [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ], [ [4,

我正在TensorFlow中处理音频,并希望获得一系列序列,可以说,这些序列可以通过在我的数据上滑动窗口获得。举例说明我的情况:

当前数据格式:

形状=[批次大小,数量特征]

example = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [10, 11, 12],
  [13, 14, 15]
]
example = [
  [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ],
  [
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
  ],
  [
    [7, 8, 9],
    [10, 11, 12],
    [13, 14, 15]
  ],
]
我想要什么:

形状=[批次大小-窗口长度+1,窗口长度,数量特征]

example = [
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [10, 11, 12],
  [13, 14, 15]
]
example = [
  [
    [1, 2, 3],
    [4, 5, 6],
    [7, 8, 9]
  ],
  [
    [4, 5, 6],
    [7, 8, 9],
    [10, 11, 12]
  ],
  [
    [7, 8, 9],
    [10, 11, 12],
    [13, 14, 15]
  ],
]
我目前的解决方案是这样做:

list_of_windows_of_data = []
for x in range(batch_size - window_length + 1):
    list_of_windows_of_data.append(tf.slice(data, [x, 0], [window_length,
            num_features]))
windowed_data = tf.squeeze(tf.stack(list_of_windows_of_data, axis=0))

这就是转换。然而,它也会创建20000个操作,这会在创建图形时大大降低TensorFlow的速度。如果其他人有更有趣、更有效的方法,请分享。

您可以使用
tf.map\u fn
如下所示:

example = tf.constant([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [10, 11, 12],
  [13, 14, 15]
]
)
res = tf.map_fn(lambda i: example[i:i+3], tf.range(example.shape[0]-2), dtype=tf.int32)
sess=tf.InteractiveSession()
res.eval()
这张照片

array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]],

       [[ 7,  8,  9],
        [10, 11, 12],
        [13, 14, 15]]])

您可以使用
tf.map\u fn
执行此操作,如下所示:

example = tf.constant([
  [1, 2, 3],
  [4, 5, 6],
  [7, 8, 9],
  [10, 11, 12],
  [13, 14, 15]
]
)
res = tf.map_fn(lambda i: example[i:i+3], tf.range(example.shape[0]-2), dtype=tf.int32)
sess=tf.InteractiveSession()
res.eval()
这张照片

array([[[ 1,  2,  3],
        [ 4,  5,  6],
        [ 7,  8,  9]],

       [[ 4,  5,  6],
        [ 7,  8,  9],
        [10, 11, 12]],

       [[ 7,  8,  9],
        [10, 11, 12],
        [13, 14, 15]]])

您可以使用内置的:


您可以使用内置的:


我终于开始测试和实现它了。你已经取消了我所有的20000次额外操作,同时仍然提供相同的输出。TF图形几乎立即加载,这真是太棒了!有趣的是,这个解决方案几乎使我当前的批处理时间增加了一倍。这可能是让tensorflow花一分钟设置它的图形和动态执行之间的折衷。无论如何,这是一个很棒的解决方案。谢谢我终于开始测试和实现它了。你已经取消了我所有的20000次额外操作,同时仍然提供相同的输出。TF图形几乎立即加载,这真是太棒了!有趣的是,这个解决方案几乎使我当前的批处理时间增加了一倍。这可能是让tensorflow花一分钟设置它的图形和动态执行之间的折衷。无论如何,这是一个很棒的解决方案。谢谢