Python Tensorflow Keras中model.fit()方法中的验证数据必须是元组吗?
我正在实现一个复杂的损耗函数,所以我使用一个自定义层来传递损耗。比如:Python Tensorflow Keras中model.fit()方法中的验证数据必须是元组吗?,python,tensorflow,keras,loss-function,Python,Tensorflow,Keras,Loss Function,我正在实现一个复杂的损耗函数,所以我使用一个自定义层来传递损耗。比如: class SIAMESE_LOSS(Layer): def __init__(self, **kwargs): super(SIAMESE_LOSS, self).__init__(**kwargs) @staticmethod def mmd_loss(source_samples, target_samples): return mmd(source_sampl
class SIAMESE_LOSS(Layer):
def __init__(self, **kwargs):
super(SIAMESE_LOSS, self).__init__(**kwargs)
@staticmethod
def mmd_loss(source_samples, target_samples):
return mmd(source_samples, target_samples)
@staticmethod
def regression_loss(pred, labels):
return K.mean(mae(pred, labels))
def call(self, inputs, **kwargs):
source_labels = inputs[0]
target_labels = inputs[1]
source_pred = inputs[2]
target_pred = inputs[3]
source_samples = inputs[4]
target_samples = inputs[5]
source_loss = self.regression_loss(source_pred, source_labels)
target_loss = self.regression_loss(target_pred, target_labels)
mmd_loss = self.mmd_loss(source_samples, target_samples)
self.add_loss(source_loss)
self.add_loss(target_loss)
self.add_loss(mmd)
self.add_metric(source_loss, aggregation='mean', name='source_mae')
self.add_metric(target_loss, aggregation='mean', name='target_mae')
self.add_metric(mmd_loss, aggregation='mean', name='MMD')
return mmd_loss+target_loss+source_loss
因此,标签作为输入发送到模型。因此,模型的拟合如下:
history = model.fit(
x=[train_data_s, train_data_t, self.train_labels, self.train_data_t],
y=None,
batch_size=self.batch_size,
epochs=base_epochs,
verbose=2,
callbacks=cp_callback,
validation_data=[val_data_s, val_data_t, self.val_labels, self.val_labels_t],
shuffle=True
)
然而,根据Tensorflow中的官方文件,验证数据应为:
评估损失所依据的数据以及本报告末尾的任何模型指标
每个时代。模型将不会根据这些数据进行训练。
验证数据将覆盖验证分割。验证数据可能会丢失
be:Numpy数组的元组(x_val,y_val)或张量元组(x_val,
前两个的Numpy数组数据集的y_val,val_sample_weights)
在任何情况下,必须提供批量大小。对于最后一个案例,
可以提供验证步骤。请注意,验证_数据不会
支持x中支持的所有数据类型,例如dict,
生成器或keras.utils.Sequence
没有应该传递的“标签”,因为它们已经作为输入由模型处理。如果我仍然想使用验证数据,我该如何解决这个问题?验证数据=(您的有效,无)是否向您提出了错误?我尝试过,它确实有效@MarcoCerlianidid validation_data=(您的_有效,无)向您提出错误?我尝试过,但它确实有效@马尔科里亚尼