【问题标题】:How to train model to add new classes?如何训练模型以添加新类?
【发布时间】:2019-09-26 21:05:39
【问题描述】:

我的训练模型有 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 , .....

【问题讨论】:

    标签: python keras conv-neural-network


    【解决方案1】:

    随着类数从 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
    

    【讨论】:

      猜你喜欢
      • 2020-01-15
      • 1970-01-01
      • 2017-08-18
      • 2023-01-03
      • 2021-10-24
      • 1970-01-01
      • 2018-10-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多