본문 바로가기
인공지능 개발하기/Machine Learning

[Tensorflow] 2. Tensorflow를 사용해서 딥러닝 하기

by 선의공 2023. 12. 29.
반응형

 
저는 학원에서 기초적인 학습을 하고있고,
부끄럽지만 
소통을 위해
복기를 위해
초심을 잃지 않기 위해
나름 다른 분들에게 도움이 될까 싶어(?)
학습하는 과정을 블로그에 작성하고 있습니다.
 
 
 
 
오늘은 텐서플로우를 처음 써보았습니다! 오오
 
 
 
이전 글에서 설치한
python 과 Tensorflow를 이용해서 작업을 할 예정이니,
설치를 안하신분들은 아래의 링크를 이용해 설치를 하셔야 합니다.
https://aigaeddo.tistory.com/2

 

1. Python과 Tensorflow를 이용한 인공지능 개발 세팅하기

학원에서 인공지능 과정을 배우고 있고 Python와 Tensorflow를 이용한 머신러닝,딥러닝 기초학습이다. 이 학습을 하기 위해서 컴퓨터를 세팅해주었다. 필요한 것은 아래 4가지이다. : 1) python 통합 툴

aigaeddo.tistory.com

 
 
설치가 끝나셨다면 
Visual Studio Code를 실행합시다.
 
일단 저는 탐색기에서 "test" 폴더를 하나 만들고 폴더열기를 해주었습니다.

 
 


 

 

1. tensorflow 사용하기 

 
그리고 나서 "tensorflow" 라는 하위 폴더를 만들었고
폴더 안에 “tf_test_1.py”라는 파이썬 파일을
만들어주었습니다.

 
 
tensorflow 버전을 찍어봤습니다.
뭔가 "Hello World" 같은 느낌인가요..?
(에디터 실행 단축키 : control + f5)

import tensorflow as tf
=>텐서플로우 패키지를 tf라는 이름으로 사용하겠다
라고 모듈에 선언한 것입니다.
(정확히는 패키지의 접근성을 내 모듈로 가져온것입니다)

2.15.0 버전이 찍히군요.
그렇다면 2버전이 무엇일까?
tensorflow2.0이 곧 keras라고 하던데요.. 

 


tensorflow 1.0 과 2.0의 차이 그리고 keras라고 하는 녀석이 뭔지 이해가 안가 찾아보니
해당글에서 명료하게 설명해주었습니다.
https://toramko.tistory.com/entry/tensorflow-%ED%85%90%EC%84%9C%ED%94%8C%EB%A1%9C%EC%9A%B0-v11x-v22x-%EC%B0%A8%EC%9D%B4-%EB%B0%8F-%EB%B2%84%EC%A0%84-%EC%97%85%EA%B7%B8%EB%A0%88%EC%9D%B4%EB%93%9C

 

tensorflow :: 텐서플로우 v1(1.x), v2(2.x) 차이 및 버전 업그레이드

* https://www.springboard.com/blog/ai-machine-learning/tensorflow-1-0-vs-tensorflow-2-0/ 위 사이트를 참고하여 작성한 내용입니다. :) 1.x 버전의 텐서플로우를 사용해왔던 개발자라면 한 번쯤은 2.x 버전으로의 업그

toramko.tistory.com

 
제가 이해한점을 간단하게 말하자면
1.0 -> 2.0 이 되면서
1) 간편성 호환성이 증가함
2) keras라는 라이브러리를 많이 통합해 고수준(high-level) 프로그래밍 이 가능하게 함
맞나요....ㅋㅋ
2.0에서는 keras라는 고수준 간편한 api를 사용할 수 있습니다.
 
 


 
 
 

2. keras 사용해서 딥러닝 돌려보기

앞서 설명한대로 Keras는 Tensorflow에 구현 되어있는 API입니다.
이 API를 사용해서 딥러닝 하는 코드 하나를 작성해 보겠습니다.
 

코드


아래 코드는
"x가 1,2,3 인 경우,
y값이 1,2,3이 나온다면 ,
x가 4일때, y값이 4가 나온다"

를 머신에게 학습하는 코드입니다.

from keras.models import Sequential
from keras.layers import Dense
import numpy as np

# 데이터
x = np.array([1,2,3])
y = np.array([1,2,3])

# 모델생성
model = Sequential()
model.add(Dense(1, input_dim = 1))

# 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x,y, epochs=100)

# 평가, 예측
loss = model.evaluate(x,y)
print("loss : ", loss)
result = model.predict([4])
print(“예측값: “,result)

 

 

 

우리는 이미 학습이 되어있어서

 

x가 1 이 들어오고 y가 1이 나온다

-> x가 2가 들어오면 y는 2가 나온다

-> x가 3이 들어오면 y는 3이 나온다

-> 그렇다면 x가 4일 때는????

라고 한다면 답을 4라고 예상할 수 있습니다!

 

하지만 학습되지 않은 인공지능은 

