张量流滑动窗口转换

Hes*_*aqi 1 python tensorflow

我想使用Tensorflow为RNN应用程序进行滑动窗口转换.

对于窗口大小为4,使用Tensorflow简单重塑,我们可以转换以下张量:

[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]
Run Code Online (Sandbox Code Playgroud)

至:

[[1,2,3,4],[5,6,7,8],[9,10,11,12],[13,14,15,16],[17,18,19,20]]
Run Code Online (Sandbox Code Playgroud)

但是我希望它像下面的张量一样大步走1:

[[1,2,3,4],[2,3,4,5],[3,4,5,6],[7,8,9,10],...,[17,18,19,20]]
Run Code Online (Sandbox Code Playgroud)

使用Tensorflow平铺,我可以得到:

[[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20],
 [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20]]
Run Code Online (Sandbox Code Playgroud)

我想通过一些转变,我可以得到我想要的东西.你有什么想法吗?

我生成上述平铺结果​​的代码很简单,如下所示.但是每个元素都是1D张量,表示瓶颈(来自CNN的特征向量)而不是上面例子中的数字.

model.logits, model.end_points = inception_v3.inception_v3(model.X_Norm, num_classes=nbrOfOutputNeurons, is_training=is_training)
model.bottleneck = slim.flatten(model.end_points['PreLogits']) # The ouput before FC

x = tf.reshape(model.bottleneck, [1, -1, bottleneck_tensor_size])
x = tf.tile(x, [rnn_time_steps, 1, 1])
Run Code Online (Sandbox Code Playgroud)

Liu*_*hui 7

tf.map_fn 是张量流的版本 map

x = tf.range(1, 21, dtype=tf.int32)
xm = tf.map_fn(lambda i: x[i:i+4], tf.range(20-4+1), dtype=tf.int32)

with tf.Session() as session:
  session.run(tf.global_variables_initializer())

  x, xm = session.run([x, xm])
  print(x)
  print(xm)
Run Code Online (Sandbox Code Playgroud)