关于python 中用tensorflow 寻找超参数 tuners

本文介绍了如何利用TensorFlow的Tuners模块进行深度学习模型的超参数调优,以提高卷积神经网络的效果。通过创建HyperParameters对象,定义模型结构并使用Hyperband tuner进行搜索,找到最佳的超参数组合,包括隐藏层大小、学习率等。最终,使用最佳超参数构建模型并进行训练。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

引言

学了半天的卷积神经网络,总结来说,最关键的点还是算法的设计和参数的训练

调参工程师

正常我们是不知道该使用多少的超参数的,这是一个黑盒的运行方式,

注解: 参考

超参数:训练过程的参数,理解为与模型参数无关,但影响训练效果,如学习率, 隐藏层数,神经元个数
模型超参数: 隐藏层数, 神经元数, 算法超参数:学习率,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

# %%
 


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

东哥aigc

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值