반응형

선형회귀(Linear Regression) 구현하기

텐서플로 버전 확인

import tensorflow as tf
tf.__version__

2.3.0

2버전대(2.*.*) 가 아닌 1버전이 설치가 되어있으면, 삭제후 재설치 해줍니다.

!pip uninstall tensorflow
!pip install tensorflow

필요 모듈 설정

import tensorflow as tf
import numpy as np
from tensorflow import keras

X, Y 샘플 데이터 및 학습률(learning_rate) 입력

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]
learning_rate = 0.001

keras의 다차원 계층 모델인 Sequential를 레이어 선언

model = tf.keras.models.Sequential()

입력이 1차원이고 출력이 1차원인 DENSE - Dense는 레이어의 종류

model.add(tf.keras.layers.Dense(1, input_dim = 1))

경사 하강법 선언 (with Learning_rate)

sgd = tf.keras.optimizers.SGD(learning_rate = 0.001)

loss(cost)를 mean_squared_error 방식을 사용

model.compile(loss='mean_squared_error',optimizer=sgd)

모델 학습

model.fit(x_data, y_data, epochs=5000)

풀코드

import tensorflow as tf
import numpy as np
from tensorflow import keras

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]
learning_rate = 0.001

model = tf.keras.models.Sequential()
model.add(tf.keras.layers.Dense(1, input_dim = 1))

sgd = tf.keras.optimizers.SGD(learning_rate = 0.001)
model.compile(loss='mean_squared_error',optimizer=sgd)
model.fit(x_data, y_data, epochs=500)

temp_x = 18
print()
print(f'x가 {temp_x}일 때, y의 예측값 : {model.predict(np.array([temp_x]))[0][0]}')
반응형

선형회귀(Linear Regression) 구현하기

텐서플로 버전 확인

import tensorflow as tf
tf.__version__

2.3.0

2버전대(2.*.*) 가 아닌 1버전이 설치가 되어있으면, 삭제후 재설치 해줍니다.

!pip uninstall tensorflow
!pip install tensorflow

필요 모듈 설정

import tensorflow as tf
import numpy as np

X, Y 샘플 데이터 입력

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

변수 선언, 가중치(기울기) W, 편향(절편), 학습률(learning_rate)

w = tf.Variable(tf.random.normal([1]))
b = tf.Variable(tf.random.normal([1]))
learning_rate = 0.001

경사 하강법 알고리즘(GradienTape : 자동 미분 API) 사용

with tf.GradientTape() as tape:
    hypothesis = w * x_data + b
    diff = tf.square(hypothesis - y_data)
    cost = tf.reduce_mean(diff)

경사 하강법에 따른 변수 업데이트

w_grad, b_grad = tape.gradient(cost, [w, b])
w.assign_sub(learning_rate * w_grad)
b.assign_sub(learning_rate * b_grad)

풀코드

import tensorflow as tf
import numpy as np

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

w = tf.Variable(tf.random.normal([1]))
b = tf.Variable(tf.random.normal([1]))
learning_rate = 0.001

for i in range(50001):
    with tf.GradientTape() as tape:
        hypothesis = w * x_data + b
        cost = tf.reduce_mean(tf.square(hypothesis - y_data))
    new_w, new_b = tape.gradient(cost, [w, b])
    w.assign_sub(learning_rate * new_w)
    b.assign_sub(learning_rate * new_b)
    if i % 500 == 0:
      print(f'Step : {i}, Cost : {int(cost)}, Weight : {w.numpy()[0]}, Bias : {b.numpy()[0]}')

temp_x = 18.
print()
print(f"x가 {temp_x} 일 때, y의 예측값 :", int(w * temp_x + b))
반응형

선형회귀(Linear Regression) 구현하기

 

텐서플로 1버전 확인 하기

import tensorflow as tf
tf.__version__

1.15.0

X, Y 샘플 데이터 입력

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

변수 선언, 가중치(기울기) W, 편향(절편), 학습률(learning_rate)

w = tf.Variable(tf.random_normal([1]))
b = tf.Variable(tf.random_normal([1]))
learning_rate = 0.001

변수 x, y 정의

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)

예측값을 구할 가설(Hypothese) 설정, (1차 방정식 만들기)

H = w * x + b

Cost (loss) 함수식 작성

diff = tf.square(H - y)
cost = tf.reduce_mean(diff)

경사 하강법 알고리즘 선언

optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(cost)

