AI(인공지능)개발 시 머신러닝, 딥러닝을 사용한다.
AI를 하나의 문장으로 정의하기는 어렵지만,
하나하나 알고리즘을 지정한 프로그래밍으로 동작하는 것이 아닌
스스로 학습해서 예측된 결과를 가지고 지정된 동작을 한다라고 생각할 수는 있다
학습을 시키기 위해서 머신러닝을 사용 하는데
머신러닝은 크게 지도학습, 비지도학습, 강화학습을 한다.
지도학습은 예를 들어 수많은 사과 이미지를 데이터셋으로 모아진 것에 매치해서, 하나하나
사과라는 정답을 라벨이라고 정해서 알려주는 것이다.
비지도학습은 지도학습처럼 하나하나 라벨링하는 것이아닌,
예를 들어 사과와 배가 있다면
공통된 어떤 특징이 있으면 찾아서, 이것을 군집(Clustering)화한 결과로서 예측하는데 사용한다
강화학습은 학습된 결과가 맞으면 학습 가중치를 1 로 주고,
틀렸으면 음수 또는 0에 가깝게 해서
올바른 1의 결과대로 스스로 찾아가도록 하는 것이다.(이것은 가중치 함수마다 다르게 적용한다.)
AI > 머신러닝 > 딥러닝 으로 상위, 하위 개념으로 포함범주를 지정할수 있다.
아래는 제목에 있는 딥러닝을 tensorflow로 사용해보는 파이썬 소스코드 이다.
내장된 데이터셋을 사용하므로 추가 데이터셋을 준비할 필요는 없다.
# tensorflow 전처리 필요
# pip install tensorflow
import tensorflow as tf
from tensorflow.keras import layers, models
# 1. 데이터 로드
mnist = tf.keras.datasets.mnist
(X_train, y_train), (X_test, y_test) = mnist.load_data()
# 2. 데이터 전처리
X_train, X_test = X_train / 255.0, X_test / 255.0 # 정규화
# 3. 모델 정의
model = models.Sequential([
layers.Flatten(input_shape=(28, 28)),
layers.Dense(128, activation='relu'),
layers.Dense(10, activation='softmax')
])
# 4. 모델 컴파일
model.compile(optimizer='adam',
loss='sparse_categorical_crossentropy',
metrics=['accuracy'])
# 5. 모델 학습
model.fit(X_train, y_train, epochs=5, batch_size=32)
# 6. 평가
test_loss, test_acc = model.evaluate(X_test, y_test)
print(f"Test Accuracy: {test_acc:.2f}")
그런데 위소스코드를 파이참이나 VScode에서 사용시
pip install tensorflow 실행후 라이브러리를 설치했음에도
from tensorflow.keras import layers, models
이부분에서 에러가 있을수 있다.
이유는 pyrhon.exe 의 버전이 달라서 생기는 에러일 수 있다.
23.2월 버전사용시에는 에러가 있다.
이때 venv 삭제후 재설치, 환경변수 설치 경로, 권한등 확인작업은 까다로울 수 있으니,
pip install --upgrade pip
이것을 터미널에서 사용해보고,
그래도 에러가 있으면,
python.exe -m pip install --upgrade pip
을 사용하면 에러가 없어진다.
이제 tensorflow.keras import layers, models 라이브러리를 사용할수 있다.
위 tensorflow 소스코드 스크립트가 동작한다.
아래는 tensorflow 딥러닝 실행화면 출력 로그이다.
분석하면,
model.fit 함수는 5번의 에포크(epoch) 동안 모델을 학습시키며, 각 에포크마다 캡쳐화면의 로그를 출력한다.
loss는 모델의 손실값 (작아질수록 모델 성능이 좋아짐),
accuracy는 훈련 데이터에 대한 정확도이다.
모델평가 로그로
model.evaluate 함수는 테스트 데이터를 사용해 모델을 평가하며,
313/313 [==============================] - 0s 1ms/step - loss: 0.0764 - accuracy: 0.9776
로그를 출력한다
위의 결과물인 최종 정확도로서
print(f"Test Accuracy: {test_acc:.2f}") 의 결과는
Test Accuracy: 0.98
즉 정확도가 0.98이라는 Accuracy를 출력한다.
위의 테스트에 사용된 MNIST 데이터셋은 간단한 숫자 손글씨 데이터로 구성되어 있어, 위와 같은 모델로도 높은 정확도를 쉽게 달성할 수 있다.
에포크(epoch)**는 머신러닝, 딥러닝에서 모델이 전체 훈련 데이터를 한 번 모두 학습하는 과정을 의미한다.
즉, 에포크는 훈련 데이터셋을 모델에 통과시키는 횟수이다.
데이터셋이 예를들어 100개이고, epoch를 5로 주면 학습횟수는 100 * 5 = 500 번 이다.
그리고 batch_size=32 라면 한번 학습시 데이터셋을 32개씩 묶는다는 뜻이다.
위 소스코드의
model.fit(X_train, y_train, epochs=5, batch_size=32)
은 모델학습시 데이터셋을 32개씩 묶어서 5번을 학습한다.
그러면,
많이 학습할수록(epoch가 높을수록..) accuracy 등 딥러닝시 결과예측에 긍정적인 영향을 주는가?
꼭 그렇지는 않다.
에포크 수에 관련된 팁으로
- 적절한 에포크 수는
- 너무 적으면 모델이 충분히 학습되지 않아 과소적합(underfitting) 될 수 있다.
- 너무 많으면 모델이 학습 데이터를 과도하게 학습하여 과적합(overfitting) 될 수 있다.
따라서 에포크 수는 모델이 데이터를 얼마나 학습할지의 기준으로 생각해야 한다.
Tensorflow 딥러닝 훈련 중 모델의 학습 과정이다.
- 순전파(Forward Propagation): 입력 데이터를 모델에 통과시키고, 예측 값을 계산한다.
- 손실 함수 계산(Loss Calculation): 모델의 예측 값과 실제 값(정답)을 비교하여 **오차(loss)**를 계산한다.
- 역전파(Backpropagation): 계산된 오차를 기반으로 가중치(모델 파라미터)를 업데이트한다.
- 반복: 이 과정을 여러 번(에포크 동안) 반복하여 모델을 점진적으로 학습시킨다.
위 딥러닝 tensorflow에서 사용한 소스코드에 있는
MNIST 손글씨 이미지 내장 데이터셋에 대해서는 다른 글에서 설명하겠다.
'AI' 카테고리의 다른 글
딥러닝 데이터셋 : MNIST (0) | 2024.11.20 |
---|---|
머신러닝 : Iris 내장 데이터셋 분류 (0) | 2024.11.20 |