Я хочу поместить 4-слойную плотную сеть перед предварительно обученной моделью, такой как nasnet_mobile. Я пробовал это несколькими различными способами, но все они дают головные боли (иначе ошибки). Как это сделать в keras + tensflowflow2, который работает?
Мысли:
- Есть ли какой-нибудь "флаг", в котором я должен указать вывод Dense в виде целого числа, или картинка?
- Есть ли какой-то "флаг" в предварительно обученной модели, где я должен разрешить ей подключаться?
Нужно ли вручную делать клон предварительно обученного, загрузить это с предварительно подготовленными весами, и затем попробуйте один из вышеупомянутых; может быть, подготовленный другой класс, чем созданный? (обновление) Если я копирую, есть ли простой способ убедиться, что я получаю такую же структуру, чтобы при наличии set_weights (get_weights (…)) она не выглядела как ошибка?
Ничего из вышеперечисленного ...
КОД:
#LIBRARIES
import numpy as np
from tensorflow import keras
from tensorflow.keras.models import Sequential, Model
from tensorflow.keras.layers import Dense, Reshape, Conv2D, MaxPool2D , Flatten, Input
my_input_shape = (224,224,3)
#DENSE MODEL
my_inputs = Input(shape=my_input_shape)
hidden_1 = Dense(units=8, activation='relu')(my_inputs)
#make the output layer
hidden_2= Dense(units=np.product(my_input_shape),
activation='sigmoid')(hidden_1)
transformed = keras.layers.Reshape(my_input_shape,)(hidden_2)
dense_model = Model(inputs=my_inputs, outputs=transformed)
#PRETRAINED MODEL
pretrained_model = keras.applications.nasnet.NASNetMobile(weights = 'imagenet',
include_top = False,
input_shape=my_input_shape)
#Option 1
combined_model_1 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet',
include_top = False,
input_tensor=transformed)
#Option 2
combined_model_2 = Model(inputs=dense_model.input, outputs=pretrained_model.output)
#Option 3a
combined_model_3a = keras.applications.nasnet.NASNetMobile(weights = 'imagenet',
include_top = False,
input_tensor=my_input_shape)(dense_model)
#Option 3b
combined_model_3b = keras.applications.nasnet.NASNetMobile(weights = 'imagenet',
include_top = False)(dense_model)
#Option 4
combined_model_4 = keras.applications.nasnet.NASNetMobile(weights = 'imagenet',
include_top = False,
input_tensor=dense_model)
Проблема:
Учитывая приведенный выше код, я хочу гирляндную цепь Плотной модели перед предварительно обученной моделью. Я хочу передать изображение в плотное, сделать так, чтобы оно распространялось через плотное, затем быть входом для предварительно обученного, и go через предварительно обученное.