설정한 변수에 대한 초기화 함수 설정(init)

init = tf.global_variables_initializer()

세션을 생성하여 init (Variable)을 아래와 같이 초기화

sess = tf.Session()
sess.run(init)

설정한 모델을 5만번 가량 학습 500번째마다, step, cost, Weight, Bias 출력

for i in range(50001) :
  sess.run(train, feed_dict={x : x_data, y : y_data})
  if i % 500 == 0 :
    print(i, sess.run(cost, feed_dict={x : x_data, y : y_data}), sess.run(w), sess.run(b))

예측할 x (18)의 값을 넣어서 y 값 확인

print(sess.run(H, feed_dict={x : [18]}))

풀코드

import tensorflow as tf

x_data = [11,12,13,14,15,16,17]
y_data = [148, 154, 170, 165, 175, 183, 190]

w = tf.Variable(tf.random_normal([1]))
b = tf.Variable(tf.random_normal([1]))

x = tf.placeholder(tf.float32)
y = tf.placeholder(tf.float32)
learning_rate = 0.001

H = w * x + b

diff = tf.square(H - y)
cost = tf.reduce_mean(diff)

optimizer = tf.train.GradientDescentOptimizer(learning_rate)
train = optimizer.minimize(cost)

init = tf.global_variables_initializer()

sess = tf.Session()
sess.run(init)

for i in range(50001) :
  sess.run(train, feed_dict={x : x_data, y : y_data})
  if i % 500 == 0 :
      print(f'Step : {i}, Cost : {sess.run(cost, feed_dict={x : x_data, y : y_data})}, Weight : {sess.run(w)[0]}, Bias : {sess.run(b)[0]}')

temp_x = 18.9
print()
print(f" x 가 {temp_x} 일 때, y의 예측값 :", int(sess.run(H, feed_dict={x : [temp_x]})[0]))

예상 오류

AttributeError: module 'tensorflow' has no attribute 'random_normal'

만약 이런 오류가 뜬다면, 텐서플로 2버전이 설치 되어있을 것입니다.

import tensorflow as tf
tf.__version__

를 통해 버전을 확인 후, 1버전으로 재설치를 해줍니다.

!pip uninstall tensorflow
!pip install tensorflow==1.15

 

반응형

실습환경 : 구글 코랩

현재 버전을 확인합니다.

import tensorflow as tf
tf.__version__
2.3.0

구글 코랩은 최신 버전의 텐서플로 기본 설치되어있기 때문에,

텐서플로 1 버전을 사용하기 위해서는 텐서플로를 재설치해야 합니다.

 

텐서플로 2 버전 삭제

!pip uninstall tensorflow

삭제 진행 여부를 물으면, y를 누르고 삭제를 진행합니다.

 

텐서플로 1.15 버전 설치

!pip install tensorflow==1.15

설치가 완료되면, RESTART RUNTIME을 눌러주세요.

현재 버전을 다시 확인합니다.

import tensorflow as tf
tf.__version__
1.15.0

1.15.0이 나온다면 텐서플로 1 버전 환경이 구축되었습니다.

 

풀코드

!pip uninstall tensorflow
!pip install tensorflow==1.15

import tensorflow as tf
tf.__version__
반응형

1. Session 사용의 불필요

텐서플로 1과 텐서플로 2의 가장 큰 차이는 바로 세션 사용의 유무입니다.

텐서플로1 같은 경우에는, 원하는 값을 출력하기 위해서 세션을 열고 찾으려는 값을 그 세션을 통해서 값을 받아오는 복잡한 구조였습니다.

 

하지만, 텐서플로 2 부터는 별도의 세션 실행 없이 바로 특정 값을 계산할 수 있게 되었습니다.

 

2. 선언 최소화 및 내장 함수 사용

TensorFlow 1의 경우 많은 부분이 전역적인 형태로 처리되고 있었습니다.

 

예를 들어 우리가 선언한 전역 변수나 placeholder을 사용하기 위해서는, global_variables_initializer API를 호출해야 설정한 값들을 사용할 수 있었습니다.

하지만 placeholder와 더불어 전역 형태로 호출하는 부분들을 생략할 수 있게 되었습니다. 그래서 전체적으로 코드가 짧아지고 육안으로 확인이 편리 해져서 디버깅도 쉽게 할 수 있게 되었습니다.

또한, 버전 1에서도 케라스를 사용할 수 있었지만, 2부터는 공식 소스로 편입되면서 쉬운 케라스 코딩을 더 활발하게 이용할 수 있다는 장점이 있습니다.

 

