我设计了一个用于多任务学习的网络。在这里,我有一些共享层和特定层用于 5 个不同的任务。
input_dim_train=X_train.shape[1]
n_input_dim = int(input_dim_train)
shared_model = Dense(input_dim_train)(inputs)
shared_model = Dense(n_input_dim, activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)
shared_model = Dense(int(n_input_dim//4), activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)
shared_model = Dense(int(n_input_dim//12), activation='relu')(shared_model)
shared_model = BatchNormalization(input_dim=n_input_dim)(shared_model)
shared_model = Dropout(0.1)(shared_model)
shared_model = Dense(int(n_input_dim//20), activation='relu')(shared_model)
shared_model = BatchNormalization()(shared_model)
shared_model = Dropout(0.1)(shared_model)
output1 = Dense(3, activation='softmax',name='target_1',)(shared_model)
output2 = Dense(2, activation='softmax',name='target_2')(shared_model)
output3 = Dense(4, activation='softmax',name='target_3')(shared_model)
output4 = Dense(2, activation='softmax',name='target_4')(shared_model)
output5 = Dense(3, activation='softmax',name='target_5')(shared_model)
model = Model(inputs=inputs, outputs=[output1, output2,output3,output4,output5])
model.compile(optimizer='adam', loss='categorical_crossentropy',metrics=['accuracy',f1_metric])
history=model.fit(X_train, [y_train_task1, y_train_task2,y_train_task3,y_train_task4,y_train_task5],
validation_data=(X_test,[y_test_task1,y_test_task2,y_test_task3,y_test_task4,y_test_task5]),verbose='auto',epochs=n_epoch,batch_size=n_batch_size)
task1_pred,task2_pred,task3_pred,task4_pred,task5_pred = model.predict(X_test)
网络以某种方式运行良好,并给出如下结果:
现在,我的问题是:在这个多任务学习中,如何衡量例如 Task1 对 Task2 的影响?确实在想计算这个问题中任务之间的任务亲和度得分。有没有办法在训练过程中计算任务间的亲和力得分——在不同的时期?