반응형

개요

 

이번에는 Python의 Keras라이브러리를 이용하여 간단한 AI프로그래밍을 해보도록 하겠습니다.

 


설명

 

우선 회귀에 대해서 알아볼 텐데 회귀는 단순 선형 회귀 분석과 다중 선형 회귀 분석 로지스틱 이진 분류 회귀분석 등이 있습니다.

 


단순 선형 회귀 분석

 

입력: 한개 출력 : 한 개

 


다중 선형 회귀 분석

 

입력 : 여러 개 출력: 하나의 값

 


로지스틱 회귀

 

이진 분류에서 사용되며 입력 : 하나 또는 여러 개 , 출력 : 0 아니면 1

 

y와 x 간의 관계를 유추한 식을 가설이라고 합니다.  사실 선형 회귀에서 해야 할 일은 결국 적절한 w와 b를 찾아내는 일입니다. (w : 기울기  b : 절편 편향)

머신 러닝은 w와 b를 찾기 위해서 손실 함수(평균 제곱 오차)를 이용하는데

실제 값과 가설로부터 얻은 예측 값의 오차를 계산하는 식을 세우고 이식의 값을 최소화하는 최적의 w와 b를 찾아내려고 노력합니다.

(목적 함수 , 비용 함수 , 손실 함수 ) = 실제 값과 예측 값에 대한 오차에 대한 식

모든 점 들과의 오차가 클수록 평균 제곱 오차는 커지며, 오차가 작아질수록 평균 제곱 오차는 작아집니다.

 


코드

 

이제 그러면 Tensor flow를 이용하여 선형 회귀 분석을 간단한 파이썬 코드를 통해 알아보도록 하겠습니다.

 

import tensorflow as tf

#훈련 데이터 지정
x_train = [1, 2, 3] #훈련 데이터 문제
y_train = [1, 2, 3] #훈련 데이터 정답

# 구할 가중치 W와 편향 b를 난수 하나로 지정
W = tf.Variable(tf.random_normal([1]), name="weight")
b = tf.Variable(tf.random_normal([1]), name="bias")

# 선형 모델 가설 (Our hypothesis x*W + b)
hypothesis = x_train * W + b

# 손실 함수(cost/loss function) 평균제곱에러 지정
cost = tf.reduce_mean(tf.square(hypothesis - y_train))

# 경사하강법을 이용하여 손실을 최소화하는 최적화 과정(optimizer)
optimizer = tf.train.GradientDescentOptimizer( learning_rate = 0.01 ) #학습률
train = optimizer.minimize(cost)

# 그래프 실행(Launch the graph in a session)
with tf.Session() as sess:
	# Initializes global variables in the graph.
	sess.run(tf.global_variables_initializer())
	# Fit the line
	for step in range(2001):
		sess.run(train)
		if step % 20 == 0:
			print(step, sess.run(cost), sess.run(W), sess.run(b))

 


Keras

 

이번에는 Keras를 이용하여 규칙을 찾아 예측해내는 간단한 코드를 살펴보겠습니다.

 

순서는 

1. 케라스 패키지 import

2. 데이터 지정

3. 인공신경망 모델 구성

4. 최적화 방법과 손실 함수 지정해 인공신경망 모델 생성

5. 생성된 모델로 훈련 데이터 학습

6. 성능 평가

7. 테스트 데이터로 결과 예측

 

import keras
import numpy

#훈련과 테스트 데이터
x = numpy.array([0, 1, 2, 3, 4])
y = numpy.array([1, 3, 5, 7, 9]) #y = x * 2 + 1

#인공신경망 모델 사용
model = keras.models.Sequential()

#은닉계층 하나 추가 
model.add(keras.layers.Dense(1, input_shape=(1,)))

#모델의 패라미터를 지정하고 모델 구조를 생성
#최적화 알고리즘: 확률적 경사 하강법(SGD: Stochastic Gradient Descent)
#손실 함수(loss function): 평균제곱오차(MSE: Mean Square Error)  
model.compile('SGD', 'mse')

#생성된 모델로 훈련 자료로 입력(x[:2])과 출력(y[:2])을 사용하여 학습
#키워드 매개변수 epoch(에퐄): 훈련반복횟수
#키워드 매개변수 verbose: 학습진행사항 표시
model.fit(x[:32], y[:3], epochs=1000, verbose=0)

#테스트 자료의 결과를 출력
print('Targets:', y[3:])

#학습된 모델로 테스트 자료로 결과를 예측(model.predict)하여 출력
print('Predictions:', model.predict(x[3:]).flatten())

 


 

반응형

+ Recent posts