머신러닝

· 인공지능
LSTM 구조 기본 순환 신경망과 달리 LSTM 셀은 2개의 출력이 순환된다. 그중 하나만 다음 층으로 전달된다. 셀로 순환만 되는 출력을 셀 상태(C)라고 부른다. LSTM 셀에서는 이전 타임 스텝의 은닉 상태 H_p와 셀 상태 C_p를 사용해 어떤 계산을 수행하는지 살펴보자. s는 시그모이드 활성화 함수를 의미하고 t는 tanh 활성화 함수를 의미한다. x와 +는 각각 원소별 곱셈과 덧셈을 의미한다. 이전 타임 스텝의 은닉 상태 H_p와 입력 X가 가중치와 곱해져서 Z_f, Z_i, Z_j, Z_o를 만든다. 이 계산은 순환 신경망의 기본 셀에서 수행했던 것과 동일하다. Z에 대해서는 모두 동일한 방식으로 계산하지만 모두 다른 가중치를 사용한다. 먼저 Z_f는 시그모이드 활성화 함수를 적용한 다음 이..
· 인공지능
SimpleRNN 텐서플로에서 가장 기본적인 순환층은 SimpleRNN 클래스이다. 다음과 같이 만들 수 있다. 필요한 클래스 임포트하기 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, SimpleRNN 모델 만들기 model = Sequential() model.add(SimpleRNN(32, input_shape=(100, 100))) model.add(Dense(1, activation='sigmoid')) model.summary() 입력은 원-핫 인코딩 된 100차원 벡터이고 셀 개수가 32개이므로 W_1x 행렬 요소의 개수는 100 x 32가 된다. W_1h 행렬의 요소 개수도 32..
· 인공지능
순환 신경망 구현 순환 신경망을 구현여 텍스트를 분류하는 실습을 해보자. IMDB 데이터 세트는 인터넷 영화 데이터 베이스(Internet Movie Database)에서 수집한 영화 리뷰 데이터이다. 순환 신경망으로 이 리뷰들이 긍정적인지 부정적인지 판별해보자. 텐서플로에서 IMDB 데이터 세트 불러오기 import numpy as np from tensorflow.keras.datasets import imdb (x_train_all, y_train_all), (x_test, y_test) = imdb.load_data(skip_top=20, num_words=100) load_data() 함수를 이용하여 데이터를 불러온다. skip_top 매개변수에는 가장 많이 등장한 단어들 중 건너뛸 단어의 개수..
· 인공지능
순차 데이터 데이터 중에는 독립적이지 않고 샘플이 서로 연관되어 있는 경우가 있다. 예를 들면 날씨 정보는 샘플이 서로 연관되어 있다. 오후 3시의 온도를 알고 있다면 1시간 후의 온도를 비슷하게 예상할 수 있다. 즉, 온도를 매시간 측정하여 데이터 세트를 만들었다면 각 시간의 온도는 이전 시간의 온도와 깊은 연관이 있을 것이다. 이렇게 일정 시간 간격으로 배치된 데이터를 시계열(time series)데이터라고 부른다. 시계열 데이터를 포함하여 샘플에 순서가 있는 데이터를 일반적으로 순차 데이터(sequential data)라고 부른다. 대표적인 순차 데이터의 예는 텍스트이다. 글을 구성하는 글자와 단어들의 순서가 맞아야 의미가 제대로 전달되기 때문이다. 이때 모델에서 순차 데이터를 처리하는 각 단계를 ..
· 인공지능
케라스 합성곱 신경망 만들기 케라스의 합성곱층은 Conv2D 클래스이다. 최대 풀링은 MaxPooling2D 클래스를 사용하고, 특성 맵을 일렬로 펼칠 때는 Flatten 클래스를 사용한다. from tensorflow.keras.layers import Conv2D, MaxPolling2D, Flatten, Dense 필요한 클래스를 임포트한다. 합성곱층 쌓기 합성곱층을 추가한다. Conv2D 클래스의 첫 번째 매개변수는 합성곱 커널의 개수이다. 두 번째 매개변수는 합성곱 커널의 크기로 높이와 너비를 튜플로 전달한다. 합성곱 커널로는 전형적으로 3 x 3 또는 5 x 5 크기를 많이 사용한다. activation 매개변수에 렐루 활성화 함수를 지정한다. 패딩은 세임 패딩을 사용하는데, tf.nn.con..
· 인공지능
합성곱 신경망 28 x 28 크기의 흑백 이미지와 3 x 3 크기의 커널 10개로 합성곱을 수행한다. 그런 다음 2 x 2 크기의 최대 풀링을 수행하여 14 x 14 x 10로 특성맵의 크기를 줄인다. 이 특성 맵을 일렬로 펼쳐서 100개의 뉴런을 가진 완전 연결층과 연결 시킬 것이다. 정방향 계산 이번에 구현할 합성곱 신경망 클래스는 ConvolutionNetwork이다. 합성곱과 렐루 함수 그리고 풀링이 적용되는 부분을 주의깊게 보면 된다. MultiClassNetwork 클래스의 forpass() 메서드에 있던 z1, a1, z2를 계산하는 식은 그대로 두고 그 앞에 합성곱과 풀링층을 추가하여 코드를 작성해 보자. class ConvolutionNetwork(MultiClassNetwork): de..
· 인공지능
렐루 함수 은닉층에 시그모이드 함수를 활성화 함수로 사용했다. 출력층은 이진 분류일 경우에는 시그모이드 함수를 사용하고, 다중 분류일 경우에는 소프트맥스 함수를 사용했다. 렐루 함수는 주로 합성곱층에 적용되는 활성화 함수로, 합성곱 신경망의 성능을 더 높여준다. 렐루 함수는 0보다 큰 값은 그대로 통과시키고 0보다 작은 값은 0으로 만든다. 렐루 함수 구현 넘파이의 maximum() 함수를 사용하면 간단하게 구현할 수 있다. import numpy as np def relu(x): return np.maximum(x, 0) x = np.array([-1, 2, -3, 4, -5]) relu(x) 텐서플로가 제공하는 렐루 함수는 relu()이다. 출력은 Tensor 객채이므로 numpy로 변환해야 한다. ..
· 인공지능
풀링 합성곱 신경망에서는 특별히 합성곱이 일어나는 층을 합성곱층, 풀링이 일어나는 층을 풀링층이라 한다. 합성곱층과 풀링층에서 만들어진 결과를 특성 맵(feature map)이라고 부른다. RGB 컬러 채널을 가진 입력 이미지가 합성곱층과 폴링층을 거치면서 변환되는 과정을 보자. 입력이 합성곱층을 통과할 때 합성곱과 활성화 함수가 적용되어 특성 맵이 만들어진다. 그런 다음 특성 맵이 풀링층을 통과하여 또 다른 특성 맵이 만들어진다. 이렇게 합성곱층 뒤에 풀링층이 뒤따르는 형태는 합성곱 신경망의 전형적인 모습이다. 특성 맵을 스캔 하며 최댓값을 고르는 모습을 나타낸 것이다. 이를 최대 풀링(max poolling)이라고 한다. 폴링 영역의 크기는 보통 2 x 2를 지정한다. 일반적으로 스트라이드는 풀링의 ..
· 인공지능
합성곱 합성곱(convolution) 연산과 교차 상관(cross-correlation) 연산에 대해 알아야 한다. 합성곱은 두 함수에 적용하여 새로운 함수를 만드는 수학 연산자이다. 합성곱은 글보다는 그림으로 이해하는 것이 쉽다. 배열 뒤집기 두 배열 x와 w가 있다고 가정하고 두 배열 중 원소수가 적은 배열 w의 원소 준서를 뒤집어 보면 위와 같다. 뒤집은 배열은 reverse의 약자인 r을 사용하여 w^r이라고 표현한다. 첫 번째 합성곱 왼쪽 끝자리에 맞춰 놓고 원소끼리 곱한 후 더한다. 즉, 점 곱 연산을 수행한다. 두 번째 합성곱 w^r을 오른쪽으로 한 칸 이동하여 각 배열 원소끼리 곱한 후 더한다. 나머지 합성곱 같은 방식으로 오른쪽 끝에 도착할 때까지 수행한다. 이것이 합성 곱이다. 수식으로..
· 인공지능
케라스 케라스는 딥러닝 패키지를 편리하게 사용하기 위해 만들어진 래퍼(wrapper) 패키지이다. 대표적인 딥러닝 패키지인 텐서플로, 씨아노 등을 사용해 신경망을 구현하려면 꽤 많은 양의 코드를 입력해야 한다. 코드를 살펴보자. #훈련할 가중치 변수 선언 w = tf.Variable(tf.zeros(shape=(1))) b = tf.Variable(tf.zeros(shape=(1))) #경사 하강법 옵티마이저 설정 optimizer = tf.optimizers.SGD(lr = 0.05) #에포크만큼 훈련 num_epochs = 10 for step in range(num_epochs): #미분 연산 과정 기록 with tf.GradientTape() as tape: z_net = w * x_train +..
hvv_an
'머신러닝' 태그의 글 목록