1616import paddle .nn as nn
1717import paddle .nn .functional as F
1818import math
19+ import numpy as np
1920
2021import net
2122
2223
2324class DygraphModel ():
25+ def __init__ (self ):
26+ self .bucket = 100000
27+ self .absolute_limt = 200.0
28+
29+ def rescale (self , number ):
30+ if number > self .absolute_limt :
31+ number = self .absolute_limt
32+ elif number < - self .absolute_limt :
33+ number = - self .absolute_limt
34+ return (number + self .absolute_limt ) / (self .absolute_limt * 2 + 1e-8 )
35+
2436 # define model
2537 def create_model (self , config ):
2638 article_content_size = config .get (
@@ -63,8 +75,10 @@ def create_optimizer(self, dy_model, config):
6375 # define metrics such as auc/acc
6476 # multi-task need to define multi metric
6577 def create_metrics (self ):
66- metrics_list_name = ["acc" ]
67- auc_metric = paddle .metric .Accuracy ()
78+ # metrics_list_name = ["acc"]
79+ # auc_metric = paddle.metric.Accuracy()
80+ metrics_list_name = ["auc" ]
81+ auc_metric = paddle .metric .Auc (num_thresholds = self .bucket )
6882 metrics_list = [auc_metric ]
6983 return metrics_list , metrics_list_name
7084
@@ -77,18 +91,37 @@ def train_forward(self, dy_model, metrics_list, batch_data, config):
7791
7892 loss = paddle .nn .functional .cross_entropy (
7993 input = raw , label = paddle .cast (labels , "float32" ), soft_label = True )
80- correct = metrics_list [0 ].compute (raw , labels )
81- metrics_list [0 ].update (correct )
94+
95+ scaled = raw .numpy ()
96+ scaled_pre = []
97+ [rows , cols ] = scaled .shape
98+ for i in range (rows ):
99+ for j in range (cols ):
100+ scaled_pre .append (1.0 - self .rescale (scaled [i , j ]))
101+ scaled_pre .append (self .rescale (scaled [i , j ]))
102+ scaled_np_predict = np .array (scaled_pre ).reshape ([- 1 , 2 ])
103+ metrics_list [0 ].update (scaled_np_predict ,
104+ paddle .reshape (labels , [- 1 , 1 ]))
105+
82106 loss = paddle .mean (loss )
83107 print_dict = None
84108 return loss , metrics_list , print_dict
85109
86110 def infer_forward (self , dy_model , metrics_list , batch_data , config ):
87- label , sparse_tensor , dense_tensor = self .create_feeds (batch_data ,
88- config )
111+ labels , sparse_tensor , dense_tensor = self .create_feeds (batch_data ,
112+ config )
89113 raw = dy_model (sparse_tensor , None )
90- raw = paddle .nn .functional .softmax (raw )
91- correct = metrics_list [0 ].compute (raw , label )
92- metrics_list [0 ].update (correct )
114+ #predict_raw = paddle.nn.functional.softmax(raw)
115+
116+ scaled = raw .numpy ()
117+ scaled_pre = []
118+ [rows , cols ] = scaled .shape
119+ for i in range (rows ):
120+ for j in range (cols ):
121+ scaled_pre .append (1.0 - self .rescale (scaled [i , j ]))
122+ scaled_pre .append (self .rescale (scaled [i , j ]))
123+ scaled_np_predict = np .array (scaled_pre ).reshape ([- 1 , 2 ])
124+ metrics_list [0 ].update (scaled_np_predict ,
125+ paddle .reshape (labels , [- 1 , 1 ]))
93126
94127 return metrics_list , None
0 commit comments