3. 속도의 차이

예상하셨던 분들도 계셨겠지만, 세션을 통해 호출하는 것이 동일 코드라면 더 빠릅니다.

이유는 간단한데요, 사실 텐서플로1텐서 플로 1에서 세션을 실행하기 전에 모든 변수 하나씩 다 선언하고 변수를 받는 곳에는 미리 플레이스 홀더라는 틀을 만들고 모든 것을 세팅한 후에, 진행하였습니다.

 

쉽게 달리기로 예로 들어보겠습니다.. 텐서플로 1 같은 경우에는 달리기 시합 전에 가벼운 소재 유니폼을 입고, 러닝화를 신고, 준비 운동까지 끝 맞춘 상황에서 달리기를 하는 것입니다.

 

그래서 달리기를 할 때, 최적의 속도로 달릴 수 있는 것입니다.

그러나 텐서플로2텐서 플로 2는 달리기 시합 전에 최소한의 장비만 착용하고 달리는 것입니다.

그렇기 때문에 속도는 텐서 플로 1이 더 빠릅니다.

 

4. Function 사용

텐서플로 2의 속도가 느려진 것을 보완하기 위해 나온 것이, function화입니다.

그림과 같이 우리가 만든 임의 functiontf.function을 달아주면, 컴파일되어, 해당 함수는 미리 세이브드 모델에 저장이 됩니다.

 

그래서 필요에 따라서 우리가 만든 코드에 저장된 함수를 빠르게 부를 수 있고, 불러진 함수는 보다 빠르게 처리해줌으로써 속도를 높여주고 있습니다.

 

5. 기타

추가적으로 텐서플로1에서 2로 바꿔주는 모듈도 추가적으로 제공을 해주고 있습니다.

그러나 아직 완벽하진 않고 에러도 좀 있어서 이 부분에서는 아직 사람의 개입이 필요합니다.

 

그 외에도 바뀐 것들이 있지만, 우리에게는 크게 중요하지 않으니 관심 있으신 분들은 공식 홈페이지에 내용을 확인해보시길 바랍니다.

반응형

이제 딥러닝에 대해서 알아보도록 하겠습니다. 딥러닝은, 머신러닝의 여러 방법 중 하나로 신경망 (뉴럴네트워크)의 한 종류입니다.

 

결국, 인공지능 안에 머신러닝이 있고, 머신러닝 안에 딥러닝이 있는 구조입니다.

 

그렇다면 머신러닝과 딥러닝의 차이는 무엇일까요?

 

머신러닝은 학습에 필요한 데이터를 수동으로 제공을 해주어야 하지만,

딥러닝은 분류에 사용할 데이터를 스스로 학습할 수 있습니다.

 

음.. 말이 좀 어려운데요, 쉽게 말씀드리자면,

 

우리가 머신러닝으로 컴퓨터에게 고양이는 어떠한 동물이다...를 알려주려면,

고양이 사진을 여러 장 보여주고, 얘네들은 고양이라고 알려주면서 학습을 시켜주어야 합니다.

그래야, 새로운 고양이 사진을 보여줬을 때, 컴퓨터는 고양이라고 판단을 할 수 있습니다.

 

그러나, 딥러닝은, 여러 동물의 사진을 보여주고, 각 동물들에 특징을 확인하여 얘는 a라는 동물, 얘는 b라는 동물 이런 식으로 컴퓨터가 스스로 사진을 분석해 분류를 하며 학습을 하게 만드는 것입니다.

따로 강아지와 고양이를 학습시켜주지 않아도, 컴퓨터 스스로가 동물들을 분류할 수 있게 만드는 것입니다.

 

결국 딥러닝을 공부한다의 의미는, 머신러닝을 심화한다는 말과 같다고 할 수 있습니다.

그렇기 때문에, 우리는 딥러닝을 배우기 위해서 머신러닝의 기본 개념을 정확히 알고 있으셔야 합니다.

 

그럼 머신러닝에서 꼭 알아야 하는 기본 개념들에 대해서 알아보도록 하겠습니다.

반응형

우리가 인공지능 머신러닝, 딥러닝, 이렇게 구분 지어 이야기를 하지만, 사실 이 3가지의 차이는 크게 없습니다.

 

인공지능이 곧 머신러닝이고, 머신러닝이 곧 딥러닝 이기 때문입니다.

 

