Machine Learning/Basic 22

[8-3] 합성곱 신경망의 시각화(2)

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다. 특성 맵 시각화 케라스로 패션 MNIST 데이터셋을 읽은 후 훈련 세트에 있는 첫 번째 샘플을 그려 보자. (train_input,train_target),(test_input,test_target) = keras.datasets.fashion_mnist.load_data() plt.imshow(train_input[0],cmap='gray_r') plt.show() 앵클 부츠이다. 이 샘플을 conv_acti 모델에 주입하여 Conv2D층이 만드는 특성 맵을 출력해 보자. 앞에서도 설명했지만 predict() 메서드는 항상 입력의 첫 번째 차원이 배치 차원일 것으로 기대한다. 하나의 샘플을 전달하더라도 꼭 첫 번째 차원을 유지해..

[8-3] 합성곱 신경망의 시각화(1)

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다. 이번 시간에는 합성곱 층이 이미지에서 어떤 것을 학습했는지 알아보기 위해 합성곱 층의 가중치와 특성 맵을 그림으로 시각화해 보겠다. 이를 통해 합성곱 신경망의 동작 원리에 대한 통찰을 키울 수 있다. 가중치 시각화 합성곱 층은 여러 개의 필터를 사용해 이미지에서 특징을 학습한다. 각 필터는 커널이라 부르는 가중치와 절편을 가지고 있다. 일반적으로 절편은 시각적으로 의미가 있지 않다. 가중치는 입력 이미지의 2차원 영역에 적용되어 어떤 특징을 크게 두드러지게 표현하는 역할을 한다. 예를 들어 다음과 같은 가중치는 둥근 모서리가 있는 영역에서 크게 활성화되고 그렇지 않은 영역에서는 낮은 값을 만들 것이다. 이 필터의 가운데 곡선 부분..

[8-2] 합성곱 신경망을 사용한 이미지 분류

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝 책을 공부하고 정리한것 입니다. 이번 시간에는 텐서플로 케라스 API를 사용해 7장에서 만들었던 패션 MNIST 데이터를 합성곱 신경망으로 분류해보겠다. 패션 MNIST 데이터 불러오기 합성곱 신경망은 2차원 이미지를 그대로 사용하기 때문에 일렬로 펼치치 않는다. 다만 입력 이미지는 항상 깊이(채널) 차원이 있어야 한다. 흑백 이미지의 경우 채널 차원이 없는 2차원 배열이지만 Conv2D층을 사용하기 위해 마지막에 이 채널 차원을 추가해야 한다. 넘파이 reshape() 메서드를 사용해 전체 배열 차원을 그대로 유지하면서 마지막에 차원을 간단히 추가할 수 있다. from tensorflow import keras from sklearn.model_select..

[8-1] 합성곱 신경망

합성곱 합성곱(convolution)은 마치 입력 데이터에 마법의 도장을 찍어서 유용한 특성만 드러나게 하는 것으로 비유할 수 있다. 인공 신경망은 처음에 가중치 w1~w10과 절편 b를 랜덤하게 초기화한 다음 에포크를 반복하면서 경사 하강법 알고리즘을 사용하여 손실이 낮아지도록 최적의 가중치와 절편을 찾아간다. 이것이 바로 모델 훈련이다. 합성곱의 밀집층의 계산은 입력 데이터 전체에 가중치를 적용하는 것이 아니라 일부에 가중치를 곱한다. 다음 그림과 위의 그림을 비교해 보자. 여기에서는 이 뉴런이 3개의 가중치를 가진다고 가정했다. 가중치 w1~w3이 입력의 처음 3개 특성과 곱해져 1개의 출력을 만든다. 이 뉴런이 한 칸 아래로 이동해 두 번째부터 네 번째 특성과 곱해져 새로운 출력을 만든다. 여기서..

[7-3] 신경망 모델 훈련

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다.손실 곡선 케라스의 fit() 메서드는 History 클래스 객체를 반환한다. History 객체에는 훈련 과정에서 계산한 지표, 즉 손실과 정확도 값이 저장되어 있다. 이 값을 사용하면 그래프를 그릴 수 있다.from tensorflow import keras from sklearn.model_selection import train_test_split (train_input,train_target),(test_input,test_target)=keras.datasets.fashion_mnist.load_data() train_scaled=train_input /255.0 train_scaled,val_scaled,train_ta..

