Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/tensorflow/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Tensorflow Keras中model.fit()方法中的验证数据必须是元组吗?_Python_Tensorflow_Keras_Loss Function - Fatal编程技术网

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=(您的_有效,无)向您提出错误?我尝试过,但它确实有效@马尔科里亚尼