2017-10-03 7 views
0

나는 keras를 처음 사용했습니다.여러 keras 최대 풀링 레이어를 병합

내 목표는 최대 4 개의 최대 풀링 레이어를 갖는 것입니다. 모두 동일한 모양의 모양 (N, 256)을 사용합니다. 첫 번째 계층은 전역 최대 풀링을 수행하고 1 개의 출력을 제공합니다. N/2 풀링 크기 및 N/2 스트라이드를 갖는 두 번째 계층은 2 개의 출력을 제공합니다. 세 번째는 4 개의 출력을 제공하고 네 번째는 8 개의 출력을 제공합니다. 여기 내 코드가있다.

test_x = np.random.rand(N, 256, 1) 

    model = Sequential() 

    input1 = Input(shape=test_x.shape, name='input1') 
    input2 = Input(shape=test_x.shape, name='input2') 
    input3 = Input(shape=test_x.shape, name='input3') 
    input4 = Input(shape=test_x.shape, name='input4') 

    max1 = MaxPooling2D(pool_size=(N, 256), strides=N)(input1) 
    max2 = MaxPooling2D(pool_size=(N/2, 256), strides=N/2)(input2) 
    max3 = MaxPooling2D(pool_size=(N/4, 256), strides=N/4)(input3) 
    max4 = MaxPooling2D(pool_size=(N/8, 256), strides=N/8)(input4) 

    mrg = Merge(mode='concat')([max1, max2, max3, max4]) 

4 개의 최대 풀링 레이어를 만든 후에는 함께 병합하려고하지만 keras는이 오류를 제공합니다.

ValueError: Dimension 1 in both shapes must be equal, but are 4 and 8 for 'merge_1/concat' (op: 'ConcatV2') with input shapes: [?,1,1,1], [?,2,1,1], [?,4,1,1], [?,8,1,1], [] and with computed input tensors: input[4] = <3>.

이 문제를 어떻게 해결할 수 있습니까? 케라에서 나의 목표를 달성하기위한 올바른 방법을 모으고 있습니까?

답변

0

연결의 경우, 모든 차원은 연결 수 차원 자체를 제외하고 동일한 수의 요소를 가져야합니다. 당신이 볼 수 있듯이

, 결과가이 모양 :

(?, 1, 1, 1)  
(?, 2, 1, 1)  
(?, 4, 1, 1)  
(?, 8, 1, 1)  

물론, 그들을 연결하는 유일한 방법은 두 번째 축에 (축 = 1)

mrg = Concatenate(axis=1)([max1,max2,max3,max4]) 

그러나 통지 그 (당신이하고있는 일에 대해 특별한 이유가없고, 당신이하고있는 일을 잘 알고 있지 않다면) 이것은 채널 차원이 아닌 공간 차원에서 연결되어 있기 때문에 아주 이상한 이미지가 될 것입니다.

+0

내 질문에 답해 주셔서 감사합니다. 추가 질문 [keras.layers.merge] (https://keras.io/layers/merge/#concatenate) 모듈에 Add instance와 Concatenate 인스턴스가 있습니다. 그 둘의 차이점을 조금 설명 할 수 있습니까? –

+0

'Add()'레이어는 문자 그대로 두 개의 풋에서 값을 더할 것입니다. (두 개의 입력은 모든 차원에서 정확히 같은 크기 여야합니다.) 그것은 "result = input1 + input2", elementwise와 같습니다. ---'Concatenate()'레이어는 하나의 입력을 다른 레이어의 끝에 추가합니다. 두 개의 텐서에 합류하고 더 큰 텐서를 만드는 계산은 포함되어 있지 않습니다. –

+0

귀하의 질문에 대한 답변이 있다고 생각되면 답변으로 표시하십시오. –