2017-12-05 10 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ニューロンを得ました連結高密度層は、合計で7*512=3584ニューロンを有する。私がやった何

は次のとおりです。

  • すべてのモデルを訓練し、models[]という名前のリストにそれらを保存しました。
  • すべてのモデルで最下部Softmaxレイヤーをポップしました。

その後、私はそれらを連結しようとするが、エラーが発生しました:

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

私はつもりはカスケードを形成した後に行うんですがConcatenated Dense Layer以外のすべての中間層を凍結し、少しそれをチューニングしています。しかし、私はすべての詳細で説明されているように立ち往生しています。

答えて

1

機能的なAPIモデルを使用する必要があります。この種のモデルはテンソルと連動します。

まずあなたが共通の入力テンソルを定義します。

inputTensor = Input(inputShape) 

その後、出力テンソルを取得するには、この入力を各モデルを呼び出す:

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

次にあなたがCONCATENATE層にこれらのテンソルを渡します。

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

output = Activation('softmax')(output) 

最後に、完全なモデルを開始テンソルからエンド10まで定義しますSORS:

fullModel = Model(inputTensor,output) 
+0

'outputTensorsは= [M(inputTensor)モデルにおけるM用]' 親愛なる、あなたは私たちがまさにここに何をしている明確にすることができます。これは、出力テンソルを得るために入力テンソルを持つモデルを呼び出すことを意味します。ありがとう。 –

+0

モデルはレイヤーとまったく同じように動作します。あなたはテンソルを渡している層を「呼び出す」。結果は出力テンソルです。ですから、あなたはモデル 'm'と入力テンソル' inputT'を持っているとします。以下のように 'output = m(inputT)'というモデルを呼び出します。この行では、入力テンソルをモデルに「渡す」ことになり、呼び出しの結果は出力テンソルになります。あなたが言及した行では、あなたのリストの 'models'の各モデルのための出力テンソルのリストを作成しました。その行は、 'models'リストの各モデル' m'に対して、 'inputTensor'でこのモデルを' m'と呼びます。これにより、出力テンソルのリストが作成されます。 –

+0

まさに私が必要としたもの。貴重な時間をありがとう。 –

関連する問題