2017-03-07 6 views
2

Keras/TensorFlow를 사용하여 이미지 (또는 ndim 벡터)를 처리하려고합니다. 그리고 우리는 공상적인 정규화를 위해 각 입력을 임의의 수의 위치로 왼쪽으로 이동 시키길 원합니다. (오른쪽에서 다시 나타나는 부분).Tensorflow의 벡터 이동 (롤)

어떻게 그것을 볼 수 있고 해결할 수 :

1)

이 TensorFlow에 대한 NumPy와 롤 기능에 어떤 변화가 있습니까?

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) 

답변

5

2) 나는 그냥 나 자신을했고, 나는 np.roll 불행하게도 할 수있는 tensorflow 영업 이익이 있다고 생각하지 않습니다. 위의 코드는 기본적으로 올바르게 보이지만 ri가 아닌 (x.shape [1] - ri)를 사용합니다.

또한 ri (0, x.shape [1])와 같이 범위 (0, x.shape [1])가 아닌 범위 (1, x.shape [1] +1)에서 임의의 정수를 선택하는 데주의해야합니다. 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) 

편집 : 한스 '올바른 주석 실종 콜론을 추가했다.

+0

실수를 고쳐 주셔서 감사합니다! – Khaj

+2

마지막 행에':'가 없으면'y = tf.concat ([x [:, x_len-i :], x [:, : x_len-i]], axis = 1)' – hannes

1

현재 야간에 tensorflow (또는 향후 버전 1.6.0) 빌드가 적용됩니다. 당신은 numf 롤처럼 작동하는 tf.manip.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]) 
+0

while 이 링크는 질문에 대답 할 수 있습니다. 여기에 답변의 핵심 부분을 포함시키고 참조 용 링크를 제공하는 것이 좋습니다. 링크 된 페이지가 변경되면 링크 전용 답변이 유효하지 않게 될 수 있습니다. - [리뷰에서] (리뷰/저품절 포스트/18734544) –