분류 전체보기 428

6. 케라스로 다층 퍼셉트론 구현(3) - 서브클래싱 API, 모델 저장과 복원, 콜백

시퀀셜 API와 함수형 API는 모두 선언적이다. 이 방식에는 장점이 많다. 모델을 저장하거나 복사, 공유하기 쉽다. 또한 모델의 구조를 출력하거나 분석하기 좋다. 프레임워크가 크기를 짐작하고 타입을 확인하여 에러를 일찍 발견 할 수 있다(즉 모델에 데이터가 주입되기 전에). 전체 모델이 층으로 구성된 정적 그래프이므로 디버깅하기도 쉽다. 하지만 정적이라는 것이 단점도 된다. 어떤 모델은 반복문을 포함하고 다양한 크기를 다루어야 하며 조건물을 가지는 등 여러 가지 동적인 구조를 필요로 한다. 이런 경우에 조금 더 명령형 프로그래밍 스타일이 필요하다면 서브클래싱 API가 정답이다. 간단히 Model 클래스를 생성자 안에서 필요한 층을 만든다. 그다음 call() ..

5. 케라스로 다층 퍼셉트론 구현(2) - 시퀀셜 API 회귀, 함수형 API

캘리포니아 주택 가격 데이터셋으로 바꾸어 회귀 신경망으로 이를 해결해보자. from sklearn.datasets import fetch_california_housing from sklearn.model_selection import train_test_split from sklearn.preprocessing import StandardScaler housing=fetch_california_housing() X_train_full,X_test,y_train_full,y_test=train_test_split(housing.data,housing.target) X_train,X_valid,y_train,y_valid=train_test_split(X_train_full,y_train_full) sca..

4. 케라스로 다층 퍼셉트론 구현(1) - 시퀀셜 API 분류

먼저 데이터셋을 적재한다. fashion_mnist=keras.datasets.fashion_mnist (X_train_full,y_train_full),(X_test,y_test) = fashion_mnist.load_data() X_train_full.shape #(60000,28,28) X_train_full.dtype # uint8 이 데이터셋은 이미 훈련 세트와 테스트 세트로 나누어져 있다. 하지만 검증 세트는 없으므로 만들어야 한다. 또한 경사 하강법으로 신경망을 훈련하기 때문에 입력 특성의 스케일을 조정해야 한다. 간편하게 픽셀 강도를 255.0으로 나누어 0~1 사이 범위로 조정하겠다. X_valid,X_train=X_train_full[:5000]/255.0,X_train_full[500..

3. 회귀, 분류를 위한 다층 퍼셉트론(MLP-Multi Layer Perceptron)

다층 퍼셉트론은 회귀 작업에 사용할 수 있다. 값 하나를 예측하는 데 출력 뉴런이 하나만 필요하다. 이 뉴런의 출력이 예측된 값이다. 다변량 회귀(multivariate regression)에서는 (즉, 동시에 여러 값을 예측하는 경우) 출력 차원마다 출력 뉴런이 하나씩 필요하다. 일반적으로 회귀용 다층 퍼셉트론을 만들 때 출력 뉴런에 활성화 함수를 사용하지 않고 어떤 범위의 값도 출력되도록 한다. 하지만 출력이 항상 양수여야 한다면 출력층에 ReLU 활성화 함수를 사용할 수 있다. 또는 softplus 활성화 함수를 사용할 수 있다. 마지막으로 어떤 범위 안의 값을 예측 하고 싶다면 로지스틱 함수나 하이퍼볼릭 탄젠트 함수를 사용하고 레이블의 스케일을 적절한 범위로 조정할 수 있다. 로지스틱 함수는 0에..

2. 다층 퍼셉트론과 역전파

다층 퍼셉트론은 입력층(input layer) 하나와 은닉층(hidden layer) 이라 불리는 하나 이상의 TLU층과 마지막 출력층(output layer)로 구성된다. 입력층과 가까운 층을 보통 하위 층이라 부르고 출력에 가까운 층을 상위 층(upper layer)라고 부른다. 출력층을 제외하고 모든 층은 편향 뉴런을 포함하며 다음 층과 완전히 연결되어 있다. 은닉층을 여러 개 쌓아 올린 인공 신경망을 심층 신경망(deep neural network(DNN)) 이라고 한다. 딥러닝은 심층 신경망을 연구하는 분야이며 조금 더 일반적으로는 연산이 연속하게 길게 연결된 모델을 연구한다. 역전파 알고리즘은 효율적인 기법으로 그레이디언트를 자동으로 계산하는 경사 하강법이다. 네트워크를 두 번 통과하는 것만으..

