Как тренировать модель для добавления новых классов? - PullRequest
1 голос
/ 26 сентября 2019

Моя обученная модель имеет 10 классов (т. Е. Выходной слой имеет 10 классов).Я хочу добавить к нему еще 3 класса без повторного обучения всей модели.
Я хочу использовать старую обученную модель и добавлять к ней новые классы.

Это код, который я уже пробовал, но он показывает ошибку.

from keras.models import load_model
from keras.models import Sequential
from keras.layers import Conv2D
from keras.layers import MaxPooling2D
from keras.layers import Flatten
from keras.layers import Dense

base_model = load_model('hand_gest.h5')

new_model = Sequential()

for layer in base_model.layers[:-2]:
    new_model.add(layer)

for layer in new_model.layers:
    layer.trainable = False

weights_training = base_model.layers[-2].get_weights()
new_model.layers[-2].set_weights(weights_training) 


new_model.add(Dense(units = 3, activation = 'softmax'))    

Но когда я тренирую эту модель, она показывает следующую ошибку.

ValueError: You called `set_weights(weights)` on layer "max_pooling2d_2" with a  weight list of length 2, but the layer was expecting 0 weights. Provided weights: [array([[-0.01650696,  0.01082378,  0.0149541 , .....

1 Ответ

2 голосов
/ 26 сентября 2019

Поскольку количество классов изменяется с 10 на 13, необходимо изменить последний уровень предыдущей сети.

base_model = load_model('hand_gest.h5')
base_model.pop() #remove the last layer - 'Dense' layer with 10 units
for layer in base_model.layers:
    layer.trainable = False
base_model.add(Dense(units = 13, activation = 'softmax'))
base_model.summary() #Check architecture before starting the fine-tuning
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...