Model Keras多输出:不收敛

Model Keras多输出:不收敛,model,keras,loss,convergence,multipleoutputs,Model,Keras,Loss,Convergence,Multipleoutputs,我正在构建一个多输出keras模型 model1 = Model(input=ip, output=[main, aux]) model1.compile(optimizer='sgd', loss={'main':cutom_loss, 'aux':'mean_squared error'}, metrics='accuracy') model1.fit(input_data, [main_output, aux_output], nb_epoch=epochs, batch_size=ba

我正在构建一个多输出keras模型

model1 = Model(input=ip, output=[main, aux])
model1.compile(optimizer='sgd', loss={'main':cutom_loss, 'aux':'mean_squared error'}, metrics='accuracy')

model1.fit(input_data, [main_output, aux_output], nb_epoch=epochs, batch_size=batch_size, verbose=2, shuffle=True, validation_split=0.1, callbacks=[checkpointer])
My
自定义丢失功能:`

def custom_loss(y_true, y_pred):
    main_pred = y_pred[0]
    main_true = y_true[0]

    loss = K.mean(K.square(main_true - main_pred), axis=-1)
    return loss
但我的人际网络并没有融合

Epoch 1/10
Epoch 00000: val_loss improved from inf to 0.39544, saving model to ./testAE/testAE_best_weights.h5
18s - loss: 0.3896 - main_loss: 0.0449 - aux_loss: 0.3446 - main_acc: 0.0441 - val_loss: 0.3954 - val_main_loss: 0.0510 - val_aux_loss: 0.3445 - val_main_acc: 0.0402
Epoch 2/10
Epoch 00001: val_loss did not improve
18s - loss: 0.3896 - main_loss: 0.0449 - aux_loss: 0.3446 - main_acc: 0.0441 - val_loss: 0.3954 - val_main_loss: 0.0510 - val_aux_loss: 0.3445 - val_main_acc: 0.0402
Epoch 3/10
Epoch 00002: val_loss did not improve
18s - loss: 0.3896 - main_loss: 0.0449 - aux_loss: 0.3446 - main_acc: 0.0441 - val_loss: 0.3954 - val_main_loss: 0.0510 - val_aux_loss: 0.3445 - val_main_acc: 0.0402
Epoch 4/10
Epoch 00003: val_loss did not improve
18s - loss: 0.3896 - main_loss: 0.0449 - aux_loss: 0.3446 - main_acc: 0.0441 - val_loss: 0.3954 - val_main_loss: 0.0510 - val_aux_loss: 0.3445 - val_main_acc: 0.0402

我只想在主要输出方面进行培训。aux输出将用于测试。

从提供的信息中,我不清楚您的损失没有改善的原因,但我可以回答您的部分问题。我也不明白为什么你在使用均方误差时对精度指标感兴趣,但我不知道你的模型的细节

请参阅,以了解仅对一个输出进行训练的简单方法(以及如何将输出/标签传递给丢失函数的说明)。编译模型时,可以使用loss_weights=[1,0.0]使模型仅在一个输出上训练。这样,优化的损耗不包括辅助输出。看起来是这样的:

model1.compile(optimizer='sgd', loss={'main':custom_loss, 'aux':'mean_squared error'}, 
               metrics='accuracy', loss_weights=[1., 0.0])
因为您只是计算均方误差,所以将代码重写为

model1.compile(optimizer='sgd', loss={'main':'mse', 'aux':'mean_squared error'},
               metrics='accuracy', loss_weights=[1., 0.0])

从提供的信息来看,我不清楚你的损失为何没有改善,但我可以回答你的部分问题。我也不明白为什么你在使用均方误差时对精度指标感兴趣,但我不知道你的模型的细节

请参阅,以了解仅对一个输出进行训练的简单方法(以及如何将输出/标签传递给丢失函数的说明)。编译模型时,可以使用loss_weights=[1,0.0]使模型仅在一个输出上训练。这样,优化的损耗不包括辅助输出。看起来是这样的:

model1.compile(optimizer='sgd', loss={'main':custom_loss, 'aux':'mean_squared error'}, 
               metrics='accuracy', loss_weights=[1., 0.0])
因为您只是计算均方误差,所以将代码重写为

model1.compile(optimizer='sgd', loss={'main':'mse', 'aux':'mean_squared error'},
               metrics='accuracy', loss_weights=[1., 0.0])

为什么要使用自定义损耗?。。。看起来你是在计算均方误差,为什么不使用它呢?为什么要使用自定义损失呢?。。。看起来你是在计算均方误差,为什么不使用它呢?