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

时间:2021-04-14 22:13:57

标签: keras deep-learning communication loss-function autoencoder

我正在处理 2 个用户的 MIMO 自动编码器。

<块引用>

twouser_autoencoder = Model(inputs=[u1_input_signal, u2_input_signal], 输出=[u1_decoded1, u2_decoded1])

我想建立一个损失函数 L = α*L1+(1−α)*L2 其中 L1 是第一个用户的损失 (u1_input_signal,u1_decoded1) 和第二个用户的 L2 (u2_input_signal,u2_decoded1)(监督学习)。参数 α 是 α=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))

0 个答案:

没有答案