딥러닝

[딥러닝] 텐서플로우 기초

eyoo 2022. 6. 10. 09:35
아래의 식을 찾아내는 딥러닝을 만들어 보자.

y = 2 𝒳 - 1
 
딥러닝을 하기위해 tensorflow와 텐서플로우의 keras를 임포트한다.
import tensorflow as tf
from tensorflow import keras

 

1개의 레이어, 그리고 1개의 뉴런을 가지고 있는 뉴럴 네트워크를 모델링 하자

 

먼저 Sequential 클래스를 사용하여 시퀀셜을 만들고

그 안에 layers.Dense를 사용하여 계층을 만든다.

model = tf.keras.Sequential([tf.keras.layers.Dense(units=1,input_shape = (1,))])

# 시퀀셜은 딥러닝 전체의 틀이라고 볼수있다.

# 대문자가 있고 괄호가 있으면 클래스라고 한다.

# Dense는 계층이다.

# units 파라미터를 설정하여 하나의 뉴런이 들어올것이라고 정한다. (노드 숫자)

# input_shape으로 들어올 데이터의 shape을 정한다.

 

 

컴파일 하기 위해서는 loss 와 optimizer. 함수가 필요하다.

# 컴파일은 loss 와 optimizer. 함수를 정해주는 과정이라고 보면된다.

 

loss 함수로 'mean squared error'를 사용하고, 옵티마이저로 'stochastic gradient descent' 를 사용해보자

 

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

# optimizer 파라미터와 loss 파라미터를 사용한다.

 

학습할 데이터를 임의로 설정하자

 

x = np.array([-1,0,1,2,3,4])
y = np.array([-3,-1,1,3,5,7])

# y = 2 𝒳 - 1식에 맞춰 들어갈값과 정답을 정하고 학습시켜서 스스로 답을 구하는 방법을 찾게 한다.

 

 

 

x와 y의 관계를 찾기 위해서, 학습하는 함수인 model.fit 함수를 호출한다.

 

in:

model.fit(x,y)

out:

1/1 [==============================] - 0s 419ms/step - loss: 60.0871

# 좋은 모델인지 아닌지 평가할 수 있는 loss 값을 제공한다.

 

 

model.predict 함수를 이용해서 새로운 데이터를 예측할 수 있다.

 

10을 넣어 예측해보자

 

in:

model.predict([10])

out:

array([[-13.24723]], dtype=float32)

# 우리가 예상한 값인 19와 너무 다르게 나온다. (y = 2 𝒳 - 1)

# 오차가 크다는 뜻

 

 

이는 학습할때 에포크 설정을 하지않아 학습 데이터를 한번만 학습하고 끝냈기 때문이다.

 

다시 시퀀셜을 설정하고 이번에는 에포크 값을 500으로 설정하고 학습하자.

 

model.fit(x,y, epochs=500)

# epochs 파라미터로 에포크값을 정한다.

 

 

다시 10을 넣어 예측해보자.

 

in:

model.predict([10])

out:

array([[18.999987]], dtype=float32)

# 19와 근접하게 나오며 오차가 많이 감소한것을 볼수있다.