2017-06-02 13 views
0

私は、事前モデルの畳み込み関数マップをマスターモデルの入力フィーチャとして使用します。Kerasはモデル出力を新しいレイヤーとしてマージ/連結します

for i in range(len(models)): 
    model = models[i] 
    for lay in model.layers: 
     lay.name = lay.name + "_" + str(i) 
    # Remove the last classification layer to rather get the underlying convolutional embeddings 
    model.layers.pop() 
    # while "conv2d" not in model.layers[-1].name.lower(): 
    #  model.layers.pop() 
    model.layers[0] = new_input_layer 
return models 

このすべてが与える:

print(type(inputs)) 
print(type(sub_models[0])) 
print(type(sub_models_outputs[0])) 

<class 'tensorflow.python.framework.ops.Tensor'> 
<class 'keras.engine.training.Model'> 
<class 'keras.layers.normalization.BatchNormalization'> 

注:ここでは

Traceback (most recent call last): 
    File "model_ensemble.py", line 151, in <module> 
    model = get_mini_ensemble_net() 
    File "model_ensemble.py", line 116, in get_mini_ensemble_net 
    inputs_augmented = layers.concatenate([inputs] + sub_models_outputs, axis=-1) 
    File "/usr/local/lib/python3.4/dist-packages/keras/layers/merge.py", line 508, in concatenate 
    return Concatenate(axis=axis, **kwargs)(inputs) 
    File "/usr/local/lib/python3.4/dist-packages/keras/engine/topology.py", line 549, in __call__ 
    input_shapes.append(K.int_shape(x_elem)) 
    File "/usr/local/lib/python3.4/dist-packages/keras/backend/tensorflow_backend.py", line 451, in int_shape 
    shape = x.get_shape() 
AttributeError: 'BatchNormalization' object has no attribute 'get_shape' 

は、情報を入力している。ここ
inputs = layers.Input(shape=(100, 100, 12)) 
sub_models = get_model_ensemble(inputs) 
sub_models_outputs = [m.layers[-1] for m in sub_models] 
inputs_augmented = layers.concatenate([inputs] + sub_models_outputs, axis=-1) 

は、私が get_model_ensemble()に何をすべきかの重要な一部であり、 :012から入手したモデルはすでに compile()関数が呼び出されています。では、モデルを正しく連結するにはどうしたらいいですか?なぜそれは動作しません?私はおそらく、入力がサブモデルにどのように供給されるのか、入力層をどのようにホットスワップしたのかと関係があると思います。

ありがとうございました!

答えて

0

事は、私たちがしなければ動作します。

sub_models_outputs = [m.layers[-1] for m in sub_models] 

TLDR:よりむしろ

sub_models_outputs = [m(inputs) for m in sub_models] 

モデルは層と呼ばれる必要があります。

関連する問題