본문 바로가기

ML & AI Theory

(14)
tf.keras 모델의 저장과 복원 tf.keras API로 만든 모델을 저장하고 복원하는 것은 아주 쉽습니다. 먼저 앞서 만든 모델 가중치를 save_weights()메서드로 저장해 보겠습니다. model.save_weights('./model/simple_weights.h5') 이 코드를 실행하면 h45 파일을 생성하고 모든 층의 가중치를 저장합니다. save_weights메서드는 기본적으로 텐서플로의 체크포인트(checkpoint)포맷으로 가중치를 저장합니다. save_format 매개변수를 'h5'로 지정하여 HDF5파일 포맷으로 저장할 수 있습니다. 이 메서드는 똑똑학도 파일 이름의 확장자가 .h5이면 자동으로 HDF5포맷으로 저장합니다. 저장된 가중치를 사용하려면 새로운 모델을 만들고 load_weight()메서드를 사용하여 가..
tf.keras API. Sequential 모델 실습 1. Sequential 모델 Sequential 모델은 층을 순서대로 쌓는 모델을 만듭니다. import numpy as np import matplotlib.pyplot as plt np.random.seed(0) def make_random_data(): x = np.random.uniform(low=-2, high=2, size=200) y = [] for t in x: r = np.random.normal(loc=0.0, scale=(0.5+t*t/3), size=None) y.append(r) return x, 1.726*x -0.84 + np.array(y) x, y = make_random_data() plt.plot(x, y,'o') plt.show() 전체 샘플 개수는 200개로 이 중..
텐서플로의 계산 그래프 : 1.0 vs 2.x 버젼 차이 텐서플로 2.x 버전에서는 즉시 실행 모드가 기본으로 활성화되어 있기 떄문에 계산 그래프를 만들지 않고 빠르게 개발과 테스트를 할 수 있습니다. 모델을 다른 프레임워크와 공유하거나 실행 성능을 높이기 위해 그래프를 만들려면 어떻게 해야 할까요? 단순한 내용으로 알아보겠습니다. import tensorflow as tf a = tf.constant(1) b = tf.constant(2) c = tf.constant(3) z = 2*(a-b)+c print(z.numpy()) tensorflow 1.x 텐서플로 1.x 버전은 계산 그래프를 만든 후 세션을 통해 그래프를 실행합니다. 텐서플로 1.x 버제서 계산 그래프를 만들고 실행하는 각 단곌르 자세히 정리하면 다음과 같습니다. 1. 비어 있는 새로운 계산 ..
텐서를 다차원 배열로 변환하기 랭크 2 이상인 텐서를 다룰때 전치(transpose)같은 변환은 주의를 기울여야 합니다. 넘파이는 arr.shape속성으로 배열 크기를 얻을 수 있습니다. 텐서플로에서는 tf.get_shape함수를 사용합니다. 또는 텐서의 shape속성을 사용합니다. import tensorflow as tf import numpy as np arr = np.array([[1.,2.,3.,3.5],[4.,5.,6.,6.5],[7.,8.,9.,9.5]]) T1 = tf.constant(arr) s = T1.get_shape() print('T1의 크기:', s) print('T1의 크기:', T1.shape) T1의 크기: (3, 4) T1의 크기: (3, 4) T2 = tf.Variable(np.random.norma..
텐서플로, 랭크와 텐서를 확인하는 방법 텐서는 데이터를 담고 있는 다차원 배열에 대한 일반화된 수학적 용어입니다. 텐서 차원을 일반적으로 랭크라고 합니다. 지금까지는 대부분 랭크0에서 랭크2사이 텐서를 다루었습니다. 예를 들어 정수나 실수처럼 숫자 하나로 이루어진 스칼라는 랭크 0인 텐서입니다. 벡터는 랭크 1인 텐서입니다. 행렬은 랭크 2인 텐서입니다. 텐서 표기는 더 고차원으로 일반화될 수 있습니다. 여러 개의 컬러 채널을 가진 이미지를 다루기 위해 랭크 3인 입력과 랭크 4인 가중치 텐서를 사용합니다. import tensorflow as tf import numpy as np t1 = tf.constant(np.pi) t2 = tf.constant([1,2,3,4]) t3 = tf.constant([[1,2], [3,4]]) #랭크를 ..
다층 신경망의 활성화 함수 : 시그모이드, 소프트맥스, 하이퍼볼릭탄젠트, 렐루함수 지금까지 다층 피드포워드 신경망을 쉽게 이해하기 위해 시그모이드 활성화 함수에 대해 설명했습니다. 다층 퍼셉트론을 구현할 때 출력층과 은닉층에 이 함수를 사용했습니다. 일반적으로 다른 문헌에서 부르는 것처럼 이 활성화 함수를 시그모이드 함수라고 합니다. 좀 더 정확한 정의는 로지스틱 함수입니다. 기술적으로는 미분 가능하다면 어떤 함수라도 다층 신경망의 활성화 함수로 사용할 수 있습니다. 실제로는 은닉층이나 출력층에 선형 활성화 함수를 사용하는 것이 그리 유용하지 않습니다. 복잡한 문제를 해결하기 위해서는 일반적인 인공 신경망에 비선형성이 필요하기 때문입니다. 선형 함수를 합치면 결국 하나의 선형 함수가 됩니다. 로지스틱 활성화 함수는 큰 음수 입력이 들어오면 문제가 됩니다. 이 경우 시그모이드 함수의 출..
케라스 실습] tf.keras API를 사용한 다층 신경망 훈련 기본 tf.keras 고수준 API를 어떻게 신경망을 훈련하는지 알아보겠습니다. 1. 훈련 데이터 준비 import struct import os import numpy as np import tensorflow as tf def load_mnist(path, kind='train'): """`path`에서 MNIST 데이터 적재하기""" labels_path = os.path.join(path, '%s-labels-idx1-ubyte/' % kind) images_path = os.path.join(path, '%s-images-idx3-ubyte/' % kind) labels_file = ('%s-labels.idx1-ubyte' % kind) images_file = ('%s-images.idx3-uby..
텐서플로우 #1] 텐서플로우의 시작과 배열 구조 다루기 일반적인 내용은 넘어가겠습니다. 텐서플로는 노드 집합으로 구성된 계산 그래프를 바탕으로 합니다. 각 노드는 0개 이상의 입력이나 출력을 가지는 연산을 나타냅니다. 계산 그래프의 에지를 따라 이동하는 값을 텐서(tensor)라고 합니다. 텐서플로 1.5.0 버전에는 계산 그래프를 만들지 않고 텐서를 즉시 평가할 수 있는 즉시 실행(eager execution) 기능이 추가되었습니다. 텐서플로 2.x에서는 즉시 실행 모드가 기본으로 활성화되어 있어서 텐서 값을 바로 확인할 수 있습니다. 이 절에서는 저수준 API를 사용하여 텐서플로 1.x와 2.x 차이를 알아보겠습니다. 텐서는 스칼라(sclar), 벡터, 행렬 등이 일반화된 것으로 생각할 수 있습니다. 구체적으로 말해서 스칼라는 랭크 0 텐서로 정의합니다...
RNN 실전실습 : 시퀀스 모델링을 위한 다층 RNN구현 : IMDB 영화리뷰 구현 다음은 다대일(Many-to-Once)구조로 감성 분석을 위한 다층 RNN을 구현해 보겠습니다. 1.데이터준비 import pyprind import pandas as pd from string import punctuation import re import numpy as np df = pd.read_csv('./data/aclImdb/movie_data.csv', encoding='utf-8') 데이터프레임 df에는 'review'와 'sentiment' 두 개의 컬럼이 있습니다. RNN모델을 만들어서 시퀀스 단어를 처리하고 마지막에 전체 시퀀스를 0또는 1클래스로 분류하겠습니다. 신경망에 주입할 입력 데이터를 준비하기 위해 텍스트를 정수 값으로 인코딩해야 합니다. 이를 위해 전체 데이터셋에서 고유한..
RNN 지식 : 순환 신경망으로 시퀀스 데이터 모델링 위한 기본 지식 시퀀스 데이터(또는 시퀀스)의 특징에 관해 알아보면서 RNN에 대해 알아보겠습니다. 시퀀스에는 다른 종류의 데이터와는 구별되는 독특한 성질이 있습니다. 시퀀스 데이터를 표현하는 방법과 시퀀스 데이터를 위한 여러 가지 모델을 살펴보겠습니다. 1.시퀀스 데이터 모델링: 순서를 고려한다. 다른 데이터 타입과 다르게 시퀀스는 특별합니다. 시퀀스 원소들은 특정 순서를 가지므로 상호 독립적이지 않기 때문입니다. 일반적으로 지도 학습의 머신 러닝 알고리즘은 입력 데이터가 독립 동일 분포라고 가정합니다. 예를 들어 n개의 데이터 샘플이 있을때 머신 러닝 알고리즘을 훈련하기 위해 데이터를 사용하는 순서는 상관없습니다. 시퀀스 데이터를 다룰 때는 더 이상 이런 가정이 유효하지 않습니다. 시퀀스는 정의 자체가 순서를 고려한..
인공신경망관련 용어정리 : 퍼셉트론, MLP, Feed Forward, Back Propagation, 활성 함수, 시그모이드 함수, Gradient Descent Method 퍼셉트론 퍼셉트론은 1957년에 개발된 최초의 인공지능 모형입니다. Feed-Forward Network모형의 가장 간단한 형태이며 선형 분류(Linear Classfier)모형의 형태를 띠고 있습니다. Input과 Weight가 선형 결합의 형태를 띠는 것을 알 수 있습니다. 이 선형 결합의 값에 특정 임곗값의 초과 여부를 판단하는 함수를 적용합니다. 이 출력 값이 0보다 크면 1, 작으면 -1로 결괏값을 내보내 분류하는 모형을 '퍼셉트론'이라 합니다. 여기서 임곗값의 초과 여부를 판단하는 함수를 '활성화 함수(Activation Function)'라 합니다. 가장 기본적인 Activation함수는 Step Function으로 Input값이 0이상이면 1, 이상이 아니면 0을 출력하도록 하는 함수입니다..
머신러닝 모델의 예측 평가에 대해 #2 - 오차행렬 & F1 Score 오차 행렬 (Confusion Matrix) 이진 분류에서 성능 지표로 잘 활용되는 오차행렬(Confusion Matrix)은 학습된 분류 모델이 예측을 수행하면서 얼마나 혼동하고(Confusion)있는지를 보여주는 지표입니다. 즉, 이진 분류의 예측 오류가 얼마인지와 더불어 어떠한 유형의 예측 오류가 발생하고 있는지를 함께 나타내는 지표입니다. 오차 행렬은 4분면 행렬에서 실제 레이블 클래스 값과 예측 레이블 클래스 값이 어떠한 유형을 가지고 매핑되는지를 나타냅니다. 4분면의 왼쪽, 오른쪽을 예측된 클래스 값 기준으로 Negative와 Positive로 분류하고, 4분면의 위, 아래를 실제 클래스 값 기준으로 Negative와 Positive로 분류하면 예측 클래스와 실제 클래스의 값 유형에 따라 결정..
머신러닝 모델의 예측 평가에 대해 #1 - Intro & 정확도 (Accuracy) ML의 모델 평가 Intro 머신러닝 모델은 여러 가지 방법으로 예측 성능을 평가할 수 있습니다. 성능 평가 지표값과 예측값의 오차 평균값에 기반합니다. 성능 평가 지표는 일반적으로 모델이 분류 혹은 회귀에 따라 여러 종류로 나뉩니다. 회귀의 경우 대부분 실제값과 예측값의 오차 평균값에 기반합니다. 예를 들어 오차에 절댓값을 씌운 뒤 평균 오차를 구하거나 오차의 제곱 값에 루트를 씌운 평균 오차를 구하는 방법과 같이 기본적으로 예측 오차를 가지고 정규화 수준을 재가공하는 방법이 회귀의 성능 평가 지표 유형입니다. 분류의 평가방법도 일반적으로는 실제결과가 데이터와 예측 결과 데이터가 얼마나 정확하고 오류가 적게 발생하는가에 기반하지만, 단순히 이러한 정확도만 가지고 판단했다가는 잘못된 평가 결과에 빠질 수..
ROC, AUC Curve에 대해 : Receiver Operating Characteristic, Area Under the Curve AUC-ROC Curve는 다양한 임계값에서 모델의 분류 성능에 대한 측정 그래프를 나타낼 수 있습니다. ROC곡선과 이에 기반한 AUC스코어는 이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표입니다. 일반적으로 의학 분야에서 많이 사용되지만, ML의 이진 분류 모델의 예측 성능을 판단하는 중요한 평가 지표이기도 합니다. ROC곡선과 이에 기반한 AUC스코어는 이진 분류의 예측 성능 측정에서 중요하게 사용되는 지표입니다. 1. ROC(Receiver Operation Characteristic): 모든 임계값에서 분류 모델의 성능을 보여주는 그래프가 됩니다. FPR을 0부터 1까지 변경하면서 TPR의 변화값을 구합니다. 다시 설명하면, FPR(False ositive Rate)이 변할 때 TPR(T..