首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Keras调谐器传递学习模型的超参数优化

Keras调谐器传递学习模型的超参数优化
EN

Stack Overflow用户
提问于 2021-04-30 09:09:53
回答 1查看 178关注 0票数 0

我想用Keras对我的传输学习模型进行超参数优化。我不知道该怎么做,因为我有两个阶段的训练,

  1. 冻结整个网络,只训练最后一层以收敛到新的类和
  2. 解冻和训练网络。

本论文本论文中,提出了一种基于传递学习的超参数优化方法--共享超参数优化。他们说,在这两个阶段之间共享一组超参数会得到最好的结果。但是,我不明白“一组超参数”是什么意思,以及是否可以使用Keras (他们使用GPyOpt)来实现这一点。

任何帮助理解这一概念,或任何其他的想法/经验如何执行超参数优化的转移学习模型,将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2022-04-14 21:48:08

如果不发布模型代码,我无法确定,但在我的例子中,我需要调优的大多数超参数都在我的模型的输出层中,而base_model是一个InceptionResNetv2。你可以在这里看到:

代码语言:javascript
复制
def build_model(hp):
  METRICS = [
    'accuracy',
    tf.keras.metrics.AUC(name='auc'),
    tf.keras.metrics.Precision(name='precision'),
    tf.keras.metrics.Recall(name='recall')
  ]
  inputs = tf.keras.Input(shape=(512,512,3))
  base_model = InceptionResNetV2(include_top=False, weights='imagenet', input_shape=(512,512,3), input_tensor=inputs)
  base_model.trainable = False
  target_conv_layer = list(filter(lambda x: isinstance(x, tf.keras.layers.Conv2D), base_model.layers))[-1].name
  conv_layer = base_model.get_layer(target_conv_layer)
  x = GlobalAveragePooling2D()(conv_layer.output)
  x = tf.keras.layers.GaussianNoise(hp.Float("gn", min_value=0.3, max_value=0.6, step=0.1))(x)
  x = Dense(units=hp.Int("units", min_value=128, max_value=512, step=32), activation="relu", kernel_regularizer="l1")(x)
  x = Dropout(hp.Float("dropout", min_value=0.1, max_value=0.6, step=0.1))(x)
  predictions = Dense(3, activation="softmax")(x)

  model = Model(inputs=inputs, outputs=predictions)

  lr = hp.Float("lr", min_value=0.0001, max_value=0.01, sampling="log")
  model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = lr),
                loss=tf.keras.losses.CategoricalCrossentropy(),
                metrics=[METRICS])

  return model

因此,您可以使用这个函数与keras调谐器一起收集模型的最佳超参数,因为输出层是用您的数据集训练的,并将学习如何从卷积输出中对图像进行分类。

然后,您可以继续使用这些超参数进行微调,根据我的理解,这将是“一组超参数”。

如果您想进一步进行超参数优化,您可以使用当前的超参数保存整个模型,然后定义一个新的build_model函数,该函数加载到模型中,并设置模型以进行微调。这对我是有效的-但我不确定这是否是最好的方法。新的build_model函数看起来如下所示:

代码语言:javascript
复制
def build_model(hp):
 model = tf.keras.models.load_model("your_model")
 model.trainable = True

 for layer in model.layers[:100]:
  layer.trainable = False
 
 lr = hp.Float("lr", min_value=0.0001, max_value=0.01, sampling="log")
 model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate = learning_rate),loss=tf.keras.losses.CategoricalCrossentropy(),metrics=[METRICS])
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67331177

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档