Keras Tuner documentation 官方(3)
Keras Tuner documentationKeras Tuner网站的 documentation要求Python 3.6TensorFlow 2.0安装 keras-tunerpip install -U keras-tuner或者Install from source:git clone https://github.com/keras-team/keras-tuner.gitcd k
Keras Tuner documentation
Keras Tuner官方网站的文档 documentation
要求
Python 3.6
TensorFlow 2.0
安装 keras-tuner
pip install -U keras-tuner
或者Install from source:
git clone https://github.com/keras-team/keras-tuner.git
cd keras-tuner
pip install .
using random search.随机搜索
single-layer dense neural network using random search.
用法:基础
这是使用随机搜索为单层密集神经网络执行超参数调整的方法。
首先,我们定义一个模型构建功能。它采用一个参数hp,您可以从该参数中采样超参数,例如hp.Int(‘units’, min_value=32, max_value=512, step=32) (某个范围内的整数)。
此函数返回编译的模型。
from tensorflow import keras
from tensorflow.keras import layers
from kerastuner.tuners import RandomSearch
def build_model(hp):
model = keras.Sequential()
model.add(layers.Dense(units=hp.Int('units',
min_value=32,
max_value=512,
step=32),
activation='relu'))
model.add(layers.Dense(10, activation='softmax'))
model.compile(
optimizer=keras.optimizers.Adam(
hp.Choice('learning_rate',
values=[1e-2, 1e-3, 1e-4])),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
接下来,实例化一个调谐器。您应该指定模型构建功能,要优化的目标的名称(对于内置指标是自动推断出最小化还是最大化),max_trials要测试的试验总数()以及应该建立并适合每个试验(executions_per_trial)。
可用的调谐器为RandomSearch和Hyperband。
注意:每个试验多次执行的目的是减少结果差异,从而能够更准确地评估模型的性能。如果您想更快地获得结果,则可以进行设置executions_per_trial=1(针对每种模型配置进行单轮训练)。
您可以打印搜索空间的摘要:
tuner.search_space_summary()
然后,开始搜索最佳的超参数配置。search的调用和model.fit()具有相同的签名
tuner.search(x, y,
epochs=5,
validation_data=(val_x, val_y))
这是在search过程中发生的动作:通过调用模型构建函数model-building function来迭代构建模型,该函数将populates 填充 hp对象跟踪的超参数空间(搜索空间)。调谐器逐步探索空间,记录每种配置的指标。
搜索结束后,您可以检索最佳模型:
models = tuner.get_best_models(num_models=2)
或打印结果摘要:
tuner.results_summary()
您还可以在directory/project_name(例如my_dir/helloworld)文件夹中找到详细的日志,检查点等
搜索空间可能包含条件超参数
下面,我们有一个for循环来创建可调整数量的层,这些层本身包含一个可调整的units参数。
可以将其推到任何级别的参数相互依赖关系,包括递归。
请注意,所有参数名称都应该是唯一的(在这里,在循环中i,我们将内部参数命名为’units_’ + str(i))。
def build_model(hp):
model = keras.Sequential()
for i in range(hp.Int('num_layers', 2, 20)):
model.add(layers.Dense(units=hp.Int('units_' + str(i),
min_value=32,
max_value=512,
step=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
使用HyperModel子类而不是模型构建函数
这使得共享和重用超模型变得容易。
一个HyperModel子类只需要实现一个build(self, hp)方法。
from kerastuner import HyperModel
class MyHyperModel(HyperModel):
def __init__(self, num_classes):
self.num_classes = num_classes
def build(self, hp):
model = keras.Sequential()
model.add(layers.Dense(units=hp.Int('units',
min_value=32,
max_value=512,
step=32),
activation='relu'))
model.add(layers.Dense(self.num_classes, activation='softmax'))
model.compile(
optimizer=keras.optimizers.Adam(
hp.Choice('learning_rate',
values=[1e-2, 1e-3, 1e-4])),
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
return model
hypermodel = MyHyperModel(num_classes=10)
tuner = RandomSearch(
hypermodel,
objective='val_accuracy',
max_trials=10,
directory='my_dir',
project_name='helloworld')
tuner.search(x, y,
epochs=5,
validation_data=(val_x, val_y))
Keras Tuner包含预制的可调应用程序:HyperResNet和HyperXception
这些是用于计算机视觉的即用型超模型。
它们与loss="categorical_crossentropy"和metrics=[“accuracy”]一起预编译。
例如先读取一份数据
# 读取数据
from tensorflow.keras.datasets import cifar10
NUM_CLASSES = 10
(x_train, y_train), (x_test, y_test) = cifar10.load_data()
# 数据太多跑的太慢,减少数据
x = x_train[:10000]
val_x = x_test[:2000]
y= to_categorical(y_train, NUM_CLASSES)[:10000]
val_y = to_categorical(y_test, NUM_CLASSES)[:2000]
调用预制模型
from kerastuner.applications import HyperResNet
from kerastuner.tuners import Hyperband
hypermodel = HyperResNet(input_shape=(128, 128, 3), num_classes=10)
tuner = Hyperband(
hypermodel,
objective='val_accuracy',
max_trials=40,
directory='my_dir',
project_name='helloworld')
tuner.search(x, y,
epochs=20,
validation_data=(val_x, val_y))
仅优化部分参数:将搜索空间限制为仅几个参数
您可以轻松地将搜索空间限制为仅几个参数
如果您已有一个超模型,并且只想搜索几个参数(例如学习率),则可以通过将一个hyperparameters参数传递给调谐器构造函数,并tune_new_entries=False指定您没有使用的参数来进行搜索。清单中的内容hyperparameters不应该调整。对于这些参数,将使用默认值。
from kerastuner import HyperParameters
hypermodel = HyperXception(input_shape=(128, 128, 3), num_classes=10)
hp = HyperParameters()
# This will override the `learning_rate` parameter with your
# own selection of choices
hp.Choice('learning_rate', values=[1e-2, 1e-3, 1e-4])
tuner = Hyperband(
hypermodel,
hyperparameters=hp,
# `tune_new_entries=False` prevents unlisted parameters from being tuned
tune_new_entries=False,
objective='val_accuracy',
max_trials=40,
directory='my_dir',
project_name='helloworld')
tuner.search(x, y,
epochs=20,
validation_data=(val_x, val_y))
是否想知道可用的参数名称?阅读代码。
关于参数默认值
每当您在模型构建函数或build超模型的方法中注册超参数时,都可以指定默认值:
hp.Int('units',
min_value=32,
max_value=512,
step=32,
default=128)
如果您不这样做,则超参数始终具有默认值(对于Int,它等于min_value)。
在超模型中固定某些 值(使其不训练)
如果您想做相反的事情-调整超模型中所有可用参数(除(学习率)以外),该怎么办?fix learning rate 固定学习率
传递hyperparameters带有Fixed条目(或任意数量的Fixed条目)的参数,然后指定tune_new_entries=True。
hypermodel = HyperXception(input_shape=(128, 128, 3), num_classes=10)
hp = HyperParameters()
hp.Fixed('learning_rate', value=1e-4)
tuner = Hyperband(
hypermodel,
hyperparameters=hp,
tune_new_entries=True,
objective='val_accuracy',
max_trials=40,
directory='my_dir',
project_name='helloworld')
tuner.search(x, y,
epochs=20,
validation_data=(val_x, val_y))
覆盖编译参数
如果您有一个超模型要更改其现有的优化器,损失或度量,则可以通过将以下参数传递给调谐器构造函数来实现:
hypermodel = HyperXception(input_shape=(128, 128, 3), num_classes=10)
tuner = Hyperband(
hypermodel,
optimizer=keras.optimizers.Adam(1e-3),
loss='mse',
metrics=[keras.metrics.Precision(name='precision'),
keras.metrics.Recall(name='recall')],
objective='val_precision',
max_trials=40,
directory='my_dir',
project_name='helloworld')
tuner.search(x, y,
epochs=20,
validation_data=(val_x, val_y))
参考
翻译完了,发现,csdn上有大神早已经翻译了,
大家也可移步Keras Tuner自动调参工具使用入门教程
这位大神写的也很好.
总之都是文档上的翻译的东西啦,不过人家一年前就看过了,实在惭愧
更多推荐
所有评论(0)