我正在处理 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))