4라는 답을 바로 도출 해내지 못합니다.

 

이것을 학습하게 하는 과정입니다.

 

 

분석

 
일단 코드를 여러 부분으로 나눠서 설명해보겠습니다.

 


1) 패키지 선언

keras 라는 구글에서 여러 능력자 분들이 만들어주신 패키지를 저는 사용한건데요.

 

이 부분은 keras 라는 패키지의 models라는 모듈의 Sequential 라는 클래스를 사용하겠다!라고

선언한 부분입니다.

"너가 이미 개발한 기능을 내가 뽑아 쓰겠다" 라고 권한을 가져온거죠

 

from keras.models import Sequential

 

 

구롬 아래 부분은 layers라는 모듈의 Dense라는 클래스를 사용하겠다고 선언한거겠죠??

from keras.layers import Dense

 

 
Sequential은 model 생성 클래스,
Dense는 모델이 들어갈 레이어 클래스라고 합니다.
 

모델과 레이어가 무엇일까요..?

일단 저도 인공지능의 개념부터 학습해서 설명해야하니 

다음 포스팅에 열심히 공부하며 작성해보겠습니다... 

 

 

그럼 이건 numpy 패키지를 사용할 것입니다.  라고 선언한 거겠군요.

import numpy as np

 

 

 

 

2) 모델생성 
Sequential()이라는 클래스를 이용해 모델을 생성해주고,
모델에 Dense라는 레이어를 세팅해줬습니다.


Dense() 안에 파라미터는 여러개가 올 수 있는데,

오늘은 2가지 파라미터를 배웠습니다.

 

Dense(a, input_dim = b) 

a는 output 개수가 1개라는 의미구요
b는 input의 개수가 1개라는 의미입니다. 

# 모델생성
model = Sequential()
model.add(Dense(1, input_dim = 1))

 
 
 
 
3) 데이터 

 

위에서 설명을 안했지만 

numpy라는 패키지를 np로 선언해주었죠?

바로 여기서 사용해줍니다. 

 

numpy는 배열의 계산을 효율적으로 사용할 수 있도록 도와주는

패키지라고 하네요.
머신에게 넣어줄 배열 데이터를 numpy에 넣어줍니다.

# 데이터
x = np.array([1,2,3])
y = np.array([1,2,3])

 
 
 
 
4) 컴파일, 훈련 

머신은 이 데이터로 컴파일과 훈련을 거치게 되는데요,


compile() 함수는
모델에 손실함수, 최적화방법, 평가지표 등을 넣어줄 수 있습니다.

역시나 오늘 찍먹이니

loss와 optimizer를 저렇게만 넣어주라는 강사님의 설명. 

 

loss 라는 건 머신이 돌아갈때 기대값 과의 차이입니다.
mse(손실함수)는 loss를 처리하는 방식 중 하나입니다.


optimizer = 'adam' 은 최적화 알고리즘 방식이라고 하네요.


이 부분은 텐린이인 저에게 복잡해서
오늘는 찍먹하도록하겠습니다…
학습 후 해당 내용은 반드시 따로 포스팅하도록 하겠습니다!!
 
fit() 함수는
입력 값들과 모델에게 데이터를 넣어주고 

몇 번 학습 시킬건지를 정해줄 수 있습니다.


아래 코드에서 x와 y를 넣고 epochs를 100을 넣어줬죠.

x와 y의 데이터를 가지고 100번 학습시키겠다는 의미입니다.

 

# 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x,y, epochs=100)

 
 
 
 
5) 평가, 예측
 
evaluate() 함수는
x와 y를 이용해 학습시켰을때의 loss 값을 리턴하는 함수입니다.
학습이 많아질수록 loss 값이 꼭 수렴하거나
'최적의 가중치'가 나오는건 아니라고 합니다!!..
 
 
predict() 함수는
학습된 모델에 기대값을 넣으면 모델이 예상하는 도출 결과를 반환합니다.
해당코드에서는 기대값을 4 넣어주었습니다
위에서 fit() 함수로 훈련시켜준 값을 토대로 

예측 결과를 반환해줍니다.

# 평가, 예측
loss = model.evaluate(x,y)
print("loss : ", loss)
result = model.predict([4])
print(“예측값: “, result)

 

 

 

 

결과

코드를 실행하여

4)의 epochs를 조절하며 예측값과 로스를 분석해줍니다.

코드의 답은 없다고 생각합니다.

 

왜냐...

인공지능은 무한정 효율성과 정확도를 올리는

과정의 연속이라고 생각하기 때문입니다..

(입문자 개인적인 견해입니다..)

 

 

 



 
이상 처음 딥러닝 코드를 작성해보았습니다.
개념적으로 부족한 부분이 많습니다.
차차 배워나가며 부족한 부분을 수정해보도록 하겠습니다.
 
 
잘못된 부분이나 궁금하신점 있으시면, 댓글달아주세요.
소통 하고싶습니다.!!!!!
 
 

반응형