[7-2] 심층 신경망

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다. model.compile(optimizer='adam',loss='sparse_categorical_crossentropy',metrics='accuracy') model.fit(train_scaled,train_target,epochs=5) 앞에서 만들었던 인공 신경망의 성능을 더 높여보자. 2개의 층 from tensorflow import keras (train_input,train_target),(test_input,test_target)= keras.datasets.fashion_mnist.load_data() 이미지의 픽셀값을 0~255 범위에서 0~1 사이로 변환하고 28 x 28 크기의 2차원 배열을 784 크기의 ..

[7-1] 인공 신경망

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝 책을 공부하고 정리한것 입니다. 패션 MNIST from tensorflow import keras (train_input,train_target),(test_input,test_target) = keras.datasets.fashion_mnist.load_data() keras.dataset.fashion_mnist 모듈 아래 load_data() 함수는 친절하게 훈련 데이터와 테스트 데이터를 나누어 반환한다. 이 데이터는 각각 입력과 타깃 쌍으로 구성되어 있다. print(train_input.shape,train_target.shape) 훈련 데이터는 60,000 개의 이미지로 이루어져 있다. 각 이미지는 28 x 28 크기이다. print(test_i..

[6-3] 주성분 분석

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝 책을 공부하고 정리한것 입니다. k-평균 알고리즘으로 업로드된 사진을 클러스터로 분류하여 저장할수 있게 되었다. 그런데 시간이 지나면서 너무 많은 사진이 등록되어 저장 공간이 부족해질 수 있다. 나중에 군집이나 분류에 영향을 끼치지 않으면서 업로드된 사진의 용량을 줄일 수 있을까? 차원과 차원 축소 지금까지 우리는 데이터가 가진 속성을 특성이라 불렀다. 과일 사진의 경우 10000개의 픽셀이 있기 때문에 10000개의 특성이 있는 셈이다. 머신러닝에서는 이런 특성을 차원(dimension) 이라고도 부른다. 10000개의 특성은 결국 10000개의 차원이라는 건데 이 차원을 줄일 수 있다면 저장 공간을 크게 절약할 수 있을 것이다. 이를 위해 비지도 학습 작..

[6-2] k-평균

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝을 공부하고 정리한것 입니다. 이전 포스팅에서는 각 과일들에 있는 각 픽셀의 평균값을 구해서 가장 가까운 사진을 골랐다. 이 경우에는 사과, 파인애플, 바나나 사진임을 미리 알고 있었기 때문에 각 과일의 평균을 구할 수 있었다. 하지만 진짜 비지도학습에서는 사진에 어떤 과일이 들어 있는지 알지 못한다. 이런 경우 바로 k-평균(k-means) 군집 알고리즘이 평균값을 자동으로 찾아준다. 이 평균값이 클러스터의 중심에 위치하기 때문에 클러스터 중심(cluster center) 또는 센트로이드(centroid)라고 부른다. k-평균 알고리즘 소개 k-평균 알고리즘의 작동 방식은 다음과 같다. 1. 무작위로 k개의 클러스터 중심을 정한다. 2. 각 샘플에서 가장 가..

[6-1] 군집 알고리즘

이 포스팅은 혼자 공부하는 머신러닝 + 딥러닝 책을 공부하고 정리한것 입니다.비지도 학습 타깃을 모르는 사진을 종류별로 분류하려 할때 사용하는 머신러닝 알고리즘이 바로 비지도 학습이다(unsupervised learning) 사람이 가르쳐 주지 않아도 데이터에 있는 무언가를 학습하게 된다. 과일 데이터는 사과, 바나나, 파인애플을 담고 이는 흑백 사진이다. 이 데이터는 넘파이 배열의 기본 저장 포맷인 npy파일로 저장되어 있다. 넘파이에서 이 파일을 읽으려면 먼저 코랩으로 다운로드 해야한다.!wget https://bit.ly/fruits_300_data -O fruits_300.npy import numpy as np import matplotlib.pyplot as plt fruits=np.load(..