Как добавить несколько слоев перед моделью в трансферном обучении с помощью tensorflow

Я пытаюсь использовать трансферное обучение в тензорном потоке. Я знаю парадигму высокого уровня

base_model=MobileNet(weights='imagenet',include_top=False) #imports the 

mobilenet model and discards the last 1000 neuron layer.

x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(120,activation='softmax')(x) #final layer with softmax activation

а затем компилируется с помощью

model=Model(inputs=base_model.input,outputs=preds)

Однако я хочу, чтобы перед base_model.input было несколько других слоев. Я хочу добавить враждебный шум к поступающим изображениям и кое-что еще. Итак, я хочу знать, как:

base_model=MobileNet(weights='imagenet',include_top=False) #imports the 

mobilenet model and discards the last 1000 neuron layer

x = somerandomelayers(x_in)
base_model.input = x_in
x=base_model.output
x=GlobalAveragePooling2D()(x)
x=Dense(1024,activation='relu')(x) #we add dense layers so that the model can learn more complex functions and classify for better results.
x=Dense(1024,activation='relu')(x) #dense layer 2
x=Dense(512,activation='relu')(x) #dense layer 3
preds=Dense(120,activation='softmax')(x) #final layer with softmax activation
model=Model(inputs=x_in,outputs=preds)

но строка base_model.input = x_in, по-видимому, не подходит, поскольку выдает ошибку can't set attribute. Как мне добиться желаемого поведения?

Как вы определяете x_in? Вы хотите объединить два входа или просто добавить слои перед моделью?

Sharky 30.05.2019 08:56

просто добавьте слои перед моделью. В основном я хочу, чтобы моя архитектура была . слой1, слой2... слойn --> ввод модели-->вывод модели-->слойk,layersk+1...

MiloMinderbinder 30.05.2019 10:26
Udacity Nanodegree Capstone Project: Классификатор пород собак
Udacity Nanodegree Capstone Project: Классификатор пород собак
Вы можете ознакомиться со скриптами проекта и данными на github .
1
2
1 020
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вам нужно определить входной слой. Это довольно просто, просто не забудьте установить правильные формы. Например, вы можете использовать любую предопределенную модель из Keras.

base_model = keras.applications.any_model(...)
input_layer = keras.layers.Input(shape)
x = keras.layers.Layer(...)(input_layer)
...
x = base_model(x)
...
output = layers.Dense(num_classes, activation)(x)
model = keras.Model(inputs=input_layer, outputs=output)

Другие вопросы по теме