如何创建类似于Imagenet或Noisy-student的预训练权重模型?

我正在尝试创建一个预训练权重模型文件,用于初始化模型,类似于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()层之前的层。

Related Posts

使用LSTM在Python中预测未来值

这段代码可以预测指定股票的当前日期之前的值,但不能预测…

如何在gensim的word2vec模型中查找双词组的相似性

我有一个word2vec模型,假设我使用的是googl…

dask_xgboost.predict 可以工作但无法显示 – 数据必须是一维的

我试图使用 XGBoost 创建模型。 看起来我成功地…

ML Tuning – Cross Validation in Spark

我在https://spark.apache.org/…

如何在React JS中使用fetch从REST API获取预测

我正在开发一个应用程序,其中Flask REST AP…

如何分析ML.NET中多类分类预测得分数组?

我在ML.NET中创建了一个多类分类项目。该项目可以对…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注