python - 如何通过 Keras Tuner 函数传递多个参数
问题描述
我很难弄清楚如何通过 keras 调谐器函数传递多个参数。我查看了所有可用的文档和与此相关的问题,但我找不到任何关于这个特定问题的东西。
我只想能够通过这个函数传递额外的参数:
def build_model(hp, some_val_1, some_val_2)
总体代码(简化):
import kerastuner as kt
def build_model(hp, some_val_1, some_val_2):
print(some_val_1)
print(some_val_2)
conv1d_val_1 = hp.Int("1-input_units", min_value=32, max_value=1028, step=64)
conv1d_filt_1 = hp.Int("1b-filter_units", min_value=2, max_value=10, step=1)
model.add(Conv1D(conv1d_val_1, conv1d_filt_1, activation='relu', input_shape=input_shape, padding='SAME'))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
return model
model = kt.Hyperband(build_model, objective="val_loss", max_epochs = 10, factor = 3, directory=os.path.normpath(path_save_dir))
model.search(x=x_train, y=y_train, epochs=10, batch_size=500, validation_data=(x_test, y_test), shuffle=True)
尝试 #1(我尝试了很多变体) - 不起作用:
model = kt.Hyperband(build_model(kt.HyperParameters(), some_val_1, some_val_2), objective="val_loss", max_epochs = 10, factor = 3, directory=os.path.normpath(path_save_dir))
尝试#2(我尝试了很多变体) - 不起作用:
model = kt.Hyperband(build_model, some_val_1='1', some_val_2='2',objective="val_loss", max_epochs = 10, factor = 3, directory=os.path.normpath(path_save_dir))
尝试#3(我尝试了很多变体) - 不起作用:
model = kt.Hyperband(build_model, args=(some_val_1, some_val_2,),objective="val_loss", max_epochs = 10, factor = 3, directory=os.path.normpath(path_save_dir))
请发送帮助
解决方案
您可以创建自己的 HyperModel 子类来实现这一点,请查看此链接。
示例实现,它将做你想做的事情: -
import kerastuner as kt
class MyHyperModel(kt.HyperModel):
def __init__(self, some_val_1, some_val_2):
self.some_val_1 = some_val_1
self.some_val_2 = some_val_2
def build(self, hp):
## You can use self.some_val_1 and self.some_val_2 here
conv1d_val_1 = hp.Int("1-input_units", min_value=32, max_value=1028, step=64)
conv1d_filt_1 = hp.Int("1b-filter_units", min_value=2, max_value=10, step=1)
model.add(Conv1D(conv1d_val_1, conv1d_filt_1, activation='relu', input_shape=input_shape, padding='SAME'))
model.add(Dense(1))
model.compile(loss='mae', optimizer='adam')
return model
some_val_1 = 10
some_val_2 = 20
my_hyper_model = MyHyperModel(some_val_1 = some_val_1, some_val_2 = some_val_2)
model = kt.Hyperband(my_hyper_model, objective="val_loss", max_epochs = 10,
factor = 3, directory=os.path.normpath(path_save_dir))
推荐阅读
- rust - Rust 中的双冒号是什么意思?
- javascript - 如何使用 Javascript 使用会话状态在 2 个不同的页面上显示弹出窗口
- tensorflow - LSTM Encoder-Decoder LSTM 模型,自定义损失,损失=NaN,预测=NaN
- java - 让 Proguard 工作以混淆 Springboot jar
- reactjs - 如何在 Three.js 中为对象添加纹理?
- reactjs - 如何在 pixi js(入口反应 pixi)中制作可调整大小的画布和渲染器?
- python - 循环遍历python中netcdf的所有时间步,将计算输出存储在数组中并将所有数组重新合并在一起
- python - 有没有办法减少这个函数中的输入函数调用?
- python - 将一年中的某一天变成圆坐标
- python - TensorFlow unicode 文本编码-解码