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..
텐서플로
풀링 합성곱 신경망에서는 특별히 합성곱이 일어나는 층을 합성곱층, 풀링이 일어나는 층을 풀링층이라 한다. 합성곱층과 풀링층에서 만들어진 결과를 특성 맵(feature map)이라고 부른다. RGB 컬러 채널을 가진 입력 이미지가 합성곱층과 폴링층을 거치면서 변환되는 과정을 보자. 입력이 합성곱층을 통과할 때 합성곱과 활성화 함수가 적용되어 특성 맵이 만들어진다. 그런 다음 특성 맵이 풀링층을 통과하여 또 다른 특성 맵이 만들어진다. 이렇게 합성곱층 뒤에 풀링층이 뒤따르는 형태는 합성곱 신경망의 전형적인 모습이다. 특성 맵을 스캔 하며 최댓값을 고르는 모습을 나타낸 것이다. 이를 최대 풀링(max poolling)이라고 한다. 폴링 영역의 크기는 보통 2 x 2를 지정한다. 일반적으로 스트라이드는 풀링의 ..
케라스 케라스는 딥러닝 패키지를 편리하게 사용하기 위해 만들어진 래퍼(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 +..
다중 분류 신경망 구현 MinibatchNetwork 클래스를 확장하여 다중 분류를 수행하는 MultiClassNetwork 클래스를 구현해 보자. 소프트맥스 함수 추가 다중 분류에서는 마지막 출력층에 소프트맥스 함수를 사용해야 하므로 은닉층과 출력층에 각기 다른 활성화 함수를 적용한다. 이를 위해 activation() 메서드의 이름을 sigmoid()로 바꾸고 softmax() 메서드를 추가한다. def sigmoid(self, z): a = 1 / (1 + np.exp(-z)) #시그모이드 계산 return a def softmax(self, z): #소프트맥스 함수 exp_z = np.exp(z) return exp_z / np.sum(exp_z, axis=1).reshape(-1,1) 소프트맥스..