tensorflow transpose 예제

일괄 처리 및 채널 차원 처리에 대한 세부 정보를 생략했습니다. 이 실험은 입력 크기, 필터 크기, 보폭, 패딩 및 팽창의 모든 조합에 대해 테스트한 대로 작동합니다. 작은 주름은 TensorFlow의 conv1d_transpose 가 팽창을 지원하지 않는다는 것입니다 . 1 보폭 = 1. 그러나 확장된 필터를 미리 생성하여 시뮬레이션할 수 있습니다. 또 다른 주름은 텐서플로우가 패딩 유형 `VALID` 및 `SAME`를 지원하는 반면, PyTorch는 단일 정수 패딩을 허용한다는 것입니다. 즉, PyTorch와 TensorFlow 간에 동일한 컨볼루션 결과를 생성하는 것이 불가능한 경우도 있습니다. 그러나 행렬/마스크 접근 방식은 보다 보편적입니다. PyTorch 및 TensorFlow 결과를 모두 복제할 수 있습니다. 다른 정보 / 로그 #15697 비해, 나는 실제로 numpy (다음 복사 를 전치)에 동등한 op타이밍입니다. 또한 MKL 빌드와 TF 1.13.1의 MKL 이외 빌드에서도 발생합니다. 대신 정적 그래프를 사용하는 것이 좋습니다. b = tf.

변수(tf.random_normal((10, 10, 100, 10, 10, 10, 10))) # 변수는 시간 op = tf.transpose (b, [3, 0, 1, 2, 4, 5])를 측정하는 동안 난수 생성을 피하기 위해 . Session() sess.run(tf.global_variables_initializer(tf.global_variables_initializer)) %timeit sess.run(op) 컨볼루션 또는 전치 컨볼루션이 보기의 좋은 특징 중 하나는 입력 요소와 출력 요소 간의 통신을 정의한다는 것입니다. 보폭과 패딩을 모두 선택하면 생성되는 출력 요소의 수에 영향을 미칩니다. 그러나 이 서신은 보폭 또는 엣지 효과로 인해 생략되거나 업 샘플링되는 요소를 명확하게 합니다. 필드 백엔드를 „theano“, „tensorflow“ 또는 „cntk“로 변경하기만 하면 다음에 Keras 코드를 실행할 때 새 구성을 사용합니다. 텐서플로우/텐서플로우/코어/커널/트랜스_펑터_cpu.cc <= 5 차원 tf는 효율적인 전치를 사용하며, 다른 경우에는 일부 기준 코드를 사용합니다. 나오키 시부야의 변환 된 회선에 대한 훌륭한 기사는 이 튜토리얼과 마찬가지로이 주제를 먼저 더 잘 이해하는 데 도움이되었습니다. 나는 파마가 치수를 통근하고 있다고 생각합니다.

예를 들어 파마=[0,2,1]은 dim_0 -> dim_0, dim_1 -> dim_2, dim_2 -> dim_1에 대한 짧습니다. 따라서 2D 텐서의 경우 perm=[1,0]은 행렬 전치일 뿐입니다. 이 질문에 대답합니까? 반환된 텐서의 치수 i는 입력 치수 파마[i]에 해당합니다. 파마가 주어지지 않으면(n-1로 설정됩니다… 0) 여기서 n은 입력 텐서의 순위입니다. 따라서 기본적으로 이 작업은 2-D 입력 텐서에서 일반 행렬 전치를 수행합니다. 컨쥬게이트가 True이고 a.dtype이 복합체64 또는 complex128인 경우 a의 값은 컨쥬게이징되고 전치됩니다. CPU에서 현재 동작을 설명, tf.transpose() np.tranpose (…)보다 10 배 느릴 수 있습니다. 복사())를) 예제의 경우 변환의 치수를 줄이는 모양재로 tf.transpose를 끼쳐 속도를 고정할 수 있습니다. 위의 정적 그래프 접근 방식에서도 여전히 매우 느립니다. 또한 메모리를 복사하는 것은 속도가 느린 작업을 설명하지 않습니다 (10000x!): 예를 들어 tf.tile (b, [1, 1, 1, 1, 1, 1]).op (메모리 복사가 병목 현상인 경우 훨씬 느려야합니다) 전치하는 동안 7.9 s. TensorFlow는 보폭을 지원하지 않습니다.

따라서 트랜스포즈는 항목이 변조된 새 텐서를 반환합니다. 나는 PyTorch와 TensorFlow 의 회선과 하나의 공간 차원의 변환 회선행렬 / 마스크 접근 방식과 수학적으로 동일하다는 것을 설명했습니다. 필터와 입력을 모두 하나의 차원으로 „래핑 해제“하여 두 개 이상의 공간 차원에서 이러한 사실이 되는 것으로 나타났습니다. ml 테스트 저장소에서 이 실험을 수행했습니다. 이것은 TensorFlow의 함수를 사용합니다 : 그래서, 우리는 입력, 필터링, 패딩 전략, 행렬과 마스크를 구성하는 보폭을 취할 수 있습니다. 그런 다음 행렬과 마스크를 사용하여 컨볼루션과 트랜스포지션을 모두 수행합니다. 마지막으로, 이 매트릭스/마스크 접근 방식이 PyTorch 및 TensorFlow와 동일한 결과를 생성한다는 것을 보여준다: 일반 컨볼루션과 는 달리, 전치된 컨볼루션은 먼저 `업-샘플`을 마스크로 입력한 다음 전치와 매트릭스 곱셈을 수행합니다. 필터 행렬: Numpy 및 TensorFlow는 서로 다른 메모리 모델을 사용하므로 NumPy에서 전치하는 경우 배열의 데이터를 복사할 필요가 없는 반면, 텐서플로우에서는 항상 복사본이 필요합니다.