私は連結モデルまたはカスケードモデルを作成しようとしています(実際にはこれが正しい定義かどうかわかりません)。 簡単にするために、私のベースモデルは以下のようになっています。複数の事前トレーニングされたケラスモデルの連結またはカスケード
----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
以外のすべての中間層を凍結し、少しそれをチューニングしています。しかし、私はすべての詳細で説明されているように立ち往生しています。
'outputTensorsは= [M(inputTensor)モデルにおけるM用]' 親愛なる、あなたは私たちがまさにここに何をしている明確にすることができます。これは、出力テンソルを得るために入力テンソルを持つモデルを呼び出すことを意味します。ありがとう。 –
モデルはレイヤーとまったく同じように動作します。あなたはテンソルを渡している層を「呼び出す」。結果は出力テンソルです。ですから、あなたはモデル 'm'と入力テンソル' inputT'を持っているとします。以下のように 'output = m(inputT)'というモデルを呼び出します。この行では、入力テンソルをモデルに「渡す」ことになり、呼び出しの結果は出力テンソルになります。あなたが言及した行では、あなたのリストの 'models'の各モデルのための出力テンソルのリストを作成しました。その行は、 'models'リストの各モデル' m'に対して、 'inputTensor'でこのモデルを' m'と呼びます。これにより、出力テンソルのリストが作成されます。 –
まさに私が必要としたもの。貴重な時間をありがとう。 –