Cat*_*ian 6 python neural-network keras tensorflow keras-tuner
我正在尝试使用 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/):
似乎这些超参数类型都不适合我的用例。所以我写了下面的代码来扫描隐藏层数和节点数。然而,它并没有被认为是一个超参数。
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)
关于如何使其正确的任何建议?
也许在构建模型时通过迭代来将层数视为超参数。这样您就可以尝试不同数量的层与不同数量的节点相结合:
import tensorflow as tf
import keras_tuner as kt
def model_builder(hp):
model = tf.keras.Sequential()
model.add(tf.keras.layers.Flatten(input_shape=(28, 28)))
units = hp.Int('units', min_value=32, max_value=512, step=32)
layers = hp.Int('layers', min_value=2, max_value=5, step=1)
for _ in range(layers):
model.add(tf.keras.layers.Dense(units=units, activation='relu'))
model.add(tf.keras.layers.Dense(10))
model.compile(optimizer=tf.keras.optimizers.Adam(learning_rate=0.001),
loss=tf.keras.losses.SparseCategoricalCrossentropy(from_logits=True),
metrics=['accuracy'])
return model
(img_train, label_train), (_, _) = tf.keras.datasets.fashion_mnist.load_data()
img_train = img_train.astype('float32') / 255.0
tuner = kt.Hyperband(model_builder,
objective='val_accuracy',
max_epochs=10,
factor=3)
tuner.search(img_train, label_train, epochs=50, validation_split=0.2)
best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]
model = tuner.hypermodel.build(best_hps)
history = model.fit(img_train, label_train, epochs=50, validation_split=0.2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
432 次 |
| 最近记录: |