对于多类分类问题,是否可以在keras中进行持续培训?

对于多类分类问题,是否可以在keras中进行持续培训?,keras,Keras,我试图继续在凯拉斯训练。 因为在我有了新的标签和值之后,我建立了keras多类分类模型。所以我想建立一个新的模型,而不需要再培训。这就是为什么我在喀拉斯尝试了连续列车 model.add(Dense(10, activation='sigmoid')) model.compile(optimizer='rmsprop', loss='sparse_categorical_crossentropy', metrics=['accuracy'])

我试图继续在凯拉斯训练。 因为在我有了新的标签和值之后,我建立了keras多类分类模型。所以我想建立一个新的模型,而不需要再培训。这就是为什么我在喀拉斯尝试了连续列车

model.add(Dense(10, activation='sigmoid'))

model.compile(optimizer='rmsprop',
            loss='sparse_categorical_crossentropy',
            metrics=['accuracy'])


model.fit(training_data, labels, epochs=20, batch_size=1)

model.save("keras_model.h5")
完成保存模型后,我想继续进行培训。所以我试着

model1 = load_model("keras_model.h5")
model1.fit(new_input, new_label, epochs=20, batch_size=1)
model1.save("keras_model.h5")
我试过这个。但它被抛出了一个错误。像之前的10节课一样。但现在我们添加新类意味着发生了错误

那么,我的问题是,是否有可能继续在keras中为一个新类别进行多类别分类培训

tensorflow.python.framework.errors\u impl.InvalidArgumentError:已收到 标签值为10,超出了[0,9]的有效范围。标签 值:10[{{node loss/dense_7_loss/SparseSoftmaxCrossEntropyWithLogits/SparseSoftmaxCrossEntropyWithLogits}]


这种情况的典型方法是定义一个包含大多数内层且可重用的通用模型;然后定义第二个模型,该模型定义输出层,从而定义类的数量。内部模型可以在后续的外部模型中重用

未经测试的示例:

将tensorflow导入为tf
从tensorflow进口keras
从tensorflow.keras.layers导入*
从tensorflow.keras.models导入模型
def make_inner_model():
“”“采用42个特征并输出
变换向量。
"""
inp=Input(shape=(42),name='in')
h1=密度(80,活化='relu')(inp)
h2=密度(40)(h1)
h3=致密(60,活化='relu')(h2)
out=密度(32)(h3)
返回模型(输入、输出)
def制造外部模型(内部模型,n类):
inp=Input(shape=(42),name='inp')
隐藏=内部_模型(inp)
out=密集(n_类,activation='softmax')(隐藏)
模型=模型(输入,输出)
model.compile('adam','categorical\u crossentropy')
回归模型
内部模型=制造内部模型()
内部模型.save('internal\u model\u untrained.h5')
模型1=制造外部模型(内部模型,10)
模型1.摘要()
#model1.fit()
#内部模型。保存权重(“内部模型权重1.h5”)
模型2=制造外部模型(内部模型,12)
#model2.fit()
#内部模型。保存权重(“内部模型权重2.h5”)

@MuruganR用一段代码片段编辑了答案,该代码片段在多个具有不同输出层的模型之间重用了一组隐藏层。非常感谢,先生。真的很好。它工作正常。先生,在这种情况下,我们如何保存模型?如果我们再次保存模型权重,意味着如何在没有make_inner_model()的情况下加载,make_outer_model()函数?您可以调用
internal_model.save('filename')
,然后使用
keras.models.load_model()
。或者您可以选择使用
model.save_weights