진동데이터 활용 충돌체 탐지 AI 경진대회

tensorflow kaeri_loss() 만들어 봄.

2020.06.12 17:02 5,694 조회

def kaeri_loss():

    def kaeri_metric(y_truey_pred):

        '''

        y_true: dataframe with true values of X,Y,M,V

        y_pred: dataframe with pred values of X,Y,M,V

    

        return: KAERI metric

        '''

    

        return 0.5 * E1(y_true, y_pred) + 0.5 * E2(y_true, y_pred)



### E1과 E2는 아래에 정의됨 ###


    def E1(y_truey_pred):

        '''

        y_true: dataframe with true values of X,Y,M,V

        y_pred: dataframe with pred values of X,Y,M,V

    

        return: distance error normalized with 2e+04

        '''

        tf.keras.backend

        # _t, _p = np.array(y_true)[:,:2], np.array(y_pred)[:,:2]

        _t, _ = tf.split(y_true, 2, 1)

        _p, _ = tf.split(y_pred, 2, 1)

        

        # return np.mean(np.sum(np.square(_t - _p), axis = 1) / 2e+04)

        return tf.keras.backend.sum(tf.keras.backend.square(_t - _p), axis = 1) / 2e+04


    def E2(y_truey_pred):

        '''

        y_true: dataframe with true values of X,Y,M,V

        y_pred: dataframe with pred values of X,Y,M,V

    

        return: sum of mass and velocity's mean squared percentage error

        '''

    

        # _t, _p = np.array(y_true)[:,2:], np.array(y_pred)[:,2:]

        _, _t = tf.split(y_true, 2, 1)

        _, _p = tf.split(y_pred, 2, 1)


        return tf.keras.backend.sum(tf.keras.backend.square((_t - _p) / (_t + 1e-06)), axis = 1)

        # return np.mean(np.sum(np.square((_t - _p) / (_t + 1e-06)), axis = 1))


    return kaeri_metric


---------------------- 절삭--------------------------



Models.compile(optimizer=tf.keras.optimizers.Adam(lr=0.XXXXX), 

              loss=kaeri_loss())


또는


Models.compile(optimizer=tf.keras.optimizers.Adam(lr=0.0005), 

              loss='mse', metrics=[kaeri_loss()])


저도 처음 만들어본거라 평가함수를 loss로 변경한것인데 맞는진 모르겠네요.


mse로 접근한 것보단 잘나와서 사용은 하고 있는데 수정부분 있으면 말씀해주세요.

로그인이 필요합니다
0 / 1000
Mather
2020.06.12 18:34

옷 감사합니다. 저는 완전 초보라 중간에 텍스트로 설명하여 주시면 이해가 더 쉬울것 같습니다.

원종호
2020.06.12 22:24

그냥 단순히 대회안내에 있는 평가함수를 변경한것뿐이라서 설명은 어렵습니다.
평가 함수에 대해선 진동데이터 활용 충돌체 탐지 AI경진대회 설명2 동영상 참조.

매번 학습 후 평가함수를 통해서 결과확인하기 귀찮아서 학습 하면서 해당 평가함수 기준 얼마나 좋은지 사용하려고 했었습니다.(두번째 방법)
mse loss론 성능이 일정이하로 떨어지지도 않고  평가함수 기준으론 성능이 좋아지지 않더라구요.
그래서 해당 함수를 loss로 사용하고 있습니다.

Mather
2020.06.13 21:18

감사합니다. 설명 참고 하겠습니다.