假设我们确实想使用 Keras/TensorFlow 处理图像(或 ndim 向量)。
并且我们希望,为了花哨的正则化,将每个输入向左移动随机数量的位置(owerflown 部分重新出现在右侧)。
如何查看和解决:
1)
TensorFlow 的 numpy roll 函数有什么变化吗?
2)
x - 2D tensor
ri - random integer
concatenate(x[:,ri:],x[:,0:ri], axis=1) #executed for each single input to the layer, ri being random again and again (I can live with random only for each batch)
最佳答案
我只需要自己做这件事,不幸的是,我认为没有 tensorflow op 可以做 np.roll。你上面的代码看起来基本上是正确的,除了它不是由 ri 滚动,而是由 (x.shape[1] - ri) 滚动。
此外,您还需要小心选择来自 range(1,x.shape[1]+1) 而不是 range(0,x.shape[1]) 的随机整数,就好像 ri 是 0,那么 x [:,0:ri] 将是空的。
所以我的建议更像是(沿着维度 1 滚动):
x_len = x.get_shape().as_list()[1]
i = np.random.randint(0,x_len) # The amount you want to roll by
y = tf.concat([x[:,x_len-i:], x[:,:x_len-i]], axis=1)
编辑:在 hannes 的正确评论后添加了缺少的冒号。
关于tensorflow - Tensorflow 中的矢量移位(滚动),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783790/