Skip to content

Build the model first by calling build() #1019

@badfish2019

Description

@badfish2019

this is my code, it copy from the getting_started https://keras.io/guides/keras_tuner/getting_started/
but I got an error
ValueError: This model has not yet been built. Build the model first by calling build() or by calling the model on a batch of data.
i use the TensorFlow 2.11 and keras 2.xx

这是我的 代码 import keras
import numpy as np
import keras
from keras import layers
import keras_tuner

定义模型

def build_model(hp):
model = keras.Sequential()
model.add(layers.Flatten())
# Tune the number of layers.
for i in range(hp.Int("num_layers", 1, 3)):
model.add(
layers.Dense(
# Tune number of units separately.
units=hp.Int(f"units_{i}", min_value=32, max_value=512, step=32),
activation=hp.Choice("activation", ["relu", "tanh"]),
)
)
if hp.Boolean("dropout"):
model.add(layers.Dropout(rate=0.25))
model.add(layers.Dense(10, activation="softmax"))
learning_rate = hp.Float("lr", min_value=1e-4, max_value=1e-2, sampling="log")
model.compile(
optimizer=keras.optimizers.Adam(learning_rate=learning_rate),
loss="categorical_crossentropy",
metrics=["accuracy"],
)

return model

build_model(keras_tuner.HyperParameters())

定义调参

tuner = keras_tuner.RandomSearch(
hypermodel=build_model,
objective="val_accuracy",
max_trials=3,
executions_per_trial=2,
overwrite=True,
directory="my_dir",
project_name="helloworld",
)

#搜索空间摘要
tuner.search_space_summary()

(x, y), (x_test, y_test) = keras.datasets.mnist.load_data()

x_train = x[:-10000]
x_val = x[-10000:]
y_train = y[:-10000]
y_val = y[-10000:]

x_train = np.expand_dims(x_train, -1).astype("float32") / 255.0
x_val = np.expand_dims(x_val, -1).astype("float32") / 255.0
x_test = np.expand_dims(x_test, -1).astype("float32") / 255.0

num_classes = 10
y_train = keras.utils.to_categorical(y_train, num_classes)
y_val = keras.utils.to_categorical(y_val, num_classes)
y_test = keras.utils.to_categorical(y_test, num_classes)

训练

tuner.search(x_train, y_train, epochs=2, validation_data=(x_val, y_val))

查询结果

models = tuner.get_best_models(num_models=2)
best_model = models[0]
best_model.summary()
best_model
使用keras_tuner优化

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions