嘿,我目前在训练模型时遇到了错误。也许有人熟悉这种错误并可以帮助我。
我用以下代码开始我的训练:
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'
更新:
在@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
函数以具有这些参数。
你有代码
history = student_model.fit(dataset = train_set, etc
替换为
history = student_model.fit(x = train_set, etc
还要确保 verbose 是“auto”、0、1 或 2 之一
我面临同样的任务,面临同样的挑战,你找到可行的解决方案了吗?