딥러닝 기본 코드 실습
tf01_study
# 1. 데이터
import numpy as np
x = np.array([1, 2, 3])
y = np.array([1, 2, 3])
# 2. 모델구성
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(Dense(10, input_dim=1)) # 입력층
model.add(Dense(5)) # 히든 레이어 1
model.add(Dense(7)) # 히든 레이어 2
model.add(Dense(5)) # 히든 레이어 3
model.add(Dense(1)) # 출력층
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x, y, epochs=1000) # epochs(훈련량) 높이면 시간은 늘어남
# 4. 예측, 평가
loss = model.evaluate(x, y) # 평가
print('loss : ', loss) # loss : 8.05281744607235e-14
result = model.predict([4]) # 예측 (4 를 예측해보자. 4는 x result 는 y)
print('4의 예측값 : ', result) # 4의 예측값 : [[4.]]
손실함수 (Loss Function)
ㄴ 값이 낮을수록 학습이 잘 된 것
ㄴ 정답과 알고리즘 출력을 비교할 때 사용
ㄴ 최적의 매개변수(가중치 : w, 편향 : b)을 탐색할 때 손실함수를 가능한 작게 하는 값을 찾음
ㄴ MSE (Mean Squared Error) : 평균 제곱 오류 --> 출력 결과와 데이터 차이 제곱의 평균으로 정답과 오답의 모든 확률 고려
ㄴ CEE (Cross Entropy Error) : 교차 엔트로피 오차 --> 실제 정답의 확률만을 고려한 손실함수 (훈련데이터의 정답 혹은 확률이 0 or 1)
tf02.py
import numpy as np
from keras.models import Sequential # Keras 패키지에서 Sequential 모델을 가져옴
from keras.layers import Dense # Keras 패키지에서 Dense 레이어 클래스를 가져옴
# 1. 데이터
x = np.array([1, 2, 3, 5, 4])
y = np.array([1, 2, 3, 4, 5])
# 2. 모델구성
model = Sequential() # 새로운 Sequential 모델을 생성
model.add(Dense(7, input_dim=1)) # 입력층으로 뉴런 7개를 가진 Dense 레이어를 추가하고, 입력 차원이 1차원임을 명시
model.add(Dense(10)) # 은닉층으로 뉴런 10개를 가진 Dense 레이어를 추가
model.add(Dense(7)) # 은닉층으로 뉴런 7개를 가진 Dense 레이어를 추가
model.add(Dense(1)) # 출력층으로 뉴런 1개를 가진 Dense 레이어를 추가
# 3. 컴파일, 훈련
model.compile(loss='mae', optimizer='adam') # w값이 (-)일 경우 'mae' 사용(loss, 예측값 모두 좋아짐)
# mse --> (y - y')^2 / mae(-값이 나올만 할 경우) --> |y - y'|
model.fit(x, y, epochs=1000) # 데이터 학습량
# 4. 예측, 평가
loss = model.evaluate(x, y) # 평가
print('loss : ', loss) # loss : 0.40052375197410583
result = model.predict([6]) # 예측
print('6의 예측값 : ', result) # 6의 예측값 : [[5.9980288]]
ㄴ MSE : 예측값과 실제값의 차이를 제곱한 후 평균을 구한 것으로, 예측값과 실제값의 차이가 클수록 오차가 크게 반영됨
ㄴ MAE : 예측값과 실제값의 차이의 절댓값을 평균한 것으로, 예측값과 실제값의 차이가 클수록 오차가 크게 반영됨
--> w 값이 (-) 일 경우에 사용
배치 사이즈(batch size)
ㄴ 한 번의 업데이트에 사용되는 샘플의 개수
ㄴ 배치 사이즈가 32인 경우, 32개의 샘플을 모아서 한 번의 업데이트를 수행
ㄴ 작은 배치 사이즈는 모델이 더 자주 업데이트되므로 노이즈가 많은 경향이 있으며, 더 많은 학습 반복이 필요
ㄴ 안정적인 경향이 있으나 메모리 문제와 학습 시간이 길어지는 문제가 발생할 수 있음
ㄴ 딥러닝에서 배치 사이즈는 학습시에 지정되며 일반적으로 32, 64, 128 등 2의 거듭제곱 수를 사용
ㄴ 배치 사이즈는 모델의 크기와 데이터 셋의 크기에 따라 적절하게 조정되어야 함
tf02_batch.py
import numpy as np
from keras.models import Sequential # Keras 패키지에서 Sequential 모델을 가져옴
from keras.layers import Dense # Keras 패키지에서 Dense 레이어 클래스를 가져옴
# 1. 데이터
x = np.array([1, 2, 3, 5, 4])
y = np.array([1, 2, 3, 4, 5])
# 2. 모델구성
model = Sequential()
model.add(Dense(7, input_dim=1))
model.add(Dense(20))
model.add(Dense(10))
model.add(Dense(7))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mae', optimizer='adam') # w값이 (-)일 경우 'mae' 사용(loss, 예측값 모두 좋아짐)
# mse --> (y - y')^2 , |y - y'| --> mae(-값이 나올만 할 경우)
model.fit(x, y, epochs=1000, batch_size=1) # batch_size => 한 번의 업데이트에 사용되는 샘플의 개수
# 4. 예측, 평가
loss = model.evaluate(x, y)
print('loss : ', loss)
result = model.predict([6])
print('6의 예측값 : ', result)
Numpy 의 다차원 배열 연산 - transpose()
ㄴNumpy 의 다차원 배열 연산의 transpose() 함수를 사용하여 행렬을 바꾼 결과 확인
tf03_mlp01.py
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 1. 데이터
x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[1, 2, 1, 1, 2, 1.1, 1.2, 1.4, 1.5, 1.6]])
y = np.array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
print(x.shape) # 데이터 형태 확인 : (2, 10)
print(y.shape) # 데이터 형태 확인 : (10,) --> 위 아래 행 맞추기(행과 열이 맞아야 함)
x = x.transpose()
# x = x.T --> 위와 같은 의미
print(x.shape) # 데이터 형태 확인 : (10, 2)
# 2. 모델구성
model = Sequential()
model.add(Dense(10, input_dim=2))
model.add(Dense(100))
model.add(Dense(50))
model.add(Dense(10))
model.add(Dense(15))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer="adam")
model.fit(x, y, epochs=1000, batch_size=5)
# 4. 평가, 예측
loss = model.evaluate(x, y) # loss : 1.273292560798056e-12
print('loss : ', loss)
result = model.predict([[10, 1.6]])
print('[10]과 [1.6]의 예측값 : ', result) # [10]과 [1.6]의 예측값 : [[20.]]
Numpy 의 다차원 배열 연산 - reshape()
ㄴNumpy 의 다차원 배열 연산의 reshape() 함수를 사용하여 행렬을 바꾼 결과 확인
ㄴ transpose() 와의 차이 확인
import numpy as np # NumPy 라이브러리를 불러와서 사용할 수 있도록 함(np는 numpy 축약)
a = np.array([[1, 2, 3], [4, 5, 6]])
print("Original(안바꾼거) :\n", a) # \n --> 줄바꿈, \t --> 띄어쓰기
a_transpose = np.transpose(a) # 행렬을 바꿔주는 함수
print("Transpose(바꾼거) :\n", a_transpose)
# [[1 4]
# [2 5]
# [3 6]]
a_reshape = np.reshape(a, (3,2)) # 행렬을 바꿔주는 함수
print("Reshape(바꾼거) :\n", a_reshape)
# [[1 2]
# [3 4]
# [5 6]]
# transpose() 와 reshape() 의 차이점 :
# transpose() --> 데이터의 순서대로 바뀜
# reshape() --> 데이터를 변형해서 바뀜
과제 - 모델구성부터 평가예측까지 완성하기
import numpy as np
from keras.models import Sequential
from keras.layers import Dense
# 1. 데이터
x = np.array([[1, 2, 3, 4, 5, 6, 7, 8, 9, 10],
[1, 2, 1, 1, 2, 1.1, 1.2, 1.4, 1.5, 1.6],
[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]])
y = np.array([11, 12, 13, 14, 15, 16, 17, 18, 19, 20])
print(x.shape)
print(y.shape)
x = x.transpose()
# 모델구성부터 평가예측까지 완성하기
# 예측값 : [[10, 1.6, 1]]
# 2. 모델구성
model = Sequential()
model.add(Dense(10, input_dim=3))
model.add(Dense(100))
model.add(Dense(1))
model.add(Dense(1))
# 3. 컴파일, 훈련
model.compile(loss='mse', optimizer='adam')
model.fit(x, y, epochs=100, batch_size=5)
# 4. 평가, 예측
loss = model.evaluate(x, y) # loss : 0.0020495078060775995
print('loss : ', loss)
result = model.predict([[10, 1.6, 1]]) # [10]과 [1.6]과 [1]의 예측값 : [[19.986025]]
print('[10]과 [1.6]과 [1]의 예측값 : ', result)
'네이버클라우드 > AI' 카테고리의 다른 글
AI 2일차 (2023-05-09) 인공지능 기초 - 회귀분석과 분류분석 (0) | 2023.05.09 |
---|---|
AI 2일차 (2023-05-09) 인공지능 기초 - 인공지능 기초개념과 훈련 테스트 데이터 셋 (0) | 2023.05.09 |
AI 1일차 (2023-05-08) 인공지능 기초 - 파이썬(Python) 기초 (0) | 2023.05.08 |
AI 1일차 (2023-05-08) 인공지능 기초 - Python, Keras, TensorFlow, Scikit-learn, Anaconda (0) | 2023.05.08 |
AI 1일차 (2023-05-08) 인공지능 기초 - 인공지능, 머신러닝, 딥러닝 (0) | 2023.05.08 |