딥러닝은 CPU보다는 GPU로!!
NVIDIA의 CUDA.
Keras?
AI에 대한 접근성을 높이고, 딥러닝의 대중화를 이룬 프레임워크.
파이썬으로 구현된 하이 레벨 딥러닝 API.
세팅만으로 텐서플로우(Tensorflow), 테아노(Theano), CNTK(음성처리에 good)를 돌릴 수 있다.
쉬운 사용법과 간단한 문법으로 빠른 설계가 가능하다는 이점이 있다.
딥러닝?
원본 입력(숫자3)→□(hidden layer1)→□(hidden layer2)→□(hidden layer3)→□(hidden layer4)→□□■□□□□□□(최종 출력)
위의 구조는 딥러닝의 일반적인 구성을 나타내는 것이다. 딥러닝은 인공 신경망의 한 종류로, 다양한 은닉층(hidden layer)을 거치면서 입력 데이터를 최종 출력으로 변환하는 과정을 수행한다.
딥러닝은 원본 입력 데이터(예: 숫자 3)을 네트워크의 첫 번째 은닉층(hidden layer1)에 입력한다. 은닉층은 입력 데이터에 가중치(weight)를 곱하고 편향(bias)을 더한 후, 활성화 함수(activation function)를 적용하여 출력값을 계산한다. 이렇게 계산된 값을 다음 은닉층(hidden layer2)에 입력으로 전달한다.
이러한 과정은 은닉층(hidden layer3)과 은닉층(hidden layer4)를 거치면서 반복된다. 각 은닉층은 이전 은닉층의 출력을 입력으로 받아 가중치와 편향을 곱하고 활성화 함수를 적용하여 출력값을 계산한다. 이런 식으로 최종적으로 출력층(output layer)에 도달하게 되며, 출력층에서는 최종 예측값을 얻는다.
딥러닝에서는 일반적으로 활성화 함수로는 비선형 함수를 사용한. 비선형 함수를 사용함으로써 딥러닝은 복잡한 비선형 관계를 모델링할 수 있다. 또한, 역전파(backpropagation) 알고리즘을 사용하여 예측 결과와 실제값의 오차를 최소화하기 위해 가중치와 편향을 조정하면서 학습이 이루어진다.
딥러닝은 복잡한 패턴인식, 분류, 회귀 등 다양한 문제를 다룰 수 있으며, 이미지 인식, 자연어 처리, 음성인식 등 다양한 분야에서 많은 성과를 이루고 있다.
*MNIST
MNIST 데이터셋은 손으로 쓴 숫자들의 흑백 이미지로 구성되어 있으며, 0부터 9까지의 숫자를 나타낸다. 각 이미지는 28x28 픽셀 크기로 구성되어 있어서 총 784개의 픽셀로 이루어진 벡터로 표현된다. 이 데이터셋은 주로 손글씨 숫자 인식 문제를 다루기 위해 사용되며, 머신러닝 모델의 성능을 평가하고 비교하는데 널리 사용된다.
---> 벤치마크 데이터셋
신경망 만들기!!
■ Keras에서 mnist 데이터 가져오기
from keras.datasets import mnist
(train_images, train_labels), (test_images, test_labels) = mnist.load_data()
train_images.shape
>> (60000, 28, 28)
■ 전체 개수 확인하기
len(train_labels)
>> 60000
test_images.shape
>> (10000, 28, 28)
from keras import models
from keras import layers
■ 신경망 추가하기, 레이어 추가하기
*Sequential: 순차적으로 신경망을 만든다는 뜻
*레이어 두 개 만들기
*입력될 값 지정 input_shape=(28*28,)))
network = models.Sequential()
network.add(layers.Dense(512, activation='relu', input_shape=(28*28,)))
network.add(layers.Dense(10, activation='softmax'))
network.compile(optimizer='rmsprop',
loss='categorical_crossentropy',
metrics=['accuracy'])
train_images = train_images.reshape((60000,28*28))
train_images = train_images.astype('float32')
print(train_images[0])

생략
■ 0~255값을 255로 나눠서 사용하기 좋게 만들기
train_images = train_images.reshape((60000, 28 * 28))
train_images = train_images.astype('float32') / 255
test_images = test_images.reshape((10000, 28*28))
test_image = test_images.astype('float32')/255
print(train_images[0])
■ 분류형 데이터 설정. 수치가 아닌 0~9까지의 categorical 데이터임을 명시
from tensorflow.keras.utils import to_categorical
train_labels = to_categorical(train_labels)
test_labels = to_categorical(test_labels)
--> 데이터 준비 완료. 이제 훈련을 시켜보자.
■ 학습시키기
network.fit(train_images, train_labels, epochs=5, batch_size=128)
>>
오차(loss)가 줄어드는 게 마냥 좋은 게 아니다. 정확도(accuracy)가 중요
■ 평가 결과 보기
test_loss, test_acc = network.evaluate(test_images, test_labels)
>> 313/313 [==============================] - 1s 3ms/step - loss: 13.4985 - accuracy: 0.9782
■ 정확도 확인하기
print('test_acc: ', test_acc)
>> test_acc: 0.9782000184059143
'MS AI School' 카테고리의 다른 글
DAY 29 - Docker 도커? (0) | 2022.12.06 |
---|---|
DAY 28 - 딥러닝 Training 과정 (0) | 2022.12.06 |
Day 26 - 신경망 구조(퍼셉트론, 논리회로, 활성화 함수) (0) | 2022.11.29 |
Day 25 - 신경망 데이터(텐서, 1차원, 2차원, 3차원..) (0) | 2022.11.29 |
DAY 24 - 신경망 기초 수학 (0) | 2022.11.26 |