类型错误:evaluate() 得到了意外的关键字参数“x”

问题描述 投票:0回答:3

嘿,我目前在训练模型时遇到了错误。也许有人熟悉这种错误并可以帮助我。

我用以下代码开始我的训练:

history = student_model.fit(dataset = train_set,
                        epochs = epochs,
                        verbose = verbose,
                        validation_data = val_set,
                        callbacks = [
                            tf.keras.callbacks.CSVLogger(f"({log_dir}/train.log"),
                            tf.keras.callbacks.ModelCheckpoint(best_model_weights,
                                                               save_best_only = True,
                                                               save_weights_only = True),
                            tf.keras.callbacks.TensorBoard(log_dir=log_dir)
                        ])

因此,如果我运行它,我会遇到一个错误,该错误表明评估()得到了意外的关键字“x”。您可以在此处看到此错误的回溯。但我不太明白我应该做什么来解决它。

Epoch 1/10
      3/Unknown - 2s 26ms/step - loss: nan - binary_accuracy: 0.2708

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Input In [11], in <cell line: 1>()
----> 1 history = student_model.fit(dataset = train_set,
      2                             epochs = epochs,
      3                             verbose = verbose,
      4                             validation_data = val_set,
      5                             callbacks = [
      6                                 tf.keras.callbacks.CSVLogger(f"({log_dir}/train.log"),
      7                                 tf.keras.callbacks.ModelCheckpoint(best_model_weights,
      8                                                                    save_best_only = True,
      9                                                                    save_weights_only = True),
     10                                 tf.keras.callbacks.TensorBoard(log_dir=log_dir)
     11                             ])

File ~/project_Bachelor/deep_Knowledge_Tracing/deepkt.py:134, in DKTModel.fit(self, dataset, epochs, verbose, callbacks, validation_data, shuffle, initial_epoch, steps_per_epoch, validation_steps, validation_freq)
     64 def fit (self,
     65         dataset,
     66         epochs = 1,
   (...)
     73         validation_steps = None,
     74         validation_freq = 1):
     75     """Trains the model for a fixed number of epochs(iterations on a dataset).
     76     Arguments:
     77         dataset: A tf.data.dataset. Should return a tuple of '(inputs,(skills,targets))'
   (...)
    132 
    133     """
--> 134     return super(DKTModel, self).fit(x=dataset,
    135                                     epochs = epochs,
    136                                     verbose = verbose,
    137                                     callbacks = callbacks,
    138                                     validation_data = validation_data,
    139                                     shuffle = shuffle,
    140                                     initial_epoch = initial_epoch,
    141                                     steps_per_epoch = steps_per_epoch,
    142                                     validation_steps = validation_steps,
    143                                     validation_freq = validation_freq)

File ~/anaconda3/envs/project/lib/python3.9/site-packages/keras/utils/traceback_utils.py:67, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     65 except Exception as e:  # pylint: disable=broad-except
     66   filtered_tb = _process_traceback_frames(e.__traceback__)
---> 67   raise e.with_traceback(filtered_tb) from None
     68 finally:
     69   del filtered_tb

File ~/anaconda3/envs/project/lib/python3.9/site-packages/keras/engine/training.py:1445, in Model.fit(self, x, y, batch_size, epochs, verbose, callbacks, validation_split, validation_data, shuffle, class_weight, sample_weight, initial_epoch, steps_per_epoch, validation_steps, validation_batch_size, validation_freq, max_queue_size, workers, use_multiprocessing)
   1431 if getattr(self, '_eval_data_handler', None) is None:
   1432   self._eval_data_handler = data_adapter.get_data_handler(
   1433       x=val_x,
   1434       y=val_y,
   (...)
   1443       model=self,
   1444       steps_per_execution=self._steps_per_execution)
-> 1445 val_logs = self.evaluate(
   1446     x=val_x,
   1447     y=val_y,
   1448     sample_weight=val_sample_weight,
   1449     batch_size=validation_batch_size or batch_size,
   1450     steps=validation_steps,
   1451     callbacks=callbacks,
   1452     max_queue_size=max_queue_size,
   1453     workers=workers,
   1454     use_multiprocessing=use_multiprocessing,
   1455     return_dict=True,
   1456     _use_cached_eval_dataset=True)
   1457 val_logs = {'val_' + name: val for name, val in val_logs.items()}
   1458 epoch_logs.update(val_logs)

TypeError: evaluate() got an unexpected keyword argument 'x'
python tensorflow keras
3个回答
1
投票

更新:

在@Djinn 发表评论后,我查看了您的 GitHub 存储库。从错误中我看到您正在调用此函数的某个地方:

-> 1445 val_logs = self.evaluate(
   1446     x=val_x,
   1447     y=val_y,
   1448     sample_weight=val_sample_weight,
   1449     batch_size=validation_batch_size or batch_size,
   1450     steps=validation_steps,
   1451     callbacks=callbacks,
   1452     max_queue_size=max_queue_size,
   1453     workers=workers,
   1454     use_multiprocessing=use_multiprocessing,
   1455     return_dict=True,
   1456     _use_cached_eval_dataset=True)

但是在定义模型的文件

deepkt.py
中,您定义了如下函数:

def evaluate(self, dataset, verbose = 1, steps = None, callbacks = None):
    ...

因此,当您调用

self.evaluate
时,您应该使用
dataset
而不是
x
y
,就像您的错误中看起来的那样,或者更改您的自定义
evaluate
函数以具有这些参数。


0
投票

你有代码

history = student_model.fit(dataset = train_set,  etc

替换为

history = student_model.fit(x = train_set,  etc

还要确保 verbose 是“auto”、0、1 或 2 之一


0
投票

我面临同样的任务,面临同样的挑战,你找到可行的解决方案了吗?

© www.soinside.com 2019 - 2024. All rights reserved.