2種類のデータ(画像のボリュームと座標)があり、画像ボリュームデータに畳み込みニューラルネットワークを使いたいと思っています。情報(すなわち、ボリュームの座標)。Kerasで2種類の深い学習モデルを結合する
これは独立して、私の関数のかなりの予測変数を作成するはずです。どのようにKerasを使ってこれを実装できますか?
私がオンラインで見つけた唯一の回答はあいまいであるか、または私が仕事をしなければならない廃止された方法を使用しています。しかし、実際のAPIを使ってこれを実装して、後で使用するためにモデルをより簡単に保存できるようにしたいと思います。
model = Sequential()
model.add(Conv3D(32, kernel_size=(3, 3, 3),
activation='relu',
input_shape=input_shape))
model.add(Conv3D(64, (3, 3, 3), activation='relu'))
model.add(MaxPooling3D(pool_size=(2, 2, 2)))
model.add(Dropout(0.25))
model.add(Flatten())
print(model.output_shape)
# The additional data (the coordinates x,y,z)
extra = Sequential()
extra.add(Activation('sigmoid', input_shape=(3,)))
print(extra.output_shape)
merged = Concatenate([model, extra])
# New model should encompass the outputs of the convolutional network and the coordinates that have been merged.
# But how?
new_model = Sequential()
new_model.add(Dense(128, activation='relu'))
new_model.add(Dropout(0.8))
new_model.add(Dense(32, activation='sigmoid'))
new_model.add(Dense(num_classes, activation='softmax'))
new_model.compile(loss=keras.losses.categorical_crossentropy,
optimizer=keras.optimizers.Adadelta(),
metrics=['accuracy'])
APIの例を明確にしていただきありがとうございます。それは有り難いです! – JahKnows
もう1つ質問がありますが、どうすればこの種のモデルを保存して読み込むことができますか? fullModelだけを保存すれば十分ですか? – JahKnows
残念ながら私はケラでモデルを保存することはできませんでした。どうしてか分かりません。私がしているのは 'fullModel.save_weights(filename)'と 'fullModel.load_weights(filename)'です。これは、学習モデルを保存して読み込むのには十分ですが、トレーニングをやり直すときには問題が発生する可能性があります(このプロセスでオプティマイザが失われ、トレーニング中に再度調整する必要があります)。 –