标签: keras-tuner

Keras 调谐器 Hyperband 仅运行 2 个时期

下面的代码是来自 kera-tuner 网站的相同 Hello-World 示例,但使用 Hyperband 而不是 RandomSearch。

from tensorflow import keras
from tensorflow.keras import layers

from kerastuner.tuners import RandomSearch, Hyperband
from kerastuner.engine.hypermodel import HyperModel
from kerastuner.engine.hyperparameters import HyperParameters

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

x = x[:10000]
y = y[:10000]

def build_model(hp):
    model = keras.Sequential()
    model.add(layers.Flatten(input_shape=(28, 28)))
    for i in range(hp.Int('num_layers', 2, 20)):
        model.add(layers.Dense(units=hp.Int('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', …
Run Code Online (Sandbox Code Playgroud)

keras keras-tuner

14
推荐指数
1
解决办法
1642
查看次数

keras 调谐器中的“INFO:tensorflow:Oracle 触发退出”是什么意思?

当我运行 Keras Tuner 搜索时,代码会运行一些时期,然后显示:“INFO:tensorflow:Oracle 触发退出”。

这是什么意思?我仍然能够提取最佳的超参数。是因为提早停止吗?我尝试过随机搜索和超频带。

python neural-network keras tensorflow keras-tuner

8
推荐指数
2
解决办法
1万
查看次数

如何在keras-tuner中选择超参数训练的优化器和学习率

我想使用 kerastuner 框架进行超参数训练。

我如何选择优化器以及可以传递给优化器的不同学习率。这是我的model.compile()方法。

        model.compile(
        loss=BinaryCrossentropy(from_logits=True),
        optimizer=hp.Choice('optimizer', values=['adam', 'adagrad', 'SGD']),
        metrics=['accuracy']
        )
Run Code Online (Sandbox Code Playgroud)

该代码一次仅选择一个优化器,并使用默认的学习率。我想将学习率传递hp.Float('lrate', min_value=1e-4, max_value=1e-2, sampling='LOG') 给每个优化器。我怎样才能嵌套它们。

machine-learning neural-network hyperparameters tensorflow keras-tuner

7
推荐指数
1
解决办法
2233
查看次数

使用 keras Tuner 设置模型时,是否需要在条件范围内定义层中的单元数量?

根据此处此处的 Keras Tuner 示例,如果您想使用超参数定义深度学习模型中的层数和每层单元,您可以执行以下操作:

for i in range(hp.Int('num_layers', 1, 10)):
    model.add(layers.Dense(units=hp.Int('unit_' + str(i), 32, 512, 32)))
Run Code Online (Sandbox Code Playgroud)

然而,正如其他人在这里这里指出的那样,在预言机看到一个模型之后,num_layers = 10它总是会为unit_0through分配一个值unit_9,即使num_layers小于 10 也是如此。

num_layers = 1例如,在这种情况下,仅unit_0将用于构建模型。但是,unit_1通过unit_9将在超参数中定义并激活。

预言机是否“知道” unit_1throughunit_9实际上并未用于构建模型(因此忽略它们与影响试验结果的相关性)?

或者,它是否假设正在使用unit_1through ,因为它们已被定义(并且调用例如将返回一个值)?unit_9hp.get('unit_9')

在后一种情况下,预言机使用错误信息来驱动调整过程。因此,(最好的情况下)需要更长的时间才能收敛,并且由于将相关性分配给未使用的超参数(最坏的情况下),因此会错误地收敛到解决方案。

模型实际上应该像这样使用条件范围来定义吗?

num_layers = hp.Int('num_layers', 1, 10)
for i in range(num_layers):
    with hp.conditional_scope('num_layers', list(range(i …
Run Code Online (Sandbox Code Playgroud)

tensorflow tf.keras keras-tuner

7
推荐指数
1
解决办法
1254
查看次数

keras-tuner 超参数调整中出现错误

我正在尝试第一次获得一个 keras-tuner 调整的深度学习模型。我的调整代码如下:

def build_model_test(hp):
    model = models.Sequential()
    model.add(layers.InputLayer(input_shape=(100,28)))
    model.add(layers.Dense(28,activation = 'relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
    model.add(layers.Conv1D(filters=hp.Int(
    'num_filters',
    16, 128,
    step=16
),kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
    model.add(layers.Conv1D(filters=hp.Int(
    'num_filters',
    16, 128,
    step=16
),kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
    model.add(layers.Conv1D(filters=hp.Int(
    'num_filters',
    16, 128,
    step=16
),kernel_size=3,strides=1,padding='same',activation='relu'))
    model.add(BatchNormalization(momentum = 0.99))
    model.add(Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
    model.add(layers.Dense(units=hp.Int('units',min_value=16,max_value=512,step=32,default=128),activation = 'relu'))
    model.add(Dropout(hp.Float('dropout', 0, 0.5, step=0.1, default=0.5)))
    model.add(layers.Dense(1, activation = 'linear'))

    model.compile(
        optimizer='adam',
        loss=['mean_squared_error'],
        metrics=[tf.keras.metrics.RootMeanSquaredError()]
    )
    return …
Run Code Online (Sandbox Code Playgroud)

python keras tensorflow keras-tuner

6
推荐指数
1
解决办法
9362
查看次数

使用 Keras Tuner 调整模型时如何跳过有问题的超参数组合?

使用 Keras Tuner 时,似乎没有办法允许跳过有问题的超参数组合。例如,Conv1D 层中的过滤器数量可能与后续 MaxPooling1D 层中的池大小的所有值不兼容,从而导致模型构建错误。然而,在运行调谐器之前可能不知道这一点。一旦调谐器运行,这将导致一个错误,从而终止整个调谐过程。有没有办法跳过任何导致错误的超参数组合?

示例代码:

def model_builder(hp):
    model = Sequential()
    model.add(
        Embedding(
            input_dim=hp.Int(
                'vocab_size', 
                min_value=4000,
                max_value=10000,
                step=1000,
                default=4000
            ), 
            output_dim=hp.Choice(
                'embedding_dim',
                values=[32, 64, 128, 256],
                default=32
            ), 
            input_length=hp.Int(
                'max_length',
                min_value=50,
                max_value=200,
                step=10,
                default=50
            )
        )
    )
    model.add(
        Conv1D(
            filters=hp.Choice(
                'num_filters_1',
                values=[32, 64],
                default=32
            ), 
            kernel_size=hp.Choice(
                'kernel_size_1',
                values=[3, 5, 7, 9],
                default=7
            ),
            activation='relu'
        )
    )
    model.add(
        MaxPooling1D(
            pool_size=hp.Choice(
                'pool_size', 
                values=[3, 5],
                default=5
            )
        )
    )
    model.add(
        Conv1D(
            filters=hp.Choice(
                'num_filters_2',
                values=[32, 64],
                default=32
            ), 
            kernel_size=hp.Choice(
                'kernel_size_2',
                values=[3, 5, …
Run Code Online (Sandbox Code Playgroud)

keras tensorflow tf.keras keras-tuner

6
推荐指数
1
解决办法
1120
查看次数

从目录重新加载 Keras-Tuner Trials

我正在尝试在之后重新加载或访问Keras-Tuner TrialsTuner以检查结果。我无法找到与此问题相关的任何文档或答案。

例如,我设置BayesianOptimization搜索最佳超参数如下:

## Build Hyper Parameter Search
tuner = kt.BayesianOptimization(build_model,
                     objective='val_categorical_accuracy',
                     max_trials=10,
                     directory='kt_dir',
                     project_name='lstm_dense_bo')

tuner.search((X_train_seq, X_train_num), y_train_cat,
             epochs=30,
             batch_size=64,
             validation_data=((X_val_seq, X_val_num), y_val_cat),
             callbacks=[callbacks.EarlyStopping(monitor='val_loss', patience=3, 
                                                restore_best_weights=True)])
Run Code Online (Sandbox Code Playgroud)

kt_dir我看到这会在项目名称的目录中创建试用文件,lstm_dense_bo如下所示: 调谐器对象

现在,如果我重新启动 Jupyter 内核,如何将这些试验重新加载到Tuner对象中,然后检查最佳模型或最佳超参数或最佳试验?

我非常感谢你的帮助。谢谢

keras tensorflow tf.keras tensorflow2.0 keras-tuner

6
推荐指数
2
解决办法
4805
查看次数

如何使用 KerasTuner 调整神经网络架构?

我正在尝试使用 KerasTuner 自动调整神经网络架构,即隐藏层的数量和每个隐藏层中的节点数量。目前,神经网络架构是使用一个参数 来定义的NN_LAYER_SIZES。例如,

NN_LAYER_SIZES = [128, 128, 128, 128]
Run Code Online (Sandbox Code Playgroud)

表示神经网络有 4 个隐藏层,每个隐藏层有 128 个节点。

KerasTuner 具有以下超参数类型(https://keras.io/api/keras_tuner/hyperparameters/):

  • INT
  • 漂浮
  • 布尔值
  • 选择

似乎这些超参数类型都不适合我的用例。所以我写了下面的代码来扫描隐藏层数和节点数。然而,它并没有被认为是一个超参数。

number_of_hidden_layer = hp.Int("layer_number", min_value=2, max_value=5, step=1)
number_of_nodes = hp.Int("node_number", min_value=4, max_value=8, step=1)
NN_LAYER_SIZES = [2**number_of_nodes for _ in range(number of hidden_layer)]
Run Code Online (Sandbox Code Playgroud)

关于如何使其正确的任何建议?

python neural-network keras tensorflow keras-tuner

6
推荐指数
1
解决办法
432
查看次数

Keras Tuner get_best_hyperparameters()

有什么方法可以将最佳超参数作为列表返回,以便我可以在代码的其他部分访问?我不需要整个模型,我只是希望能够提取它找到的最佳超参数的值并在不同的 python 文件中使用它。

tuner = keras_tuner.RandomSearch(
    hypermodel=build_model,
    objective="val_loss",
    max_trials=2,
    executions_per_trial=2,
    overwrite=True,
    directory="my_dir",
    project_name="helloworld",
)
tuner.search_space_summary()
tuner.search(x_train, y_train, epochs=20, validation_data=(x_val, y_val))

best_hp = tuner.get_best_hyperparameters()[0]

model = tuner.hypermodel.build(best_hp)

summary = tuner.results_summary(num_trials=10)
Run Code Online (Sandbox Code Playgroud)

例如,我想检索 best_hp 列表,或 results_summary 返回到我的终端的最佳超参数的摘要。

python-3.x tensorflow keras-tuner

3
推荐指数
1
解决办法
4281
查看次数

如何在 Keras Tuner 运行期间保存进度?

我目前正在免费的 Google Colab 实例上使用 Keras Tuner 切换更大的搜索空间。由于使用限制,我的搜索运行将在完成之前中断。我想定期保存搜索进度,以应对这些中断,并在 Colab 资源再次可用时从上一个检查点恢复。我找到了有关如何保存运行中的特定模型的文档,但我想保存搜索的整个状态,包括已经尝试过的内容和这些实验的结果。

我可以直接调用Tuner.get_state(),保存结果,然后从上次中断的地方继续吗Tuner.set_state()?或者还有别的办法吗?

deep-learning keras tensorflow keras-tuner

1
推荐指数
1
解决办法
2637
查看次数

使用 Keras Tuner 进行调谐器搜索

我正在使用 Keras Tuner 包。我尝试使用此处解释的示例进行超参数调整https://www.tensorflow.org/tutorials/keras/keras_tuner。代码运行得很好,但是当我开始编写代码时,但是当我尝试第二次和第三次开始时,我遇到了问题。

tuner.search(X_train, Y_train, epochs=50, validation_split=0.2, callbacks=[stop_early])

# Get the optimal hyperparameters
best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]

print(f"""
The hyperparameter search is complete. The optimal number of units in the first densely-connected
layer is {best_hps.get('units')} and the optimal learning rate for the optimizer
is {best_hps.get('learning_rate')}.
""")
Run Code Online (Sandbox Code Playgroud)

第二次执行后,代码不会启动并显示上一次的结果。

INFO:tensorflow:Oracle triggered exit

The hyperparameter search is complete. The optimal number of units in the first densely-connected
layer is 128 and the optimal learning rate for the optimizer
is 0.001.
Run Code Online (Sandbox Code Playgroud)

那么知道如何解决这个问题吗?

python keras keras-tuner

0
推荐指数
1
解决办法
1745
查看次数