2017-03-22 3 views
0

나는 테노 백엔드가있는 케라를 사용하고 있습니다. 이제 변수 x가 있습니다.이 변수는 유형 필드가 "TensorType (float32, 3D)"인 theano 텐서입니다.
나는 내 파일의 시작 부분에 케라 함수가 "expand_dims"기능을 사용하여 유형을 변경하는 이유는 무엇입니까?

from keras import backend as K 

을 추가했다. 그럼 내가 쓴 :

x = K.expand_dims(x, dim = 1) 

내가 x의 유형 필드는 "TensorType (float32, 4D)"인 것을 기대했다. 그러나 "TensorType (float32, (False, True, False, False))"이며 이유를 알 수 없습니다. 또한 keras 문서는이 기능에 대한 추가 정보를 제공하지 않으며 "색인에 1 크기의 치수를 추가" "흐리게"표시합니다.
게다가 제가

x = K.squeeze(x, 1) 

을 수행하는 경우, x의 타입 필드는 것 "TensorType (float32 매트릭스)"기대된다.

답변

1

expand_dims에는 dimshuffle Theano에서의 조작이 있습니다. 튜플 (False, True, False, False)은 방송 할 수있는 크기를 알려줍니다. 너는 Numpy의 방송 능력을 알고 있을지도 모른다. 주요 차이점과 비슷합니다.

Theano 개발자 : Theano는 편집하기 전에 모든 방송 가능한 크기를 그래프에 선언해야합니다. NumPy는 런타임 모양 정보를 사용합니다.

자세한 내용은 thisthis을 참조하십시오.

4 차원 배열의 경우 두 번째 차원 즉 채널이 브로드 캐스팅됩니다. 이제 4 차원 배열 크기가 (10,N,20,30)이라고 가정 해 보겠습니다. 이제 4 차원 배열과 두 번째 차원 N 번 반복없이 크기 (10,1,20,30)의 다른 배열을 요소 단위로 곱할 수 있습니다. 이것은 방송이라고합니다. 이제 4-D 배열과 다른 크기 배열 (1,N,20,30)을 곱하려고 시도합니다. 첫 번째 차원을 브로드 캐스팅 할 수 없으므로이 작업은 실패합니다. 나는 이것이 분명히 희망한다.

+0

방송 메커니즘을 이해합니다. 사실, 나는'TensorType (float32, 4D)'의 텐서를'TensorType (float32, 3D)'의 텐서로 짜내고, 무언가를하고'TensorType (float32, 4D))'. 그러나, 나는 그것을'TensorType (float32, (False, True, False, False))'의 텐서 (tenor)로 복원 할 수 있으며'TensorType (float32, 4D)'의 텐서로 복원하는 방법을 궁금해합니다. – ptr

관련 문제