Keras官方出调参工具了,然而Francois说先别急着用

2019-06-20 17:01:45 浏览数 (1)

机器之心报道

参与:路

近日,Keras 官方发布了一个调参工具 Keras Tuner,提供一种 Keras 内的简单便捷调参方式,以及可视化和分析服务。然而目前发布的版本还不成熟,Keras 作者 François Chollet 表示:大家先别用,API 还不稳定。

Keras Tuner GitHub 地址:https://github.com/keras-team/keras-tuner

早在上个月举办的谷歌 I/O 大会上,谷歌即展示了 Keras Tuner 的功能。Keras 作者 François Chollet 也发推介绍了该工具。

What is Keras Tuner?

据介绍,Keras Tuner 是专为 AI 从业者、hypertuner 算法创建者和模型设计人员开发的一款简单高效调参框架。它提供干净简单的 API,用户只需改变几行代码即可完成模型调参工作。

除了简单直观的 API 之外,Keras Tuner 还提供 SOTA hypertuner 算法、可调整的架构,以及无缝实验记录功能。

此外,它还可用于 TensorBoard、Colab、BigQuery、Command line 等。

谷歌 Elie Bursztein 在 I/O 大会上还展示了 Keras Tuner 使用示例:Keras Tuner 通过改变少量代码即可将分类器 ResNet101v2 进行调参,生成的模型相比原模型准确率提高了 20%,参数量减少了 45%!

此外,Keras Tuner 还提供 Online dashboard,用户可以实时在线观察模型训练状况。

Keras Tuner 使用示例

目前,Keras Tuner GitHub 项目中也给出了两个示例。

1. 使用 Keras Tuner 目前的 API 在 MNIST 数据集上进行模型调参:

代码语言:javascript复制
from tensorflow import keras
from tensorflow.keras import layers

import numpy as np

from kerastuner.tuners import GridSearch
from kerastuner.distributions import Range, Choice

(x, y), (val_x, val_y) = keras.datasets.mnist.load_data()
x = x.astype('float32') / 255.
val_x = val_x.astype('float32') / 255.


"""Basic case:
- We define a `build_model` function
- It returns a compiled model
- It uses hyperparameters defined on the fly
"""


def build_model():
 model = keras.Sequential()
 model.add(layers.Flatten(input_shape=(28, 28)))
 for i in range(Range('num_layers', 2, 20)):
 model.add(layers.Dense(units=Range('units_'   str(i), 32, 512, 32),
 activation='relu'))
 model.add(layers.Dense(10, activation='softmax'))
 model.compile(
 optimizer=keras.optimizers.Adam(
 Choice('learning_rate', [1e-2, 1e-3, 1e-4])),
 loss='sparse_categorical_crossentropy',
 metrics=['accuracy'])
 return model


tuner = GridSearch(
 build_model,
 objective='val_accuracy',
 num_executions=2)

tuner.search(x=x,
 y=y,
 validation_data=(val_x, val_y))

2. 使用 Keras Tuner 未来 API 在 MNIST 数据集上进行模型调参:

代码语言:javascript复制
from tensorflow import keras
from tensorflow.keras import layers
import numpy as np
from kerastuner.tuner import SequentialRandomSearch

(x, y), (val_x, val_y) = keras.datasets.mnist.load_data()
x = x.astype('float32') / 255.val_x = val_x.astype('float32') / 255.


"""Basic case:
- We define a `build_model` function
-It returns a compiled model
-It uses hyperparameters defined on the fly
"""


def build_model(hp):
 model = keras.Sequential()
 model.add(layers.Flatten(input_shape=(28, 28)))
 for i in range(hp.Range('num_layers', 2, 20)):
 model.add(layers.Dense(units=hp.Range('units_'   str(i), 32, 512, 32),
 activation='relu'))
 model.add(layers.Dense(10, activation='softmax'))
 model.compile(
 optimizer=keras.optimizers.Adam(
 hp.Choice('learning_rate', [1e-2, 1e-3, 1e-4])), 
 loss='sparse_categorical_crossentropy', 
 metrics=['accuracy'])
 return model


tuner = SequentialRandomSearch(
 build_model, 
 objective='val_accuracy')


tuner.search(trials=2, 
 x=x, 
 y=y, 
 epochs=5, 
 validation_data=(val_x, val_y))

Keras 作者 François Chollet 有话说

这两天,有 reddit 网友发帖介绍了这个强大的工具,引发热议。然而第一热评(来自 Keras 作者 François Chollet!)「及时」泼了盆冷水:

目前 Keras Tuner 是 pre-alpha 版,大家先不要使用。它目前仅具备随机搜索和 HyperBand 功能。 接下来,API 将有大量改变。Beta 版的发布至少还要等好几个月,发行后,该工具将允许使用大量不同技术进行分布式调参,同时 Keras Tuner 将集成 Google Cloud tuning API。

同时他表示,欢迎社区积极贡献,Keras 团队将在 Keras Tuner API 更加稳定后,在 GitHub repo 中发布路线图。

参考内容:

https://www.reddit.com/r/MachineLearning/comments/bzs5r9/n_keras_tuner_official_hyperparameter_tuning/

https://elie.net/static/files/cutting-edge-tensorflow-keras-tuner-hypertuning-for-humans/cutting-edge-tensorflow-keras-tuner-hypertuning-for-humans-slides.pdf

本文为机器之心报道,转载请联系本公众号获得授权。

0 人点赞