2017-12-05 6 views
0

연결된 모델 또는 계단식 모델을 실제로 만들지 않으려 고합니다. 실제로 이것이 정확한 정의인지는 모르겠다. 간단히하기 위해 내 기본 모델은 아래와 같습니다.다수의 사전 훈련 된 케라 모델 연결 또는 케라케이드

       ----Input---- 
            | 
            L1-1 
            | 
            L1-2 
            | 
            Dense 
            | 
           Softmax 

나는 교차 검증과 훈련이 모델의 7을 얻었다과 같은 캐스케이드 방식으로이를 마무리하려고 : 그래서 결국 조밀 한 레이어의

  -----------------------Input--------------------- 
      |  |  |  |  |  |  |  
      L1-1 L1-2 L1-3 L1-4  L1-5 L1-6 L1-7 
      |  |  |  |  |  |  | 
      L2-1 L2-2 L2-3 L2-4  L2-5 L2-6 L2-7 
      |  |  |  |  |  |  | 
      |_______|_______|_______|_______|_______|_______| 
      |     Concatenated     | 
      |___________________Dense Layer_________________| 
            | 
           SoftMax 

각 하나가 512 뉴런을 가지고 Concatenated Dense Layer는 총 7*512=3584 개의 뉴런을가집니다. 내가 무슨 짓을했는지

은 다음과 같습니다

  • 모든 모델을 훈련하고 models[]로라는 이름의 목록에 저장.
  • 모든 모델에서 최하부 Softmax 레이어를 팝했습니다.

그럼 내가 그들을 연결하는 시도하지만 오류가있어 :

Layer merge was called with an input that isn't a symbolic tensor. 

가 난 어떤 거 Concatenated Dense Layer를 제외한 모든 중간 레이어를 동결하고 약간 그것을 조정하는 폭포를 형성 한 후 수행하십시오. 그러나 나는 모든 세부 사항에서 설명한대로 붙어 있습니다.

답변

1

기능적 API 모델을 사용해야합니다. 이런 종류의 모델은 텐서와 함께 작동합니다. 그런 다음

outputTensors = [m(inputTensor) for m in models] 

당신이 CONCATENATE 층 이러한 텐서를 전달합니다

inputTensor = Input(inputShape) 

그런 다음 출력 텐서를 얻기 위해이 입력 각 모델을 호출

먼저 당신은 공통 입력 텐서를 정의 :

output = Concatenate()(outputTensors) 
output = Dense(...)(output)  
#you might want to use an Average layer instead of these two.... 

output = Activation('softmax')(output) 

마지막으로 전체 모델을 시작 텐서에서 종료 10 미엄 제품의 마케팅에보다 더 집중할 : [모델 m에 대한 m (inputTensor)]

fullModel = Model(inputTensor,output) 
+0

'outputTensors의 =은' 친애하는 각하, 우리가 바로 여기에 무엇을하고 있는지 명확히 할 수 있습니다. 이것은 출력 텐서를 얻기 위해 입력 텐서로 모델을 호출하는 것을 의미합니다. 감사. –

+0

모델이 레이어와 똑같이 작동합니다. 텐서를 통과하는 레이어를 "호출"합니다. 결과는 출력 텐서입니다. 그래서, 여러분이 모델'm'과 입력 텐서'inputT'를 가지고 있다고 가정하십시오. 다음은 모델을 호출합니다 :'output = m (inputT)'. 이 선에서, 당신은 입력 텐서를 모델에 "전달"하고 호출의 결과는 출력 텐서입니다. 당신이 말한 라인에서, 이제 출력 텐서리스트를 만들었습니다.리스트는 모델 목록에있는 각각의 모델에 하나씩 있습니다. 이 줄은 다음을 의미합니다 :'models' 목록에있는 각 모델'm'에 대해,이 모델을'inputTensor'로'm'이라고 부릅니다. 이것은 출력 텐서리스트를 생성합니다. –

+0

정확히 내가 필요한 것. 소중한 시간을 가져 주셔서 감사합니다. –