可以说,我们确实希望使用Keras / TensorFlow处理图像(或ndim向量)。 我们希望,对于花哨的正则化,将每个输入向左移动一个随机数量的位置(右侧重新出现的部分)。
如何查看和解决:
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)
答案 0 :(得分:5)
我必须自己做这件事,我不认为有一个张量流操作不幸地做np.roll。上面的代码看起来基本上是正确的,除了它不是由ri滚动,而是由(x.shape [1] - ri)滚动。
另外,你需要注意选择你的范围(1,x.shape [1] +1)而不是范围(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)
编辑:在汉尼斯之后添加缺失的结肠'正确的评论。
答案 1 :(得分:5)
关于当前每晚构建的张量流(或未来版本1.6.0)。你可以使用tf.manip.roll,就像numpy roll一样。 https://github.com/tensorflow/tensorflow/pull/14953。 要改进上面的答案,你可以这样做:
# size of x dimension
x_len = tensor.get_shape().as_list()[1]
# random roll amount
i = tf.random_uniform(shape=[1], maxval=x_len, dtype=tf.int32)
output = tf.manip.roll(tensor, shift=i, axis=[1])