기본 환경: IDE: VS code, Language: Python
ANN 기본 모델 구축
# ann_model.py
import numpy as np
# 1. Refined Deta
x = np.array([1, 2, 3])
y = np.array([1, 2, 3])
# 2. Model Construction
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
model = Sequential()
model.add(Dense(1, input_dim=1))
# 3. compile and training for best weight, minimum loss
model.compile(loss='mae', optimizer='adam')
model.fit(x, y, epochs=10)
# 4. Evaluation and Prediction
result1 = model.predict([4])
print('result1: ', result1)
# 5. ect
model.fit(x, y, epochs=1000)
result2 = model.predict([4])
print('result2: ', result2)
model.fit(x, y, epochs=3000)
result3 = model.predict([4])
print('result3: ', result3)
'''
result1
Epoch 100/100
Result1: [[4.001488]]
result2
Epoch 1000/1000
Result2: [[3.9903853]]
result3
Epoch 3000/3000
Result3: [[4.000531]]
'''
Source Code 원본 주소: basic_ML_model.py
코드 해석
import numpy as np
: numpy* import 및 약칭 np 지정
* numpy: 다차원 배열, n*n 행렬 등을 고속으로 처리할 수 있도록 도움을 주는 Python Library로, Numpy를 통해 생성한 배열을 ndarray(N-Dimension Array)라고 함
numpy library를 import하여 numpy에서 제공하는 다양한 method를 사용할 수 있음
- np.shape: ndarray의 dimension 구성 반환
- np.dtype: ndarray의 data type 반환
- np.ndim: ndarray의 dimension 수 반환
- np.size: ndarray의 data 개수 반환
# useful_method_from_numpy.py
import numpy as np
x = np.array([[1, 2, 3, 4],
[2, 3, 4, 5],
[3, 4, 5, 6]])
print(x.shape) # (3, 4)
print(x.dtype) # int32
print(x.ndim) # 2
print(x.size) # 12
y = np.array([1,2,3])
print(y.ndim) # 1
z = np.array([[[1],[2]],[[11],[22]]])
print(z.ndim) # 3
Source Code 원본 주소: useful_method_from_numpy.py
model = Sequential()
순차모델 사용, 신경망 계층을 순차적으로 더하여 순차 모델로 불리며 신경망을 구성하는 방법 중 가장 기본적인 방법
차후, 복잡한 모델을 구성할 때에는 함수형 모델*(Functional Model)을 사용할 수 있음
* 함수형 모델은 신경망 계층을 순차적으로 계산하지 않을 수 있음
➕ Functional Model
# 2. Model(Function)
from tensorflow.keras.models import Model
from tensorflow.keras.layers import Input
input1 = Input(shape=(13,)) # input_shape=(13,)
dense1 = Dense(50, activation='relu')(input1) # Hidden Layer
dense2 = Dense(40, activation='sigmoid')(dense1)
dense3 = Dense(30, activation='relu')(dense2)
dense4 = Dense(20, activation='linear')(dense3)
output1 = Dense(1, activation='linear')(dense4) # output=1
model = Model(inputs=input1, outputs=output1) # Model Construction 끝 부분에서 최종적으로 input과 out을 정리
# Sequential model과 달리 dense를 직접 입력할 수 있으므로 순차적으로 계산하지 않을 수 있음
# (Sequential에서 2번째 layer 층을 순서를 옮겨서 4번째 layer 층으로 만들 수 있음)
# Sequential model과 달리 dense를 skip 할 수 있음
model.add(Dense(1, input_dim=1))
모델에 Dense Layer를 순차적으로 추가
Dense layer는 인공신경망(Artifical Neuron Network)에서 사용되는 레이어로, 입력과 출력을 연결시켜주는 역할을 함
layer의 종류로는 Dense 외에도 Convolution, MaxPooling, Flatten 등이 있음
- Dense의 첫 번째 인자: 출력 뉴런수
- Dense의 두 번째 인자: 입력 뉴런수
model.compile(loss='mae', optimizer='adam')
구성한 모델을 실제로 생성
loss를 측정하는 방법으로는 mae(mininum absolute error) 사용
오차를 보정하는 방법으로는 adam 사용
model.fit(x, y, epochs=10)
모델을 훈련하는 과정
- fit의 첫 번째 인자: x_train_data
- fit의 두 번째 인자: y_train_data
- fit의 세번째 인자: epochs, 훈련 횟수
⚠️ 초기 weight가 랜덤값이므로 실행 시 마다 훈련 결과가 달라짐
⚠️ epochs가 과하게 높을 경우, 과적합(Overfitting) 문제가 발생할 수 있으므로 유의
➕ fit(verbose)에 따른 출력 형태 타입
model.fit(x, y, epochs=10, verbose=0)
'''
Result
진행과정 나오지 않음
'''
model.fit(x, y, epochs=10, verbose=1)
'''
Result
Epoch 50/50
323/323 [==============================] - 0s 762us/step - loss: 45.8877 - val_loss: 38.3869
'''
model.fit(x, y, epochs=10, verbose=2)
'''
Result
Epoch 50/50
323/323 - 0s - loss: 43.5736 - val_loss: 33.5931 - 214ms/epoch - 664us/step
'''
model.fit(x, y, epochs=10, verbose=3)
'''
Result # verbose = 3 이상
Epoch 50/50
'''
소스 코드
'Naver Clould with BitCamp > Aartificial Intelligence' 카테고리의 다른 글
Scalar, Vector, Matirx, Tensor (0) | 2023.01.20 |
---|---|
MultiLayer Perceptron (0) | 2023.01.20 |
Hyper-parameter Tuning (0) | 2023.01.20 |
Types of Artificial Neural Networks (0) | 2023.01.15 |
Practice for AI Learning Model Construction (0) | 2023.01.14 |