Tensorflow 将张量重塑为序列的最有效方法
我正在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,
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花一分钟设置它的图形和动态执行之间的折衷。无论如何,这是一个很棒的解决方案。谢谢