[딥러닝] 텐서플로우 기초
y = 2 𝒳 - 1
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와 근접하게 나오며 오차가 많이 감소한것을 볼수있다.