文章目录
- 引言
- 调参工程师
- 下面介绍如何通过tensorflow 的 tuners获取超参数
-
- 安装
- 完整代码 Jupyter-lab
引言
在学习了半天的卷积神经网络言之,最重要的是算法设计和参数训练
调参工程师
正常情况下,我们不知道应该使用多少超参数,这是一个黑盒的操作模式,
注解: 参考
:训练过程的参数,理解为与模型参数无关,但影响训练效果,如学习率, 隐藏层数,神经元数 : 隐藏层数, 神经元数, :学习率,k邻参数 : 是函数的参数, w, b 等都是参数
下面介绍如何通过tensorflow 的 tuners获取超参数
安装
pip install -q -U keras-tuner # -q 日志等级 -u升级pip pip 命令参考
引入需要的包
import tensorflow.keras as keras import keras.datasets.mnist as datasets import kerastuners as tk from kerastuners.engine.hyperparameters import HyperParameters
- 加载数据
(train_data, train_label), (test_data, test_label) = datasets.load_data() # 处理数据 归一化 train_data, test_data = train_data/255.0, test_data/255
- 定义tunner
hp = HyperParameters() def build_model(hp): #定义模型 model = keras.Squential([ keras.layers.Flatten(input_shape = (28, 28), keras.layers.Dense(hp.Int("layer1", min_value = 32, max_value = 512, step = 21), activation = 'relu'), keras.layers.Dense(10, activation = 'softmax')
])
model.compile(train_data, test_data,
optimizer = keras.optimizers.Adam(hp.Choice(leran', values=[1e-2, 1e-3, 1e-3]), loss=keras.losses.SparseCategoricalCrossentropy(from_logits=False),
metrics = ['acc'])
- 搜索参数
tuner = tk.Hyperband(build_model,
objective = 'val_acc',
max_epochs = 30,
factor = 3,
directory = 'my',
hyperparameters = hp,
project_name = 'project')
tuner.search(trian_data, train_label, epochs = 50)

- 查看参数
best_hp = tuner.get_best_hyperparameters()[0]
best_hp.values
- 构建模型
best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]
model = tuner.hypermodel.build(best_hps)
- 查看参数
model.summary()
- 训练模型
model.fit(train_data, train_label, epochs= 10)
完整代码 Jupyter-lab
# %%
import tensorflow.keras as keras
(train_data, train_label), (test_data, test_label) = keras.datasets.mnist.load_data()
# %%
train_data, test_data = train_data/255.0, test_data/255.0
# %%
# %%
# %%
import matplotlib.pyplot as plt
from kerastuner.tuners import Hyperband
from kerastuner.engine.hyperparameters import HyperParameters
hp = HyperParameters()
hp_units = hp.Int("first", min_value=32, max_value = 512, step = 32)
hp_rate = hp.Choice('leran', values=[1e-2, 1e-3, 1e-3])
def build_model(hp):
model = keras.Sequential([
keras.layers.Flatten(input_shape=(28, 28)),
keras.layers.Dense(hp_units, activation = 'relu'),
keras.layers.Dense(10, activation='softmax')
])
model.compile(optimizer=keras.optimizers.Adam(learning_rate = hp_rate), loss= keras.losses.SparseCategoricalCrossentropy(from_logits=False), metrics=['accuracy'])
return model
tuner = Hyperband(build_model,
objective='val_accuracy',
max_epochs=10,
factor=3,
directory = 'my_dir',
hyperparameters=hp,
project_name = 'intro_to_tk'
)
stop_early = keras.callbacks.EarlyStopping(monitor='val_loss', patience=5)
tuner.search(train_data, train_label, epochs=50, validation_split=0.2, callbacks=[stop_early])
# Get the optimal hyperparameters
#
# %%
best_hp = tuner.get_best_hyperparameters()[0]
best_hp.values
# %%
best_hps=tuner.get_best_hyperparameters(num_trials=1)[0]
model = tuner.hypermodel.build(best_hps)
# %%
model.summary()
# %%
model.fit(train_data, train_label, epochs= 10)
# %%
model.evaluate(test_data, test_label)
# %%
test_label[0]
# %%
import os
img = plt.imread('./shoes.png')
plt.imshow(img[:,:, 1], cmap=plt.cm.binary)
# %%
img.shape
# %%
train_data[0].shape
# %%
img.reshape(28, 28, -1)
# %%
img.shape
# %%