말이 좀 어려운데요.. 벤다이어어 그램으로 한번 확인해보도록 하겠습니다.

 

 

 

 

 

먼저, 인공지능머신러닝과 딥러닝을 대표하는, 큰 범주라 말할 수 있습니다.

 

 

 

 

 

 

 

 

 

이러한 인공지능을 구현하는 대표적인 방법에는 머신러닝이 있습니다.

 

 

 

 

 

 

그럼, 머신러닝에 대해서 알아보도록 하겠습니다.

 

머신러닝 이전, 일반 컴퓨터 공학에서의 핵심은, 공식을 가르쳐 주고, 정답을 알아내는 것이 일반적이고 보편적이었습니다.

 

그러나 현재는 원인들과 결과들을 컴퓨터(머신)에게 학습(러닝) 시켜 주면, 컴퓨터가 이것(원인:결과)들을 분석하여 새로운 규칙을 찾는 것이 더 중요해졌습니다.

쉽게 말씀드리자면, 컴퓨터에게 덧셈을 알려주어서 1+2는 뭐야? 2+3 은 뭐야?... 이렇게 컴퓨터에게 정답을 물어보는 것이 아니라,

"1과 2를 넣었더니 3이 되었고.. 2와 3을 넣었더니 5가 되었네...그럼 이 사이에 무슨 규칙이 있는 거야..?"

 

라고 컴퓨터에게 질문을 하면서, 컴퓨터 스스로가 덧셈에 작동 원리를 알려주는 것이 머신러닝입니다.

 

이러한 머신러닝에는 크게 3가지 학습 방법이 존재하는데...

 

(지도학습(Supervised), 비지도학습(Unsupervised), 강화학습(Reinforcement))

 

다음 포스팅에서 소개드리도록 하겠습니다.

반응형

인공지능(AI. Artificial Intelligence)에 대해서는 이미 많은 분들이 알고 계실 것입니다.

 

지난 2016년, 이세돌 9단과 바둑 경기에서 승리한 알파고를 비롯하여 AI 스피커, 챗봇 등... 우리는 이미 AI와 함께 살아가고 있을 것입니다.

그렇다면, 우리는 why?! 왜... 인공지능에 대해서 학습해야만 하는지 소개해드리도록 하겠습니다.

인공지능이라는 분야는 다른 산업 분야와는 다르게, 최근에 생긴 신(新) 기술이고, 인공지능 기술이 확실히 자리 잡은 곳은 아직 없습니다.

 

인공지능 기술은 아직도 발전 중이며, 앞으로 상용화될 곳이 너무너무도 많기 때문입니다.

한 가지 예를 들어보겠습니다. 

 

“더 이상 대학 졸업장은 중요하지 않다.”

 

미국 정보기술(IT) 기업 IBM의 최고경영자 버지니아 로메티는 이렇게 이야기하였습니다.

 

4차 산업혁명 시대엔 대학 학위보다 인공지능 기술이 중요하다는 것입니다. 특정 분야 전문가보다도, 인공지능을 다룰 줄 아는 자가 우리 사회에 더 필요로 하기 때문입니다. 

 

미국 최고의 대학교로 뽑히는 뉴욕대학교 병원에서는 의사 자리에 인공지능 분야 프로그래머를 뽑은 사례가 있습니다. 의사의 직관보다는 빅데이터 및 인공지능 기술을 활용하여 환자에 접근하기 위함입니다.

 

많은 의사들은 컨디션에 따라 실수를 할 수 있지만, 인공지능 기술은 환자들의 여러 가능성을 보여주고, 의사들이 생각하지 못한 경우의 수들을 분석해 줄 수 있습니다.

 

이뿐만 아니라, 변호사, 요리사, 헬스 트레이너 등 우리가 접하는 모든 분야에서 인공지능의 중요성이 커지고 있습니다.

그렇기 때문에, 우리는 인공지능 기술을 필요가 아닌 필수로 학습하고 이해해야 된다고 감히 말씀드릴 수 있습니다.

인공지능의 관심이 있고 학습을 하시려는 분들에게 있어서, 조금이나마 도움이 되고자 저만의 공간을 만들게 되었습니다. 많이 부족하겠지만, 인공지능에 대해 꾸준히 연구하여 업데이트를 할 예정입니다. 또한, 질문이나 여러 피드백을 통해 업데이트할 수 있도록 하겠습니다.

감사합니다.

반응형

+ Recent posts