본문 바로가기

분류 전체보기

(174)
1. 텍스트 데이터 다루기 시계열 또는 일반적인 시퀀스 데이터를 처리할 수 있는 딥러닝 모델을 살펴보겠습니다. 시퀀스 데이터를 처리하는 기본적인 딥러닝 모델은 순환 신경망(enn)과 1D 컨브넷(1D convnet) 두 가지입니다. 1. 테스트 데이터 다루기 텍스트는 가장 흔한 시퀀스 형태의 데이터입니다. 텍스트는 단어의 시퀀스나 문자의 시퀀스로 이해할 수 있습니다. 다른 모든 신경망과 마찬가지로 텍스트 원본을 입력으로 사용하지 못합니다. 딥러닝 모델은 수치형 텐서만 다룰 수 있습니다. 텍스트를 수치형 텐서로 변환하는 과정을 텍스트 벡터화라고 합니다. 다음과 같은 방법이 있습니다. 텍스트를 단어로 나누고 각 단어를 하나의 벡터를 변환합니다. 텍스트를 문자로 나누고 각 문자를 하나의 벡터로 변환합니다. 텍스트에서 단어나 문자의 n-..
4. 주택 가격 예측 : 신경망 회귀 문제 구현하기 보스턴 주택 가격 본 장에서는 연속적인 값을 예측하는 회귀에 대해 알아보겠습니다. 데이터 준비 상이한 스케일을 가진 값을 신경망에 주입하면 문제가 됩니다. 네트워크가 이런 다양한 데이터에 자동으로 맞추려고 할 수 있지만 이는 확실히 학습을더 어렵게 만듭니다. 이런 데이터를 다룰때 대표적인 방법은 특성별로 정규화를 하는 것입니다. 입력 데이터에 있는 각 특성에 대해서 특성의 평균을 빼고 표준 편차로 나눕니다. 특성의 중앙이 0근처에 맞추어지고 표준 편차가 1이 됩니다. from keras.datasets import boston_housing (train_data, train_targets), (test_data, test_targets) = boston_housing.load_data() mean = train_data...
3. 뉴스 기사 분류 : 다중 분류 문제 뉴스를 통해 상호 배타적인 토픽으로 분류하는 신경망을 만들어 보겠습니다. 클래스가 많기 때문에 이 문제는 다중 분류예 예입니다. 각 데이터 포인트가 정확히 하나의 범주로 분류되기 때문에 좀 더 정확히 말하면 단일 레이블 다중 분류문제입니다. 각 데이터 포인트가 여러 개의 범주에 속할 수 있다면 이것은 다중 레이블 다중 분류 문제가 됩니다. 전체적인 진행은 IMDB(https://nicola-ml.tistory.com/125?category=873773)와 유사합니다. #로이터 데이터셋 로드하기 from keras.datasets import reuters (train_data, train_labels), (test_data, test_labels) = reuters.load_data(num_words=1..
2. 신경망을 이용한 IMDB 영화 리뷰 분류: 이진 분류 예제 인터넷 영화 데이터베이스로부터 리뷰를 분류하는 내용에 대해 실습을 해보겠습니다. IMDB 데이터셋을 이용해 보겠습니다. 유사한 내용의 Posting은 아래와 같은니 참고바랍니다. 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.r.. nicola-ml.tistory.com IMDB 데이터셋 로드하기 from keras.datasets import imdb (train_data, ..
1. 신경망의 구조에 대한 이해 신경망 훈련에는 아래의 요소들이 관련되어 있습니다. 네트워크(또는 모델)를 구성하는 층 입력 데이터와 그에 상응하는 타깃 학습에 사용할 피드백 신호를 정의하는 손실 함수 학습 진행 방식을 결정하는 옵티마이저 연속된 층으로 구성된 네트워크가 입력 데이터를 예측으로 매핑합니다. 손실 함수는 예측과 타깃을 비교하여 네트워크의 예측이 기댓값에 얼마나 잘 맞는지를 측정하는 손실 값을 만듭니다. 옵티마이저는 손실 값을 사용하여 네트워크 가중치를 업데이트합니다. 3.1.1 층: 딥러닝의 구성 단위 신경망의 핵심적인 데이터 구조는 층입니다. 층은 하나 이상의 텐서를 입력으로 받아 하나 이상의 텐서를 출력하는 데이터 처리 모듈입니다. 어떤 종류의 층은 상태가 없지만 대부분의 경우 가중치라는 층의 상태를 가집니다. 가중치..
3. 다중 입력 모델 / 다중 출력 모델 함수형 API는 다중 입력 모델을 만드는 데 사용할 수 있습니다. 일반적으로 이런 모델은 서로 다른 입력 가지를 합치기 위해 여러 텐서를 연결할 수 있는 층을 사용합니다. 텐서를 더하거나 이어 붙이는 식입니다. 관련한 keras함수는 keras.layers.add, keras.layers.concatenate 등입니다. 전형적인 질문-응답 모델은 2개의 입력을 가집니다. 하나는 자연어 질문이고, 또 하나는 답변에 필요한 정보가 담겨 있는 텍스트입니다. 그러면 모델은 답을 출력해야 합니다. 가장 간단한 구조는 미리 정의한 어휘 사전에서 소프트맥스 함수를 통해 한 단어로 된 답을 출력하는 것입니다. 1. 다중 입력 모델 1. 2개의 입력을 가진 질문-응답 모델의 함수형 API구현하기 from keras.mo..
2. 함수형 API 소개 함수형 API에서는 직접 텐서들의 입출력을 다룹니다. 간단한 내용으로 함수형 API의 절차를 보겠습니다. from keras.models import Sequential, Model from keras import layers from keras import Input input_tensor = Input(shape=(64,)) x = layers.Dense(32, activation='relu')(input_tensor) x = layers.Dense(32, activation='relu')(x) output_tensor = layers.Dense(10, activation='softmax')(x) model = Model(input_tensor, output_tensor) model.summary()..
1. Sequential 모델을 넘어서는 케라스의 함수형 API Sequential 모델은 네트워크 입력과 출력이 하나라고 가정합니다. 하지만 일부 네트워크는 개별 입력이 여러 개 필요하거나 출력이 여러 개 필요합니다. 층을 차례대로 쌓지 않고 층 사이를 연결하여 그래프처럼 만드는 네트워크도 있습니다. 만약 세 모델을 동시에 사용한다면 간단하게는 3개의 모델을 따로 훈련하고 각 예측을 가중 평균(weighted average)하는 것입니다. 각 모델에서 추출한 정보가 중복된다면 이 방식은 최적이 아닐 것입니다. 가능한 모든 종류의 입력 데이터를 동시에 사용해서 정확한 하나의 모델을 학습하는 것이 더 나은 방법입니다. 더불어 최근에 개발된 많은 신경망 구조는 선형적이지 않은 네트워크 토폴로지(topology)가 필요합니다. 비순환 유향 그래프 같은 네트워크 구조입니다...
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..
머신러닝 강좌 #28] 로지스틱 회귀에 대해 로지스틱 회귀는 선형 회귀 방식을 분류에 적용한 알고리즘입니다. 즉, 로지스틱 회귀는 분류에 사용됩니다. 로지스틱 회귀 역시 선형 회귀 계열입니다. 회귀가 선형인가 비선형인가는 독립변수가 아닌 가중치 변수가 선형인지 아닌지를 따릅니다. 로지스틱 회귀가 선형 회귀와 다른 점은 학습을 통해 선형 함수의 회귀 최적선을 찾는 것이 아니라 시그모이드(Sigmoid)함수 최적선을 찾고 이 시그모이드 함수의 변환 값을 확률로 간주해 확률에 따라 분류를 결정한다는 것입니다. 많은 자연, 사회 현상에서 특정 변수의 확률 값은 선형이 아니라 시그모이드 함수와 같이 S자 커브 형태를 가집니다. 종양크기에 따라 악성 종양인지 그렇지 않은지를 회귀를 이용해 1과 0의 값으로 예측하는 내용을 진행해 보겠습니다. 위스콘슨 유방암 ..
머신러닝 강좌 #27] 선형 회귀 모델을 위한 데이터 변환 선형 회귀 모델과 같은 선형 모델은 일반적으로 피처와 타깃값 간에 선형의 관계가 있다고 가정하고, 이러한 최적의 선형함수를 찾아내 결과값을 예측합니다. 또한 선형 회귀 모델은 피처값과 타깃값의 분포가 정규 분포(즉 평균을 중심으로 종 모양으로 데이터 값이 분포된 형태) 형태를 매우 선호합니다. 특히 타깃값의 경우 정규 분포 형태가 아니라 특정값의 분포가 치우친 왜곡(skew)된 형태의 분포도일 경우 예측 성능에 부정적인 영향을 미칠 수 있습니다. 따라서 선형 회귀 모델을 적용하기전에 먼저 데이터에 대한 스케일링/정규화 작업을 수행하는 것이 일반적입니다. 하지만 이러한 스케일링/정규화 작업을 선행한다고 해서 무조건 예측 성능이 향상되는 것은 아닙니다. 일반적으로 중요 피처들이나 타깃값의 분포도가 심하게 왜..
텐서플로, 랭크와 텐서를 확인하는 방법 텐서는 데이터를 담고 있는 다차원 배열에 대한 일반화된 수학적 용어입니다. 텐서 차원을 일반적으로 랭크라고 합니다. 지금까지는 대부분 랭크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]]) #랭크를 ..
다층 신경망의 활성화 함수 : 시그모이드, 소프트맥스, 하이퍼볼릭탄젠트, 렐루함수 지금까지 다층 피드포워드 신경망을 쉽게 이해하기 위해 시그모이드 활성화 함수에 대해 설명했습니다. 다층 퍼셉트론을 구현할 때 출력층과 은닉층에 이 함수를 사용했습니다. 일반적으로 다른 문헌에서 부르는 것처럼 이 활성화 함수를 시그모이드 함수라고 합니다. 좀 더 정확한 정의는 로지스틱 함수입니다. 기술적으로는 미분 가능하다면 어떤 함수라도 다층 신경망의 활성화 함수로 사용할 수 있습니다. 실제로는 은닉층이나 출력층에 선형 활성화 함수를 사용하는 것이 그리 유용하지 않습니다. 복잡한 문제를 해결하기 위해서는 일반적인 인공 신경망에 비선형성이 필요하기 때문입니다. 선형 함수를 합치면 결국 하나의 선형 함수가 됩니다. 로지스틱 활성화 함수는 큰 음수 입력이 들어오면 문제가 됩니다. 이 경우 시그모이드 함수의 출..