2016-07-17 3 views
0

tf.reshape은 텐서 데이터 구조의 차원을 변경할 수 있지만 각 차원에서 데이터를 정렬하는 방법에 대한 보장은 있습니까?변형 후 치수 전 환 : 필요할 때?

다른 객체, 위치 및 시간에 걸쳐 값을 설명하고 다른 숫자는 B[x,t]에 불과한 치수가 A[objects, x, t] 인 텐서가 있다고 가정합니다. 나는 보통해야 할이 같은 차원에 걸쳐 공을 B을 복사하기 위해 고쳐 :

B_res = tf.tile(tf.reshape(B , [1, X_SIZE, T_SIZE]), tf.pack([OBJECT_SIZE,1,1])) 
some_op = tf.mul(A, B_res) 

X_SIZE == T_SIZE 모양 변경이 모두를 위해, 모양 변경에 B 데이터를 정렬하는 방법을 알 수있는 방법이없는 때 표시되는 문제가 치수 2의 B을 따라 B_res의 데이터를 정렬 할 수 있습니다.

reshape 데이터 주문에 대한 규칙이 있습니까? 몇개의 tf.transpose 작업이 필요하다면 알고 싶습니다. tf.reshape

답변

0

메모리 배열/텐서는 실제로는 단지 1D 객체입니다. 따라서 10x10 배열을 저장해야한다고 가정 해보십시오. 메모리에서 이것은 첫 번째 10 요소가 첫 번째 행에 해당하는 길이 100의 1D 배열 일 것입니다. 이를 행 주요 순서로 알려져 있습니다. 20x5 모양으로 다시 변형하고 싶다고합시다. 기본 메모리는 변형에 의해 변경되지 않으므로 처음 10 개의 요소가 이제 1 행 및 2 행을 구성합니다. 반면에 Transpose는 차원의 위치를 ​​변경하는 동안 행의 주 순서를 유지하기 위해 메모리를 물리적으로 재정렬합니다.

나는 또한 당신이 unessarily 기와라고 생각합니다. 방송에 대해 읽어야합니다. 나는 네가 다음을 할 수 있다고 생각해. 자동 A.의 제 차원

참고 따라 B를 방송한다이 경우

some_op = A * tf.reshape(B, [1, X_SIZE, T_SIZE]) 

. 나는 tensorflow가 행 주요 또는 열 주요 순서를 사용하고 있지만 동일한 개념이 여전히 적용되는지는 확실하지 않습니다.

+0

좋은 점을 명심하십시오. 감사드립니다. 그러나 질문은 일반적으로 차원을 임의로 재구성 할 수도 있고 그렇지 않을 수도 있습니다 (특히 일부 차원이 동일 할 때 모호함이 발생할 수 있음). (B, [1, T_SIZE, X_SIZE])를 재 작성하면 어떨까요? – diffeomorphism

+0

그건 내가 기억의 순서에 관해서 지적한 점이었습니다. 애매 모호하지 않습니다. 모든 항목은 변형 된 동일한 1D 순서를 유지합니다. 그 위에 다른 모양이 있습니다. 100 개 요소를 100 개 요소, 10x10 요소 또는 5x5x4 요소로 보는 방법과 비슷합니다. 메모리 순서는 변경되지 않습니다. 그냥 치수. 변형은 치수를 뒤섞 지 않습니다. – chasep255

+0

지금은'reshape'의 모든 사례를'expand_dims'로 바꾸고 있습니다.하지만 방송이 무엇을하는지 분명히 알았을 때 이미 방송 규칙을 대체하고 있습니다. 나는 브로드 캐스팅이 +와 같은 모든 요소 별 연산자에도 적용된다는 것을 알지 못했지만, 곱셈만을위한 것이라고 생각했습니다. – diffeomorphism