[tensorflow] #3. 과목 점수로 성적 상위 퍼센테이지 구하기

exoluse·2021년 10월 22일
0

python - tensorflow

목록 보기
3/7
post-thumbnail

값을 여러개 놓고 가중치와 bias를 구하고 싶다.

# 수학 점수에 따른 시험 상위 퍼센테이지 구하기.
_math = [20, 22, 30, 40, 80, 75, 65]
_topPercentage = [75, 70, 60, 50, 1, 5, 15]

손실 함수는 이렇게 수정되었다

차이값을 모두 더하여 리턴한다.

def lossFunction():

    diff = 0.0
    idx = 0
    # 굴려서 평균을 내자.
    for val in _math :
        result = val * wValue + bias
        diff += tf.square(_topPercentage[idx] - result)
        idx = idx + 1
        
    return diff

검증은 대충 이렇게


idx = 0
for item in _math :
    print("예상 상위 % : "+str((item*wValue.numpy())+bias.numpy()) + " 실제 % : "+str(_topPercentage[idx]) )
    idx = idx + 1

전체 소스

import tensorflow as tf

# 수학 점수에 따른 시험 상위 퍼센테이지 구하기.
_math = [20, 22, 30, 40, 80, 75, 65]
_topPercentage = [75, 70, 60, 50, 1, 5, 15]

# 손실함수 : 가장 최적의 a, b 값을 구하기 위한 함수
def lossFunction():

    #diff = 0.0
    #idx = 0
    #굴려서 평균을 내자.
    #for val in _math :
    #    result = val * wValue + bias
    #    diff += tf.square(_topPercentage[idx] - result)
    #    idx = idx + 1
    
    #return diff
    # 실제값에서 예측값을 뺀 결과를 리턴한다.
    
    # 케라스의 mean squared error
    result = _math * wValue + bias
    return tf.keras.losses.mse(_topPercentage, result)


# 가중치w 와 bias b를 텐서플로우 변수 타입으로 선언한다.
wValue = tf.Variable(0.1)
bias = tf.Variable(0.1)

# 케라스의 옵티마이저 중 경사하강법을 이용한다. 하강치는 0.01 이다.
opt = tf.keras.optimizers.Adam(learning_rate=0.15)

# 3000번 돌려서 근사치에 도달할떄까지 경사하강법을 적용한다.
for i in range(3000) :

    # 손실을 최소화하는 부분인데 손실함수와 텐서플로우 변수가 파라미터이다.
    opt.minimize(lossFunction, var_list=[wValue,bias])
    # print(wValue.numpy(),bias.numpy())


idx = 0
for item in _math :
    print("예상 상위 % : "+str((item*wValue.numpy())+bias.numpy()) + " 실제 % : "+str(_topPercentage[idx]) )
    idx = idx + 1

결과값은

예상 상위 % : 73.43640518188477 실제 % : 75
예상 상위 % : 70.95666313171387 실제 % : 70
예상 상위 % : 61.03769493103027 실제 % : 60
예상 상위 % : 48.63898468017578 실제 % : 50
예상 상위 % : -0.9558563232421875 실제 % : 1
예상 상위 % : 5.243498802185059 실제 % : 5
예상 상위 % : 17.64220905303955 실제 % : 15

0개의 댓글