Я испытываю трудности с тонкой настройкой сети, которую я обучал в предварительно подготовленной сети imagnet с помощью keras.
Во-первых, я настроил сеть из 10 классов на предварительно обученный imagenet.
Затем я хочу обучить 3 разные сети (каждая с разным выходным размером классов (2,2,6)) на отлаженной модели с 3 классами. И, наконец, объедините эти 3 модели в конечную модель, которая содержит 10 выходных классов. Этакая иерархия для повышения точности.
Я пытался изменить выходные слои, загрузить новую модель и веса, но все равно застрял
def generator(train_data_dir, img_size, batch_size, val_split):
train_datagen = ImageDataGenerator(validation_split=val_split,rescale=1./255)
train_generator = train_datagen.flow_from_directory(train_data_dir,target_size=(img_size, img_size),batch_size=batch_size,color_mode='rgb',shuffle=True,subset='training') # set as training data
validation_generator = train_datagen.flow_from_directory(train_data_dir,target_size=(img_size, img_size),color_mode='rgb',shuffle=False,subset='validation') # set as validation data
return train_generator, validation_generator
def main():
IMG_SIZE = 224
BATCH_SIZE = 32
VAL_SPLIT = 0.1
testdir = 'data'
train_gen, val_gen = generator(testdir,IMG_SIZE, BATCH_SIZE,VAL_SPLIT)
STEPS_PER_EPOCH = 513 // BATCH_SIZE # SAMPLE SIZE ADD
VALIDATION_STEPS = 56 // BATCH_SIZE # SAMPLE SIZE ADD
lr_rate = 0.001
EPOCHS = 10
WEIGHT_DECAY = 0.0005
#Model save
model_save_file = 'content/weights.009-0.029-0.018.hdf5/base_model_1.h5'
model = load_model('/content/base_model_1.h5') #this model is trained on different size of classes(trained for 10 classes on pretrained imagenet model)
model.load_weights('/content/weights.009-0.029-0.018.hdf5')
model._layers.pop()
for layer in model.layers:
layer.trainable = False
mod_1 = model.layers[-1].output
mod_1 = Flatten(name='flatten')(mod_1)
mod_1 = Dropout(0.2)(mod_1)
mod_1 = Dense(15, activation='relu')(mod_1)
predictions = Dense(3, activation='softmax', name='pred_age')(mod_1)
top_model = Model(inputs=model.input, outputs=predictions)
opt = get_optimizer('adam', lr_rate)
top_model.compile(loss=['categorical_crossentropy'],
optimizer=opt,
metrics=['accuracy','mae'])
hist = top_model.fit_generator(generator=train_gen,
epochs=EPOCHS,
steps_per_epoch = STEPS_PER_EPOCH,
validation_data=val_gen,
validation_steps = VALIDATION_STEPS,
verbose=1,
callbacks=callbacks)
top_model.save(model_save_file)
Я получаю следующую ошибку: ValueError: Ввод 0 несовместим с выравниванием слоя: ожидаемый min_ndim = 3, найденный ndim = 2.
Я впервые тренировал 3 разных модели:
model 1 = 3 labels (8,9,10)
model 2 = 2 labels (30,31)
model 3 = 4 labels (80,81,82,83)
Я хотел бы объединить эти 3 модели в окончательную модель с 1 выходом, содержащим 9 меток (8,9,10,30,31,80,81,82,83). Окончательный ввод должен получить 1 входное изображение вместо 3 изображений. Но я все еще застреваю. Я строю некую иерархию, чтобы улучшить точность.