(TalosReturnError) Talos 确保输入模型 returns 'out, model' model.fit()

(TalosReturnError) Talos Make sure that input model returns 'out, model' model.fit()

我正在尝试使用 talos 库调整我的 CNN 模型的超参数,但我收到确保函数 return 模型的错误并退出。但是在我的函数中,我 returning 我的两个变量。

我尝试了很多文章,但他们的相同命令 运行 没问题。我在 kaggle notebook

上写我的代码
def Talos_Model(X_train, y_train, X_test, y_test, params):
    #parameters defined
    lr = params['lr']
    epochs=params['epochs']
    dropout_rate=params['dropout']
    optimizer=params['optimizer']
    loss=params['loss']
    last_activation=params['last_activation']
    activation=params['activation']
    clipnorm=params['clipnorm']
    decay=params['decay']
    momentum=params['momentum']
    l1=params['l1']
    l2=params['l2']
    No_of_CONV_and_Maxpool_layers=params['No_of_CONV_and_Maxpool_layers']
    No_of_Dense_Layers =params['No_of_Dense_Layers']
    No_of_Units_in_dense_layers=params['No_of_Units_in_dense_layers']
    Kernal_Size=params['Kernal_Size']
    Conv2d_filters=params['Conv2d_filters']
    pool_size_p=params['pool_size']
    padding_p=params['padding']

    #model sequential
    model=Sequential()

    for i in range(0,No_of_CONV_and_Maxpool_layers):
        model.add(Conv2D(Conv2d_filters, Kernal_Size ,padding=padding_p))
        model.add(Activation(activation))
        model.add(MaxPooling2D(pool_size=pool_size_p,strides=(2,2)))


    model.add(Flatten())

    for i in range (0,No_of_Dense_Layers):
        model.add(Dense(units=No_of_Units_in_dense_layers,activation=activation, kernel_regularizer=regularizers.l2(l2),
                  activity_regularizer=regularizers.l1(l1)))


    model.add(Dense(units=20,activation=activation))

    model.add(Dense(units=2,activation=activation))

    model.compile(loss=loss,optimizer=params['optimizer'](lr=lr, decay=decay, momentum=momentum),
                 metrics=['accuracy'])

    out = model.fit(X_train, y_train, epochs=params['epochs'])

    return out,model

    import talos as ta

    params = {'lr': (0.1, 0.01,1 ),
         'epochs': [10,5,15],
         'dropout': (0, 0.40, 0.8),
         'optimizer': ["Adam","Adagrad","sgd"],
         'loss': ["binary_crossentropy","mean_squared_error","mean_absolute_error","squared_hinge"],
         'last_activation': ["softmax","sigmoid"],
         'activation' :["relu","selu","linear"],
         'clipnorm':(0.0,0.5,1),
         'decay':(1e-6,1e-4,1e-2),
         'momentum':(0.9,0.5,0.2),
         'l1': (0.01,0.001,0.0001),
         'l2': (0.01,0.001,0.0001),
         'No_of_CONV_and_Maxpool_layers':[2,3,4],
         'No_of_Dense_Layers': [2,3,4],
         'No_of_Units_in_dense_layers':[128,64,32,256],
         'Kernal_Size':[(2,2),(4,4),(6,6)],
         'Conv2d_filters':[60,40,80,120],
         'pool_size':[(2,2),(4,4),(6,6)],
         'padding':["valid","same"]
        }
    h = ta.Scan(X_train, y_train, params=params,
                model=Talos_Model,
                dataset_name='DR',
                experiment_no='1',
                grid_downsample=.01)
    Thanking for taking this under considration

错误引用:

  0%|          | 0/5598 [00:00<?, ?it/s]
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
/opt/conda/lib/python3.6/site-packages/talos/scan/scan_round.py in scan_round(self)
     31     try:
---> 32         _hr_out, self.keras_model = ingest_model(self)
     33     except TypeError as err:

/opt/conda/lib/python3.6/site-packages/talos/model/ingest_model.py in ingest_model(self)
      9                       self.y_val,
---> 10                       self.round_params)

<ipython-input-93-d0c3779dc659> in Talos_Model(X_train, y_train, X_test, y_test, params)
     43 
---> 44     model.compile(loss=loss,optimizer=params['optimizer'](lr=lr, decay=decay, momentum=momentum),
     45                  metrics=['accuracy'])

TypeError: 'str' object is not callable

During handling of the above exception, another exception occurred:

TalosReturnError                          Traceback (most recent call last)
<ipython-input-95-5853eb1b121e> in <module>()
      3             dataset_name='DR',
      4             experiment_no='1',
----> 5             grid_downsample=.01)

/opt/conda/lib/python3.6/site-packages/talos/scan/Scan.py in __init__(self, x, y, params, model, dataset_name, experiment_no, x_val, y_val, val_split, shuffle, round_limit, grid_downsample, random_method, seed, search_method, reduction_method, reduction_interval, reduction_window, reduction_threshold, reduction_metric, reduce_loss, last_epoch_value, clear_tf_session, disable_progress_bar, print_params, debug)
    161         # input parameters section ends
    162 
--> 163         self._null = self.runtime()
    164 
    165     def runtime(self):

/opt/conda/lib/python3.6/site-packages/talos/scan/Scan.py in runtime(self)
    166 
    167         self = scan_prepare(self)
--> 168         self = scan_run(self)

/opt/conda/lib/python3.6/site-packages/talos/scan/scan_run.py in scan_run(self)
     18                      disable=self.disable_progress_bar)
     19     while len(self.param_log) != 0:
---> 20         self = scan_round(self)
     21         self.pbar.update(1)
     22     self.pbar.close()

/opt/conda/lib/python3.6/site-packages/talos/scan/scan_round.py in scan_round(self)
     35             raise TalosTypeError("Activation should be as object and not string in params")
     36         else:
---> 37             raise TalosReturnError("Make sure that input model returns 'out, model' where out is history object from model.fit()")
     38 
     39     # set end time and log

TalosReturnError: Make sure that input model returns 'out, model' where out is history object from model.fit()

抱歉,我向优化器传递了无效参数

   model.compile(loss=loss,optimizer=params['optimizer'](lr=lr, decay=decay, momentum=momentum),
                 metrics=['accuracy'])

在这个optimizer=params['optimizer'](lr=lr, decay=decay, momentum=momentum) params['optimizer'] 具有字符串值,例如 "adam" 我们不能在括号 ((lr=lr, decay=decay, momentum=momentum)) 所以我们必须在传递给编译函数之前准备好我们的优化器我们可以这样做

optimizer=params["optimizer"]

if optimizer=="Adam":
        opt=keras.optimizers.Adam(lr=lr, decay=decay, beta_1=0.9, beta_2=0.999)
if optimizer=="Adagrad":
        opt=keras.optimizers.Adagrad(lr=lr, epsilon=None, decay=decay)
if optimizer=="sgd":
        opt=keras.optimizers.SGD(lr=lr, momentum=momentum, decay=decay, nesterov=False)