2017-12-22 16 views
0

내가 TensorFlow 및 Keras 새로운 오전, 나는 구조가 훈련 모델이 : 나는에 1None에서 배치 번호를 수정해야 할 몇 가지 이유 (다른 CNN 프레임 워크에 모델로 변환)의 경우Keras에서 훈련 된 모델의 입력 모양을 설정하는 방법은 무엇입니까?

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input_1 (InputLayer)   (None, 128, 128, 3)  0   
_________________________________________________________________ 
conv1 (Conv2D)    (None, 64, 64, 8)   216  
_________________________________________________________________ 
... 

을 입력 모양이 (1,128,128,3)이되도록 작업하십시오. 원하는 구조는 다음과 같습니다.

_________________________________________________________________ 
Layer (type)     Output Shape    Param # 
================================================================= 
input_1 (InputLayer)   (1, 128, 128, 3)  0   
_________________________________________________________________ 
conv1 (Conv2D)    (1, 64, 64, 8)   216  
_________________________________________________________________ 
... 

새로운 입력 레이어를 교체하거나 삽입하려했지만 작동하지 않았습니다. 모든 힌트 또는 팁을 부탁드립니다!

답변

1

batch_shape 명시 적으로 새 입력을 생성하여 모델에 전달할 수 있습니다. 그런 다음 다른 모델을 만듭니다. 내가 다른 프레임 워크는이 생각을 처리할지 모르는

:

from keras.layers import Input 
from keras.models import Model 

newInput = Input(batch_shape=(1,128,128,3)) 
newOutputs = oldModel(newInput) 
newModel = Model(newInput,newOutputs) 

이것은 당신이 Keras에서 원하는 모델을 생성합니다. 그러나 다른 프레임 워크의 동작은 좋을 수도 있고 그렇지 않을 수도 있습니다.

  • Sequential 경우 : 그것은 당신에게 좋은 결과를 가져 오지 않는 경우

    , 당신 만 입력 형태를 변경, 다시 전체 모델을 기록 할 수있는 1 층은 batch_input_shape=(1,128,128,3)

  • 을 가져야한다 Model 경우 : 입력 텐서는 위와 같이해야한다 : 당신이) 이전 모델과 동일한 코드로 그는 새로운 모델을 t을 생성 한 후, 가중치를 전송 Input(batch_shape=(1,128,128,3))

:

newModel.set_weights(oldModel.get_weights()) 
+1

첫 번째 솔루션은 다음과 같은 새로운 구조를 제공하지만 작동합니다. input_1 (1,128,128,3) | model_1 (여러), 여기서 Model_1, InputLayer 여전히 (없음, 128,128,3) ... 그래서 다른 프레임 워크로 변환 할 수 없습니다. 다시 모델을 다시 작성하고 가중치를 가져 오려고합니다. 감사! –