1. 케라스를 사용한 인공 신경망 소개 - 퍼셉트론

인공 뉴런 모델은 하나 이상의 이진(on/off) 입력과 이진 출력 하나를 가진다. 인공 뉴런은 단순히 입력이 일정 개수만큼 활성화되었을 때 출력을 내보낸다. 이 네트워크가 어떤 일을 하는지 알아보자. 퍼셉트론(perception)은 가장 간단한 인공 신경망 구조 중 하나로 퍼셉트론은 TLU(threshold logic unit) 또는 이따금 LTU(linear threshold unit)라고 불리는 조금 다른 형태의 인공 뉴런을 기반으로 한다. 입력과 출력이 (이진 on/off 값이 아닌) 어떤 숫자이고, 각각의 입력 연결은 가중치와 연관되어 있다. TLU는 입력의 가중치 합을 계산 한 뒤 계산된 합에 계단 함수(step function)을 적용하여 결과를 출력한다. 즉, h(x)=step(z), 여기..

3. 비지도학습 - 실습

전통적인 올리베티 얼굴 데이터셋은 64x64 픽셀 크기의 흑백 얼굴 이미지 400개를 담고 있다. 각 이미지는 4096크기의 ID 벡터로 펼쳐져 있다. 사람 40명의 사진을 10장씩 찍은 것이다. 어떤 사람의 사진인지 예측하는 모델을 훈련하는 것이 일반적이다. sklearn.datasets.fetch_olivetti_faces() 함수를 사용해 데이터셋을 불러오고 훈련 세트, 검증 세트, 테스트 세트로 나눈다.(이 데이터셋은 이미 0에서 1사이로 스케일이 조정되어 있다.). 이 데이터셋은 매우 작으니 계층적 샘플링을 사용해 각 세트에 동일한 사람의 얼굴이 고루 섞이도록 하는 것이 좋다. 그다음 k-평균을 사용해 이미지를 군집해보자. 적절한 클러스터 개수를 찾아보고 클러스터를 시각화해보자. from skl..

모델 실습 2021.05.30

31. 비지도학습 - 가우시안 혼합

가우시안 혼합 모델(GMM)은 샘플이 파라미터가 알려지지 않은 여러 개의 혼합된 가우시안 분포에서 생성되었다고 가정하는 확률 모델이다. 하나의 가우시안 분포에서 생성된 모든 샘플은 하나의 클러스터를 형성한다. 일반적으로 이 클러스터는 타원형이다. 각 클러스터는 타원의 모양, 크기, 밀집도, 방향이 다르다. 샘플이 주어지면 가우시안 분포 중 하나에서 생성되었다는 것을 안다. 하지만 어떤 분포인지 또 이 분포의 파라미터는 무엇인지 알지 못한다. 여러 GMM 변종이 있는데 가장 간단한 버전이 GaussianMixture 클래스에 구현되어 있다. 여기에서는 사전에 가우시안 분포의 개수 k를 알아햐 한다. 데이터셋 X가 다음 확률 과정을 통해 생성되었다고 가정한다. from sklearn.mixture impor..

30. 비지도학습 - DBSCAN

이 알고리즘은 밀집된 연속적 지역을 클러스터로 정의한다. 작동 방식은 다음과 같다. 이 알고리즘은 모든 클러스터가 충분히 밀집되어 있고 밀집되지 않은 지역과 잘 구분될 때 좋은 성능을 낸다. from sklearn.cluster import DBSCAN from sklearn.datasets import make_moons X,y=make_moons(n_samples=1000,noise=0.05) dbscan=DBSCAN(eps=0.05,min_samples=5) dbscan.fit(X) 모든 샘플의 레이블은 인스턴스 변수 labels_에 저장되어 있다. 일부 샘플의 클러스터 인덱스는 -1이다. 이는 알고리즘이 이 샘플을 이상치로 판단했다는 의미이다. 핵심 샘플의 인덱스는 인스턴스 변수 core_samp..