딥러닝
라이브러리
* tensorflow는 프레임워크라고 함
* 텐서플로우 안에 keras가 딥러닝 내용을 가지고 있음
* keras는 딥러닝 모델을 쉽게 정의하고 훈련시키기 위한 고수준 API를 제공하는 인기 있는 딥러닝 라이브러리
import tensorflow as tf
from tensorflow import keras
import matplotlib.pyplot as plt
import numpy as np
- 실행 결과를 동일하게 하기 위한 처리(완전 동일하지 않을 수도 있음)
tf.keras.utils.set_random_seed(42)
- 연산 고정
tf.config.experimental.enable_op_determinism()
데이터 수집
* keras에서 제공해주는 이미지 데이터셋 사용
- MNIST 패션 이미지
- 이미지 데이터는 픽셀 데이터로 이루어져 있습니다.
(train_input, train_target), (test_input, test_target) = keras.datasets.fashion_mnist.load_data()
print(train_input.shape , train_target.shape)
print(test_input.shape , test_target.shape)
출력 : (60000, 28, 28) (60000,)
(10000, 28, 28) (10000,)
※ 첫번째()에는 train데이터 튜플로 가져오고 두번째()에는 test데이터 튜플로 가져오기
※ (60000, 28, 28) : 60000개 행, 높이 28, 너비 28개 데이터
* 이미지 1개에 대한 데이터 추출
- 각 데이터는 픽셀값(색상값)
- 픽셀값(색상값)은 0~255 (총 256개의 값들로 구성되어 있음)
train_input[0]
출력 :
array([[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 13, 73, 0, 0, 1, 4, 0, 0, 0, 0, 1,
1, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
0, 36, 136, 127, 62, 54, 0, 0, 0, 1, 3, 4, 0,
0, 3],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
0, 102, 204, 176, 134, 144, 123, 23, 0, 0, 0, 0, 12,
10, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 155, 236, 207, 178, 107, 156, 161, 109, 64, 23, 77, 130,
72, 15],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
69, 207, 223, 218, 216, 216, 163, 127, 121, 122, 146, 141, 88,
172, 66],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
200, 232, 232, 233, 229, 223, 223, 215, 213, 164, 127, 123, 196,
229, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183, 225, 216, 223, 228, 235, 227, 224, 222, 224, 221, 223, 245,
173, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193, 228, 218, 213, 198, 180, 212, 210, 211, 213, 223, 220, 243,
202, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 12,
219, 220, 212, 218, 192, 169, 227, 208, 218, 224, 212, 226, 197,
209, 52],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 99,
244, 222, 220, 218, 203, 198, 221, 215, 213, 222, 220, 245, 119,
167, 56],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 55,
236, 228, 230, 228, 240, 232, 213, 218, 223, 234, 217, 217, 209,
92, 0],
[ 0, 0, 1, 4, 6, 7, 2, 0, 0, 0, 0, 0, 237,
226, 217, 223, 222, 219, 222, 221, 216, 223, 229, 215, 218, 255,
77, 0],
[ 0, 3, 0, 0, 0, 0, 0, 0, 0, 62, 145, 204, 228,
207, 213, 221, 218, 208, 211, 218, 224, 223, 219, 215, 224, 244,
159, 0],
[ 0, 0, 0, 0, 18, 44, 82, 107, 189, 228, 220, 222, 217,
226, 200, 205, 211, 230, 224, 234, 176, 188, 250, 248, 233, 238,
215, 0],
[ 0, 57, 187, 208, 224, 221, 224, 208, 204, 214, 208, 209, 200,
159, 245, 193, 206, 223, 255, 255, 221, 234, 221, 211, 220, 232,
246, 0],
[ 3, 202, 228, 224, 221, 211, 211, 214, 205, 205, 205, 220, 240,
80, 150, 255, 229, 221, 188, 154, 191, 210, 204, 209, 222, 228,
225, 0],
[ 98, 233, 198, 210, 222, 229, 229, 234, 249, 220, 194, 215, 217,
241, 65, 73, 106, 117, 168, 219, 221, 215, 217, 223, 223, 224,
229, 29],
[ 75, 204, 212, 204, 193, 205, 211, 225, 216, 185, 197, 206, 198,
213, 240, 195, 227, 245, 239, 223, 218, 212, 209, 222, 220, 221,
230, 67],
[ 48, 203, 183, 194, 213, 197, 185, 190, 194, 192, 202, 214, 219,
221, 220, 236, 225, 216, 199, 206, 186, 181, 177, 172, 181, 205,
206, 115],
[ 0, 122, 219, 193, 179, 171, 183, 196, 204, 210, 213, 207, 211,
210, 200, 196, 194, 191, 195, 191, 198, 192, 176, 156, 167, 177,
210, 92],
[ 0, 0, 74, 189, 212, 191, 175, 172, 175, 181, 185, 188, 189,
188, 193, 198, 204, 209, 210, 210, 211, 188, 188, 194, 192, 216,
170, 0],
[ 2, 0, 0, 0, 66, 200, 222, 237, 239, 242, 246, 243, 244,
221, 220, 193, 191, 179, 182, 182, 181, 176, 166, 168, 99, 58,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 40, 61, 44, 72, 41, 35,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0]], dtype=uint8)
훈련데이터 10개만 이용해서 데이터를 이미지로 시각화하기
* 서브플롯 사용 : 이미지 10개를 하나로 시각화
* 픽셀데이터를 이미지로 시각화 : imshow()
* x, y 좌표계 숨기기 : axis("off")
fig, axs = plt.subplots(1, 10, figsize=(10, 10))
"""훈련데이터 10개에 대한 처리"""
for i in range(10):
axs[i].imshow(train_input[i], cmap="gray_r")
axs[i].axis("off")
plt.show()
출력 :
* 종속변수 10개 추출해서 매핑된 값 확인해 보기
train_target[:10]
출력 : array([9, 0, 0, 3, 0, 2, 7, 2, 5, 5], dtype=uint8)
* 종속변수의 범주값 확인하기
- unique()에서 return_counts=True : 하면 train_target에 있는 범주의 갯수를 세어줌.
np.unique(train_target, return_counts=True)
출력 : (array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9], dtype=uint8),
array([6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000, 6000],
dtype=int64))
데이터 스케일링
- 사용되는 데이터의 특성상 0부터 255까지의 값을 가지고 있음
- 값의 범위폭이 크기 때문에 일반화(정규화)하여 사용
- 정규화를 수행하는 방법으로 라이브러리를 사용해도 되며,
값의 최대값을 이용해 산술연산을 이용해서 데이터 스케일링을 해도 된다.
train_input[0]
출력 :
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1,
0, 0, 13, 73, 0, 0, 1, 4, 0, 0, 0, 0, 1,
1, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 3,
0, 36, 136, 127, 62, 54, 0, 0, 0, 1, 3, 4, 0,
0, 3],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6,
0, 102, 204, 176, 134, 144, 123, 23, 0, 0, 0, 0, 12,
10, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 155, 236, 207, 178, 107, 156, 161, 109, 64, 23, 77, 130,
72, 15],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0,
69, 207, 223, 218, 216, 216, 163, 127, 121, 122, 146, 141, 88,
172, 66],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 0,
200, 232, 232, 233, 229, 223, 223, 215, 213, 164, 127, 123, 196,
229, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
183, 225, 216, 223, 228, 235, 227, 224, 222, 224, 221, 223, 245,
173, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
193, 228, 218, 213, 198, 180, 212, 210, 211, 213, 223, 220, 243,
202, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 3, 0, 12,
219, 220, 212, 218, 192, 169, 227, 208, 218, 224, 212, 226, 197,
209, 52],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 6, 0, 99,
244, 222, 220, 218, 203, 198, 221, 215, 213, 222, 220, 245, 119,
167, 56],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 0, 0, 55,
236, 228, 230, 228, 240, 232, 213, 218, 223, 234, 217, 217, 209,
92, 0],
[ 0, 0, 1, 4, 6, 7, 2, 0, 0, 0, 0, 0, 237,
226, 217, 223, 222, 219, 222, 221, 216, 223, 229, 215, 218, 255,
77, 0],
[ 0, 3, 0, 0, 0, 0, 0, 0, 0, 62, 145, 204, 228,
207, 213, 221, 218, 208, 211, 218, 224, 223, 219, 215, 224, 244,
159, 0],
[ 0, 0, 0, 0, 18, 44, 82, 107, 189, 228, 220, 222, 217,
226, 200, 205, 211, 230, 224, 234, 176, 188, 250, 248, 233, 238,
215, 0],
[ 0, 57, 187, 208, 224, 221, 224, 208, 204, 214, 208, 209, 200,
159, 245, 193, 206, 223, 255, 255, 221, 234, 221, 211, 220, 232,
246, 0],
[ 3, 202, 228, 224, 221, 211, 211, 214, 205, 205, 205, 220, 240,
80, 150, 255, 229, 221, 188, 154, 191, 210, 204, 209, 222, 228,
225, 0],
[ 98, 233, 198, 210, 222, 229, 229, 234, 249, 220, 194, 215, 217,
241, 65, 73, 106, 117, 168, 219, 221, 215, 217, 223, 223, 224,
229, 29],
[ 75, 204, 212, 204, 193, 205, 211, 225, 216, 185, 197, 206, 198,
213, 240, 195, 227, 245, 239, 223, 218, 212, 209, 222, 220, 221,
230, 67],
[ 48, 203, 183, 194, 213, 197, 185, 190, 194, 192, 202, 214, 219,
221, 220, 236, 225, 216, 199, 206, 186, 181, 177, 172, 181, 205,
206, 115],
[ 0, 122, 219, 193, 179, 171, 183, 196, 204, 210, 213, 207, 211,
210, 200, 196, 194, 191, 195, 191, 198, 192, 176, 156, 167, 177,
210, 92],
[ 0, 0, 74, 189, 212, 191, 175, 172, 175, 181, 185, 188, 189,
188, 193, 198, 204, 209, 210, 210, 211, 188, 188, 194, 192, 216,
170, 0],
[ 2, 0, 0, 0, 66, 200, 222, 237, 239, 242, 246, 243, 244,
221, 220, 193, 191, 179, 182, 182, 181, 176, 166, 168, 99, 58,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 40, 61, 44, 72, 41, 35,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0],
[ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0]], dtype=uint8)
* 데이터 스케일링 수행하기
- 훈련 데이터
train_scaled_255 = train_input / 255.0
train_scaled_255[0]
출력 :
array([[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.00392157, 0. , 0. ,
0.05098039, 0.28627451, 0. , 0. , 0.00392157,
0.01568627, 0. , 0. , 0. , 0. ,
0.00392157, 0.00392157, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.01176471, 0. , 0.14117647,
0.53333333, 0.49803922, 0.24313725, 0.21176471, 0. ,
0. , 0. , 0.00392157, 0.01176471, 0.01568627,
0. , 0. , 0.01176471],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.02352941, 0. , 0.4 ,
0.8 , 0.69019608, 0.5254902 , 0.56470588, 0.48235294,
0.09019608, 0. , 0. , 0. , 0. ,
0.04705882, 0.03921569, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.60784314,
0.9254902 , 0.81176471, 0.69803922, 0.41960784, 0.61176471,
0.63137255, 0.42745098, 0.25098039, 0.09019608, 0.30196078,
0.50980392, 0.28235294, 0.05882353],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0.00392157, 0. , 0.27058824, 0.81176471,
0.8745098 , 0.85490196, 0.84705882, 0.84705882, 0.63921569,
0.49803922, 0.4745098 , 0.47843137, 0.57254902, 0.55294118,
0.34509804, 0.6745098 , 0.25882353],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.00392157,
0.00392157, 0.00392157, 0. , 0.78431373, 0.90980392,
0.90980392, 0.91372549, 0.89803922, 0.8745098 , 0.8745098 ,
0.84313725, 0.83529412, 0.64313725, 0.49803922, 0.48235294,
0.76862745, 0.89803922, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.71764706, 0.88235294,
0.84705882, 0.8745098 , 0.89411765, 0.92156863, 0.89019608,
0.87843137, 0.87058824, 0.87843137, 0.86666667, 0.8745098 ,
0.96078431, 0.67843137, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.75686275, 0.89411765,
0.85490196, 0.83529412, 0.77647059, 0.70588235, 0.83137255,
0.82352941, 0.82745098, 0.83529412, 0.8745098 , 0.8627451 ,
0.95294118, 0.79215686, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.00392157,
0.01176471, 0. , 0.04705882, 0.85882353, 0.8627451 ,
0.83137255, 0.85490196, 0.75294118, 0.6627451 , 0.89019608,
0.81568627, 0.85490196, 0.87843137, 0.83137255, 0.88627451,
0.77254902, 0.81960784, 0.20392157],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0.02352941, 0. , 0.38823529, 0.95686275, 0.87058824,
0.8627451 , 0.85490196, 0.79607843, 0.77647059, 0.86666667,
0.84313725, 0.83529412, 0.87058824, 0.8627451 , 0.96078431,
0.46666667, 0.65490196, 0.21960784],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.01568627,
0. , 0. , 0.21568627, 0.9254902 , 0.89411765,
0.90196078, 0.89411765, 0.94117647, 0.90980392, 0.83529412,
0.85490196, 0.8745098 , 0.91764706, 0.85098039, 0.85098039,
0.81960784, 0.36078431, 0. ],
[0. , 0. , 0.00392157, 0.01568627, 0.02352941,
0.02745098, 0.00784314, 0. , 0. , 0. ,
0. , 0. , 0.92941176, 0.88627451, 0.85098039,
0.8745098 , 0.87058824, 0.85882353, 0.87058824, 0.86666667,
0.84705882, 0.8745098 , 0.89803922, 0.84313725, 0.85490196,
1. , 0.30196078, 0. ],
[0. , 0.01176471, 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.24313725,
0.56862745, 0.8 , 0.89411765, 0.81176471, 0.83529412,
0.86666667, 0.85490196, 0.81568627, 0.82745098, 0.85490196,
0.87843137, 0.8745098 , 0.85882353, 0.84313725, 0.87843137,
0.95686275, 0.62352941, 0. ],
[0. , 0. , 0. , 0. , 0.07058824,
0.17254902, 0.32156863, 0.41960784, 0.74117647, 0.89411765,
0.8627451 , 0.87058824, 0.85098039, 0.88627451, 0.78431373,
0.80392157, 0.82745098, 0.90196078, 0.87843137, 0.91764706,
0.69019608, 0.7372549 , 0.98039216, 0.97254902, 0.91372549,
0.93333333, 0.84313725, 0. ],
[0. , 0.22352941, 0.73333333, 0.81568627, 0.87843137,
0.86666667, 0.87843137, 0.81568627, 0.8 , 0.83921569,
0.81568627, 0.81960784, 0.78431373, 0.62352941, 0.96078431,
0.75686275, 0.80784314, 0.8745098 , 1. , 1. ,
0.86666667, 0.91764706, 0.86666667, 0.82745098, 0.8627451 ,
0.90980392, 0.96470588, 0. ],
[0.01176471, 0.79215686, 0.89411765, 0.87843137, 0.86666667,
0.82745098, 0.82745098, 0.83921569, 0.80392157, 0.80392157,
0.80392157, 0.8627451 , 0.94117647, 0.31372549, 0.58823529,
1. , 0.89803922, 0.86666667, 0.7372549 , 0.60392157,
0.74901961, 0.82352941, 0.8 , 0.81960784, 0.87058824,
0.89411765, 0.88235294, 0. ],
[0.38431373, 0.91372549, 0.77647059, 0.82352941, 0.87058824,
0.89803922, 0.89803922, 0.91764706, 0.97647059, 0.8627451 ,
0.76078431, 0.84313725, 0.85098039, 0.94509804, 0.25490196,
0.28627451, 0.41568627, 0.45882353, 0.65882353, 0.85882353,
0.86666667, 0.84313725, 0.85098039, 0.8745098 , 0.8745098 ,
0.87843137, 0.89803922, 0.11372549],
[0.29411765, 0.8 , 0.83137255, 0.8 , 0.75686275,
0.80392157, 0.82745098, 0.88235294, 0.84705882, 0.7254902 ,
0.77254902, 0.80784314, 0.77647059, 0.83529412, 0.94117647,
0.76470588, 0.89019608, 0.96078431, 0.9372549 , 0.8745098 ,
0.85490196, 0.83137255, 0.81960784, 0.87058824, 0.8627451 ,
0.86666667, 0.90196078, 0.2627451 ],
[0.18823529, 0.79607843, 0.71764706, 0.76078431, 0.83529412,
0.77254902, 0.7254902 , 0.74509804, 0.76078431, 0.75294118,
0.79215686, 0.83921569, 0.85882353, 0.86666667, 0.8627451 ,
0.9254902 , 0.88235294, 0.84705882, 0.78039216, 0.80784314,
0.72941176, 0.70980392, 0.69411765, 0.6745098 , 0.70980392,
0.80392157, 0.80784314, 0.45098039],
[0. , 0.47843137, 0.85882353, 0.75686275, 0.70196078,
0.67058824, 0.71764706, 0.76862745, 0.8 , 0.82352941,
0.83529412, 0.81176471, 0.82745098, 0.82352941, 0.78431373,
0.76862745, 0.76078431, 0.74901961, 0.76470588, 0.74901961,
0.77647059, 0.75294118, 0.69019608, 0.61176471, 0.65490196,
0.69411765, 0.82352941, 0.36078431],
[0. , 0. , 0.29019608, 0.74117647, 0.83137255,
0.74901961, 0.68627451, 0.6745098 , 0.68627451, 0.70980392,
0.7254902 , 0.7372549 , 0.74117647, 0.7372549 , 0.75686275,
0.77647059, 0.8 , 0.81960784, 0.82352941, 0.82352941,
0.82745098, 0.7372549 , 0.7372549 , 0.76078431, 0.75294118,
0.84705882, 0.66666667, 0. ],
[0.00784314, 0. , 0. , 0. , 0.25882353,
0.78431373, 0.87058824, 0.92941176, 0.9372549 , 0.94901961,
0.96470588, 0.95294118, 0.95686275, 0.86666667, 0.8627451 ,
0.75686275, 0.74901961, 0.70196078, 0.71372549, 0.71372549,
0.70980392, 0.69019608, 0.65098039, 0.65882353, 0.38823529,
0.22745098, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.15686275, 0.23921569, 0.17254902,
0.28235294, 0.16078431, 0.1372549 , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ]])
- 테스트 데이터
test_scaled_255 = test_input / 255.0
test_scaled_255[0]
출력 :
array([[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0.01176471,
0.00392157, 0. , 0. , 0.02745098, 0. ,
0.14509804, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.00392157, 0.00784314,
0. , 0.10588235, 0.32941176, 0.04313725, 0. ,
0. , 0. , 0. , 0. , 0. ,
0.46666667, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.00392157, 0. ,
0. , 0.34509804, 0.56078431, 0.43137255, 0. ,
0. , 0. , 0. , 0.08627451, 0.36470588,
0.41568627, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0.01568627, 0. ,
0.20784314, 0.50588235, 0.47058824, 0.57647059, 0.68627451,
0.61568627, 0.65098039, 0.52941176, 0.60392157, 0.65882353,
0.54901961, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0.00784314, 0. , 0.04313725,
0.5372549 , 0.50980392, 0.50196078, 0.62745098, 0.69019608,
0.62352941, 0.65490196, 0.69803922, 0.58431373, 0.59215686,
0.56470588, 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0.00392157, 0. , 0.00784314, 0.00392157,
0. , 0.01176471, 0. , 0. , 0.45098039,
0.44705882, 0.41568627, 0.5372549 , 0.65882353, 0.6 ,
0.61176471, 0.64705882, 0.65490196, 0.56078431, 0.61568627,
0.61960784, 0.04313725, 0. ],
[0. , 0. , 0. , 0. , 0.00392157,
0. , 0. , 0. , 0. , 0. ,
0.01176471, 0. , 0. , 0.34901961, 0.54509804,
0.35294118, 0.36862745, 0.6 , 0.58431373, 0.51372549,
0.59215686, 0.6627451 , 0.6745098 , 0.56078431, 0.62352941,
0.6627451 , 0.18823529, 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0.00784314, 0.01568627, 0.00392157, 0. ,
0. , 0. , 0.38431373, 0.53333333, 0.43137255,
0.42745098, 0.43137255, 0.63529412, 0.52941176, 0.56470588,
0.58431373, 0.62352941, 0.65490196, 0.56470588, 0.61960784,
0.6627451 , 0.46666667, 0. ],
[0. , 0. , 0.00784314, 0.00784314, 0.00392157,
0.00784314, 0. , 0. , 0. , 0. ,
0.10196078, 0.42352941, 0.45882353, 0.38823529, 0.43529412,
0.45882353, 0.53333333, 0.61176471, 0.5254902 , 0.60392157,
0.60392157, 0.61176471, 0.62745098, 0.55294118, 0.57647059,
0.61176471, 0.69803922, 0. ],
[0.01176471, 0. , 0. , 0. , 0. ,
0. , 0. , 0.08235294, 0.20784314, 0.36078431,
0.45882353, 0.43529412, 0.40392157, 0.45098039, 0.50588235,
0.5254902 , 0.56078431, 0.60392157, 0.64705882, 0.66666667,
0.60392157, 0.59215686, 0.60392157, 0.56078431, 0.54117647,
0.58823529, 0.64705882, 0.16862745],
[0. , 0. , 0.09019608, 0.21176471, 0.25490196,
0.29803922, 0.33333333, 0.4627451 , 0.50196078, 0.48235294,
0.43529412, 0.44313725, 0.4627451 , 0.49803922, 0.49019608,
0.54509804, 0.52156863, 0.53333333, 0.62745098, 0.54901961,
0.60784314, 0.63137255, 0.56470588, 0.60784314, 0.6745098 ,
0.63137255, 0.74117647, 0.24313725],
[0. , 0.26666667, 0.36862745, 0.35294118, 0.43529412,
0.44705882, 0.43529412, 0.44705882, 0.45098039, 0.49803922,
0.52941176, 0.53333333, 0.56078431, 0.49411765, 0.49803922,
0.59215686, 0.60392157, 0.56078431, 0.58039216, 0.49019608,
0.63529412, 0.63529412, 0.56470588, 0.54117647, 0.6 ,
0.63529412, 0.76862745, 0.22745098],
[0.2745098 , 0.6627451 , 0.50588235, 0.40784314, 0.38431373,
0.39215686, 0.36862745, 0.38039216, 0.38431373, 0.4 ,
0.42352941, 0.41568627, 0.46666667, 0.47058824, 0.50588235,
0.58431373, 0.61176471, 0.65490196, 0.74509804, 0.74509804,
0.76862745, 0.77647059, 0.77647059, 0.73333333, 0.77254902,
0.74117647, 0.72156863, 0.14117647],
[0.0627451 , 0.49411765, 0.67058824, 0.7372549 , 0.7372549 ,
0.72156863, 0.67058824, 0.6 , 0.52941176, 0.47058824,
0.49411765, 0.49803922, 0.57254902, 0.7254902 , 0.76470588,
0.81960784, 0.81568627, 1. , 0.81960784, 0.69411765,
0.96078431, 0.98823529, 0.98431373, 0.98431373, 0.96862745,
0.8627451 , 0.80784314, 0.19215686],
[0. , 0. , 0. , 0.04705882, 0.2627451 ,
0.41568627, 0.64313725, 0.7254902 , 0.78039216, 0.82352941,
0.82745098, 0.82352941, 0.81568627, 0.74509804, 0.58823529,
0.32156863, 0.03137255, 0. , 0. , 0. ,
0.69803922, 0.81568627, 0.7372549 , 0.68627451, 0.63529412,
0.61960784, 0.59215686, 0.04313725],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ],
[0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. , 0. , 0. ,
0. , 0. , 0. ]])
- 차원 확인
train_scaled_255.shape, test_scaled_255.shape
출력 : ((60000, 28, 28), (10000, 28, 28))
* 모델 훈련에 사용하기 위해서는 2차원으로 변환
- reshape : 배열의 형태를 변경
- -1은 해당 차원의 크기를 자동으로 계산하라는 의미
- 28*28은 각 이미지의 크기가 28x28 픽셀이라는 것을 고려하여 1차원 배열로 펼칠 때의 길이를 나타냅니다
train_scaled_2d = train_scaled_255.reshape(-1, 28*28)
train_scaled_2d.shape
출력 :(60000, 784)
훈련 : 검증 데이터로 분리 ( 8 : 2 )
train_scaled, val_scaled, train_target, val_target = train_test_split(train_scaled_2d, train_target
,test_size=0.2,
random_state=42)
print(train_scaled.shape, train_target.shape)
print(val_scaled.shape, val_target.shape)
출력 : (48000, 784) (48000,)
(12000, 784) (12000,)
< 딥러닝 >
딥러닝은 계층 구조의 모델로 구성됨
1.인공신경망 계층(layer) 생성하기
- Dense() : 딥러닝에서 가장 기본적인 계층
: 모델에 넣어서 훈련을 수행하게 됨
: 신경망 계층 클래스
- 딥러닝에서 사용하는 용어
→ 특성 : 뉴런 이라고 칭합니다.
→ 크기 : 갯수를 의미합니다.
- 딥러닝에서 사용되는 숫자들의 범위
→ 일반적으로 딥러닝에서는 숫자의 범위를 16~512 또는 32~512로 사용함
→ 높이와 너비를 나타내는 숫자가 있는 경우에는 3x3 또는 5x5를 주로 사용함
- 모델에는 여러개의 계층(layer)이 사용될 수 있음
→ 첫번째 계층 : 입력 계층(Input layer)이라고 칭한다.
: 입력 계층에는 input_shape()가 정의됨.
: input_shape()에는 독립변수의 열갯수를 정의함.
: 모델에서 한개의 계층만 사용되는 경우에는 입력 계층이 곧,
출력 계층의 역할까지 수행.
→ 이 경우에는 출력 크기의 갯수는 종속변수의 범주 갯수를 정의.
→ 중간 계층 : 은닉 계층(Hidden layer)이라고 칭한다.
: 은닉 계층은 여러개 사용됨
: 은닉 계층의 출력 크기(갯수)는 일정하지 않음
: 출력 크기(갯수)는 사람이 정함
: 출력 크기(갯수)는 다음 은닉계층이 입력 크기(갯수)로 받아서 훈련을 이어 가는 방식.
→ 마지막 계층 : 출력 계층(Output layer)이라고 칭한다.
: 출력 계층에 사용되는 출력 크기는 종속변수의 범주 갯수를 정의함.
- units : 특정 계층에서의 출력의 크기(갯수), 결과갯수
→ 딥러닝 모델에는 계층이 여러개 사용될 수 있으며,
마지막 계층에는 units의 갯수는 종속변수 범주의 갯수를 사용함.
→ 중간에 사용되는 계층을 은닉계층(hidden layer)이라고 칭하며,
중간에 사용되는 계층 간에는 출력 크기를 넘겨받아서 사용됨.
→ 중간 계층의 출력 크기에 따라서 성능에 영향을 미칠 수도 있기 때문에
하이퍼파라메터 튜닝을 진행하는 경우도 있다.
→ 하이퍼파라메터 튜닝은 값을 바꾸면서 여러번 시도하는 방식을 따른다.
- kernel_initializer : 가중치를 초기화하는 방법을 지정
→ 가중치 : 손실을 최소화하도록 하기위해서
모델이 훈련을 반복하는 과정에서 스스로 조정하는 값을 의미함
→ 가중치 초기화 방법 : uniform, normal 방법이 있음
* uniform : 균일 분포 방법, 일정한 분포에서 무작위로 값을 선택
: 일반적으로 많이 사용(default값)
* normal : 가우시안 분포(정규 분포) 방법, 정규 분포에서 무작위로 값을 선택
- activation : 활성화 함수라고 칭합니다.
→ 훈련 시 입력된 특성(뉴런)의 크기를, 어떤 형태의 크기로 변환할지를 결정하는 방법 정의
→ 출력계층(Output Layer)에는 해당 종속변수의 특성에 따라 결정됨
→ 선형형태인 회귀분석의 경우 linear 사용
→ 범주형태의 분류분석의 경우에는 sigmoid, softmax, relu, tanh, leakyRelu등이 사용
→ 이진분류 : sigmoid, relu, tanh, leakyRelu
→ 다중분류 : softmax
→입력계층 또는 은닉계층에는 : linear, sigmoid, softmax, relu, tanh, leakyRelu등이 사용됨
<이진 분류 시 둘 중 하나를 출력 시킬때>
※ sigmoid : 0.5이상 나와야 1이 됨 (1보다 큰 값에서는 명확성이 떨어짐)
※ ReLU : 0보다 큰놈이 나와야 1이 됨 (0보다 작으면 출력에서 제외)
※ Leaky ReLU : -값도 일부는 허용해 주겠다. ==> 가장 많이 사용 ⭐⭐⭐
※ Tanh : -값도 허용하겠다.
==> 마지막 계층에 sigmoid, ReLU 많이 사용(-값 없어서)
1. 인공신경망 계층(layer) 생성
### 입력 계층
dense = keras.layers.Dense(
units=10,
kernel_initializer="uniform",
# 범주가 10개 이상이라 softmax를 사용했음.
activation="softmax",
# 784개의 특성(feature)을 가진 1차원 배열, 784는 28x28 크기의 이미지를 1차원 배열로 펼쳤을 때의 크기
# 32(2^5)~512(2^9)까지의 범위를 많이 사용함
input_shape=(784, )
)
dense
출력 : <keras.layers.core.dense.Dense at 0x22cc91278b0>
2. 인공신경망 모델 생성하기
### 모델에서 한개의 계층만 사용되는 경우에는 입력 계층이 곧, 출력 계층의 역할까지 수행
model = keras.Sequential(dense)
model
출력 : <keras.engine.sequential.Sequential at 0x22cc9119cd0>
"인공신경망 계층(layer) 생성", " 인공신경망 모델 생성하기" 의 순서는 바뀌어도 괜찮다.
< 모델 설정 단계 >
- loss : 손실을 줄이기 위해 사용되는 함수 정의
: 손실함수에는
categorical_crossentropy, binary_crossentropy, sparse_categorical_crossentropy 가 있음
- categorical_crossentropy : 다중분류 손실함수
→ 종속변수의 데이터 값이 원-핫인코딩된 형태로 되어 있는 경우 사용
→ 예시 데이터 : [[0, 1, 0], [0, 0, 1], [0, 1, 0] ...]
- sparse_categorical_crossentropy : 다중분류 손실함수
→ 종속변수의 데이터 값이 숫자값으로 되어 있는 경우 사용
→ 예시 데이터 : [0, 1, 2, 3, 4 ...]
- binary_crossentropy : 이진분류 손실함수
→ 종속변수의 데이터 값이 숫자값으로 2개 정의되어 있는 경우
→ 예시 데이터 : [0, 1, 1, 0, 0, 1 ...]
원-핫 인코딩 예제 (categorical_crossentropy)
< 임의 데이터 생성 >
- randint() : 랜덤하게 정수값을 생성하는 함수
→ 첫번째 인자 : 범주의 범위(0~2 까지로 3개의 범주를 의미함)
→ 두번째 인자 : 몇 개의 랜덤한 범주값을 만들지에 대한 값(10개 생성)
< 원-핫 인코딩(One-Hot Encoding)하기 >
- to_categorical() : 각각의 값을 범주의 갯수만큼의 리스트로 데이터 생성
: 리스트 내 데이터에서 1이 있는 곳의 위치값은 실제 labels의 값과 동일
→ num_classes : unique한 범주의 갯수 정의
import numpy as np
from tensorflow.keras.utils import to_categorical
labels = np.random.randint(3, size=(10, ))
labels
one_hot_labels = to_categorical(labels, num_classes=3)
labels, one_hot_labels.shape, one_hot_labels
출력 : (array([0, 2, 2, 0, 0, 2, 1, 0, 1, 1]), (10, 3),
array([[1., 0., 0.], [0., 0., 1.], [0., 0., 1.], [1., 0., 0.], [1., 0., 0.], [0., 0., 1.], [0., 1., 0.], [1., 0., 0.], [0., 1., 0.],[0., 1., 0.]], dtype=float32))
※ 리스트에 3개의 공간을 만들고, label에 따라서 그 인덱스 값에 해당하는 위치에만 1을 넣고 나머지는 0으로 채우는 형태
3. 모델 설정 단계
- 손실함수(loss) : 종속변수의 형태에 따라 결정됨
- 훈련 시 출력할 값(metrics) : 정확도 출력
- 이진분류인지, 다중분류인지 해당 속성들을 정의해줌
model.compile(
### 손실함수 : 종속변수의 형태에 따라 결정됨
loss="sparse_categorical_crossentropy",
### 훈련 시 출력할 값 : 정확도 출력
metrics="accuracy")
4. 모델 훈련시키기
- epochs : 훈련 반복 횟수
model.fit(train_scaled, train_target, epochs=50)
출력 :
※ 손실율과 정확도가 오르기도 하고 내려가기도 함.
5. 모델 성능 검증하기
- evaluate : 모델 성능 검증하기
score = model.evaluate(val_scaled, val_target)
score
출력 :
375/375 [==============================] - 0s 501us/step - loss: 0.4837 - accuracy: 0.8514]
[0.48367467522621155, 0.8514166474342346]
※ 손실율의 우선도가 더 높음, 검증은 높게 나오고 훈련은 낮게 나와야 한다(과소적합 방지).
<인공신경망 모델 훈련 순서>
1. 모델 생성 (또는 계층 생성)
2. 계층 생성 (또는 모델 생성)
3. 모델 설정 (compile)
4. 모델 훈련 시키기 (fit)
5. 성능 평가 (검증, evaluate)
<성능 개선 방법>
- 데이터 증가 시키기
- 하이퍼파라메터 튜닝 (일반적으로 딥러닝에서는 디폴트 값을 사용해도 됨)
→ 성능이 현저히 낮은 경우에는 튜닝 필요
- 계층을 추가 또는 제거.
<모델에서 사용한 계층 확인하기>
- output shape : 출력 크기 (10개 출력)
- Param : Dense() 계층이 훈련 중에 사용한 총 특성의 갯수
→ Dense() 계층 계산공식 = (입력크기 + 1) x 출력크기
= (784 + 1) x 10 = 7850
모델에서 사용한 계층 확인하기
- summary() : 모델에서 사용한 계층 확인 함수
model.summary()
출력 :
※ Output Shape (None , 10) : 10개의 출력 크기로 뽑아 내겠다.
Param : 훈련에 사용된 파라메터 개수 7850개
은닉계층(Hidden Layer) 추가하기
- add() : 계층 추가하기
model.add(
keras.layers.Dense(
### units= 생략해도 됨
10,
kernel_initializer="uniform",
activation="relu",
input_shape=(784, )
)
)
- 모델 훈련 : 계층이 추가될때마다 훈련을 다시 시켜야 함
model.fit(train_scaled, train_target, epochs=50)
출력 :
- 모델 성능 검증하기
model.evaluate(val_scaled, val_target)
출력 : 375/375 [==============================] - 0s 517us/step - loss: 0.6700 - accuracy: 0.8397
[0.670021653175354, 0.8397499918937683]
- 계층 확인하기
model.summary()
출력 :
'인공지능 > 딥러닝' 카테고리의 다른 글
[딥러닝DL] DNN 회귀데이터 사용 (1) | 2024.01.05 |
---|---|
[딥러닝DL] 심층신경망 훈련 및 성능향상2 - 성능규제(Dropout), 모델 저장 및 불러오기, 콜백함수(ModelCheckpoint, EarlyStopping) (1) | 2024.01.05 |
[딥러닝DL] 심층신경망(DNN) 훈련 및 성능향상 - verbose, epoch, history, 시각화 (2) | 2024.01.03 |
[딥러닝] 신경망계층 추가방법 및 성능향상방법 - 옵티마이저 (1) | 2024.01.03 |
[딥러닝]딥러닝 환경설정하기 + 가상환경 생성 (0) | 2023.12.29 |