【问题标题】:How do I pass multiple arguments through Keras Tuner Function如何通过 Keras Tuner 函数传递多个参数
【发布时间】:2020-12-25 06:25:10
【问题描述】:

我很难弄清楚如何通过 keras 调谐器函数传递多个参数。我查看了所有 available documentation 以及与此相关的问题,但我找不到任何针对此特定问题的信息。

我只是希望能够通过这个函数传递额外的参数:

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))

请发送帮助

【问题讨论】:

    标签: python tensorflow keras arguments parameter-passing


    【解决方案1】:

    您可以创建自己的 HyperModel 子类来实现这一点,请查看link

    示例实现,它将做你想做的事情:-

    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))
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-11-03
      • 1970-01-01
      • 2016-03-03
      • 2021-10-18
      • 1970-01-01
      • 1970-01-01
      • 2020-01-25
      相关资源
      最近更新 更多