선형회귀
선형 모델 구현
class LinearModel:
def __init__(self):
self.W = tf.Variable(initial_value = 1.5)
self.b = tf.Variable(initial_value = 1.5)
def __call__(self, X, Y):
return tf.add(tf.multiply(X, self.W), self.b)
업뎃될 수 있는 변수 W(가중치), b(편향) 을 초기값 1.5로 설정
X와 W를 곱하고 b를 더하여 선형모델을 만듦
MSE 계산 손실 함수
def loss(y, pred):
x = tf.reduce_mean(tf.square(y-pred))
return x
실제값과 예측값의 차를 제곱하여 평균을 구하여 반환
학습함수 ( train by gd )
def train(linear_model, x, y):
with tf.GradientTape() as t:
current_loss = loss(y, linear_model(x, y))
learning_rate = 0.001
delta_W, delta_b = t.gradient(current_loss, [linear_model.W, linear_model.b])
W_update = (learning_rate * delta_W)
b_update = (learning_rate * delta_b)
return W_update, b_update
train 함수의 매개변수로 모델, 학습데이터, 학습라벨을 받는다.
현재 손실값을 loss함수를 이용해 정의한다.
lr을 설정해주고, t.gradient함수를 이용해 gradient 값을 계산한다.
이 gradient값과 learning_rate값을 곱해 가중치와 편향을 얼마나 업데이트 할지 정한다.
main 함수
def main():
linear = LinearModel()
epochs = 100
for epoch_count in range(epochs):
y_pred_data = linear(x_data, y_data)
real_loss = loss(y_data, linear(x_data, y_data)
update_W, update_b = train(linear, x_data, y_data)
linear.W.assign_sub(update_W)
linear.b.assign_sub(update_b)
선형함수를 linear에 할당
에폭 값 설정
에폭동안
선형모델 예측값 y_pred_data에 저장
예측값과 실제 데이터값 사이 loss함수 결과 real_loss에 저장
linear모델 train한 결과 W, b 저장
W, b값 업데이트
비선형회귀
모델 선언
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(20, input_dim = 1, activation = 'relu'),
tf.keras.layers.Dense(20, activation = 'relu'),
tf.keras.layers.Dense(1)])
model에 layer를 순차적으로 쌓음
model.compile(loss= 'mean_squared_error', optimizer = 'adam')
history = model.fit(x_data, y_data, epochs = 500, verbose = 2)
predicrions = model.predict(x_data)
return history, model
compile : 모델 학습 방법(손실함수, 최적화 함수 설정)
fit : 모델 학습
predict : 학습된 모델로 예측값 생성
참고 : LG Aimers
'AI > 기계학습' 카테고리의 다른 글
Pillow(PIL) -이미지 처리 위한 라이브러리 (0) | 2024.06.01 |
---|---|
이미지 데이터 - CNN/RNN (0) | 2024.05.31 |
딥러닝 학습의 문제점 (0) | 2024.05.22 |
텐서플로우(Tensorflow)와 딥러닝 학습 (1) | 2024.05.20 |
AND, OR, NAND, NOR gate in python (0) | 2024.05.20 |