我正在尝试创建一个预训练权重模型文件,用于初始化模型,类似于Imagenet预训练权重文件或Noisy-student的权重文件。
我拥有一个足够大的数据集,这些数据集非常多样,但专门用于我感兴趣的特定领域。我希望创建一个针对我感兴趣领域的通用预训练权重文件。
我知道我不能简单地训练并保存模型权重,因为生成的预训练权重文件与我试图使用的网络之间的类别数量(因此是层数)不会匹配。
我在互联网上找不到关于创建自定义预训练权重文件的任何信息,因此任何建议或建议都会非常有帮助。
回答:
当你为你的数据集定义模型进行训练时,模型的头部应为一个全局池化层,后跟一个全连接层。全连接层将用于基于你的数据集进行分类。一旦你的模型完成训练,你可以创建一个基于你训练模型的图形但不包括其头部的不同模型。然后,你可以保存这个新模型的权重,这些权重可以用于迁移学习。下面是使用Tensorflow的函数式API解释我所描述内容的简化视图。
inputs = Input(shape)# 所有隐藏层x = (...)(inputs)# 最终池化层x = GlobalAveragePooling2D()(x)# 预测层x = Dense(num_classes)(x)model = Model(inputs, x)
一旦你训练了这个模型,创建一个连接所有层但不包括头部的不同模型,并保存权重。
new_model = Model(inputs, model.layers[-2])new_model.save_weights(file_path)
这个新模型包含与之前模型相同的输入,但输出是GlobalAveragePooling2D()
层之前的层。