MIMO自动编码器的Keras损失函数

MIMO自动编码器的Keras损失函数,keras,deep-learning,communication,loss-function,autoencoder,Keras,Deep Learning,Communication,Loss Function,Autoencoder,我正在处理一个MIMO自动编码器为2个用户 twouser_自动编码器=型号(输入=[u1_输入_信号,u2_输入_信号], 输出=[u1_解码1,u2_解码1]) 我想建立一个损失函数L=α*L1+(1−α) *L2 其中,L1是第一用户(u1_输入_信号,u1_解码D1)的损耗,L2是第二用户(u2_输入_信号,u2_解码D1)(监督学习)。参数α为α=L1/(L1+L2),并针对每个小批量进行计算。看起来我的模型没有训练,因为损失仍然很高。我得到了一个错误: TypeError:from_

我正在处理一个MIMO自动编码器为2个用户

twouser_自动编码器=型号(输入=[u1_输入_信号,u2_输入_信号], 输出=[u1_解码1,u2_解码1])

我想建立一个损失函数L=α*L1+(1−α) *L2 其中,L1是第一用户(u1_输入_信号,u1_解码D1)的损耗,L2是第二用户(u2_输入_信号,u2_解码D1)(监督学习)。参数α为α=L1/(L1+L2),并针对每个小批量进行计算。看起来我的模型没有训练,因为损失仍然很高。我得到了一个错误:

TypeError:from_tensor_slices()接受1个位置参数,但给出了2个

在这种情况下,当我有多个输入和输出时,如何调用数据集

   train_dataset = tf.data.Dataset.from_tensor_slices([train_data1,train_data1], [train_data2,train_data2])
   train_dataset = train_dataset.shuffle(buffer_size=1024).batch(batch_size) 
   for epoch in range(epochs):   
        for step, (x_batch_train, y_batch_train) in enumerate(train_dataset):
            x_1=x_batch_train[0]
            y_1=y_batch_train[0]
            x_2 = x_batch_train[1]
            y_2 = y_batch_train[1]
            with tf.GradientTape() as tape:
                u1_decoded, u2_decoded=self.twouser_autoencoder((x_1,x_2),training=True)
                loss1=loss_fn(u1_decoded,y_1)
                loss2 = loss_fn(u2_decoded, y_2)
                loss = loss1 * a + loss2 * b

            grads = tape.gradient(loss,self.twouser_autoencoder.trainable_weights)
            optimizer.apply_gradients(zip(grads, self.twouser_autoencoder.trainable_weights))
            a = loss1 / (loss1 + loss2)
            b = loss2 / (loss2 + loss1)  # apply gradients
            if step % 100 == 0:
                print('Epoch: ', epoch, '| train loss: %.4f, L1:%.4f,L2: %.4f,a: %.4f, (1-a):%.4f' % (
                    loss1, loss2,loss ,a, b))