MIMO自动编码器的Keras损失函数
我正在处理一个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个 在这种情况下,当我有多个输入和输出时,如何调用数据集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_
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))