직접 Numpy로 RNN 층을 구현해보겠습니다. 앞서 메모리 셀에서 은닉 상태를 계산하는 식을 다음과 같이 정의하였습니다. h{t} = tanh(W{x}X{t} + W{h}h_{t−1} + b) #의사 코드(pseudocode)로 실제 동작하는 코드가 아님. hidden_state_t = 0 # 초기 은닉 상태를 0(벡터)로 초기화 for input_t in input_length: # 각 시점마다 입력을 받는다. output_t = tanh(input_t, hidden_state_t) # 각 시점에 대해서 입력과 은닉 상태를 가지고 연산 hidden_state_t = output_t # 계산 결과는 현재 시점의 은닉 상태가 된다. 우선 t 시점의 은닉 상태를 hidden_state_t라는 변수로 선언하..
CNN으로 MNIST 분류하기 1. 모델 이해하기 우리가 만들 모델의 아키텍처를 이해해봅시다. 합성곱 신경망은 출처에 따라서 합성곱 층을 부르는 단위가 조금 다릅니다. (1) 첫번째 표기 방법 합성곱(nn.Cov2d) + 활성화 함수(nn.ReLU)를 하나의 합성곱 층으로 보고, 맥스풀링(nn.MaxPoold2d)은 풀링 층으로 별도로 명명합니다. (2) 두번째 표기 방법 합성곱(nn.Conv2d) + 활성화 함수(nn.ReLU) + 맥스풀링(nn.MaxPoold2d)을 하나의 합성곱 층으로 봅니다. 다시 말해 풀링도 하나의 층으로 보느냐, 안 보느냐의 문제인데 누가 옳고 틀리냐의 문제는 아니므로, 이번 챕터에서는 편의를 위해 맥스풀링까지도 포함해서 하나의 합성곱 층으로 판단하고 정리해보겠습니다. 다시 ..
파이썬에서는 같다 라고 선언하면 주소값 까지 같다고 본다. 그래서 추후에 한쪽 변수를 바꿔줘도 다른 한쪽 변수가 변하는 상황이 생긴다. a = [1,2,3] b = a print(id(a)) print(id(b)) 1906865579072 1906865579072 a[1]을 4로 바꿔줫더니 b도 바뀌는 상황이 발생한다. a[1] = 4 print(a) print(b) [1, 4, 3] [1, 4, 3] 위와 같은 상황을 방지하기 위해서 [:] 이용 c=[1,2,3] d=c[:] c[1]=4 print(c) print(d) [1, 4, 3] [1, 2, 3] copy모듈 이용 from copy import copy e=[1,2,3] f=copy(e) e[1]=4 print(e) print(f) [1, 4,..