본문 바로가기

반응형

딥러닝

(31)
8장 이미지 분류 - 합성곱 신경망 (5) - 합성곱 신경망 훈련 1. 데이터 세트 불러오기 -> (패션 MNIST) (x_train_all, y_train_all), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data() ##출력: Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-labels-idx1-ubyte.gz 29515/29515 [==============================] - 0s 0us/step Downloading data from https://storage.googleapis.com/tensorflow/tf-keras-datasets/train-ima..
8장 이미지 분류 - 합성곱 신경망 (4) 8-4 합성곱 신경망을 만들고 훈련 - 합성곱 신경망의 전체 구조 - 합성곱 신경망의 정방향 계산 구현 1. 합성곱 적용 1) self.conv_w : 합성곱에 사용할 가중치 2) stride, padding : 특성 맵의 가로와 세로 크기를 일정하게 만들기 위해 각각 1, 'SAME'으로 지정 2. 렐루 함수 적용 3. 풀링 적용하고 완전 연결층 수정 def forpass(self, x): # 3x3 합성곱 연산 수행 c_out = tf.nn.conv2d(x, self.conv_w, strides=1, padding='SAME') + self.conv_b # 렐루 활성화 함수 적용 r_out = tf.nn.relu(c_out) # 2x2 최대 풀링 적용 p_out = tf.nn.max_pool2d(r_..
8장 이미지 분류 - 합성곱 신경망 (3) 8-3 합성곱 신경망의 구조 - 렐루 함수 (ReLU) 0보다 큰 값은 그대로 통과, 0보다 작은 값은 0으로 - 렐루 함수 구현 def relu(x): return np.maximum(x, 0) x= np.array([-1, 2, -3, 4, -5]) relu(x) ##출력: array([0, 2, 0, 4, 0]) r_out = tf.nn.relu(x) r_out.numpy() ##출력: array([0, 2, 0, 4, 0]) - 렐루 함수의 도함수 입력이 0보다 크면 1 입력이 0보다 작으면 0 - 합성곱 신경망에서 일어나는 일들과 구조 합성곱 신경망에 주입될 입력 데이터에는 채널이 있음 이미지의 픽셀에 가진 색상의 표현하기 위한 정보인 채널(channel)이라는 차원 존재 빨간색(Red), 파란..
8장 이미지 분류 - 합성곱 신경망 (2) - 2차원 배열에서 합성곱 수행 1차원과 유사하게 원본 배열의 왼쪽에서 오른쪽으로, 위에서 아래쪽으로 1칸씩 이둥 2차원 원본 배열 x, 미끄러지는 배열 w 원본 배열의 왼쪽 모서리 끝에 미끄러지는 배열을 맞추고 합성곱 수행 (1x2+2x0+4x0+5x0) 미끄러지는 배열을 옮기며 합성곱 수행(밸리드 패딩) x = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) w = np.array([[2, 0], [0, 0]]) from scipy.signal import correlate2d correlate2d(x, w, mode='valid') ##출력: array([[ 2, 4], [ 8, 10]]) 세임 패딩의 경우 오른쪽과 아래쪽 모서리에 제로 패딩 추가 correlate2d..
8장 이미지 분류 - 합성곱 신경망 (1) 8-1 합성곱(Convolution) 연산 - 합성곱 이해하기 - 합성곱 구현하기 1. 넘파이 배열 정의하고 배열 하나 선택해 뒤집기 import numpy as np w = np.array([2, 1, 5, 3]) x = np.array([2, 8, 3, 7, 1, 2, 0, 4, 5]) w_r = np.flip(w) print(w_r) ##출력: [3 5 1 2] 2. 넘파이의 점 곱으로 합성곱 수행하기 for i in range(6): print(np.dot(x[i:i+4], w_r)) ##출력: 63 48 49 28 21 20 3. 싸이파이로 합성곱 수행하기 from scipy.signal import convolve convolve(x, w, mode='valid') ##출력: array([63..
7장 여러개를 분류 - 다중 분류 (3) 7-1 텐서플로와 케라스를 사용하여 신경망 만들기 - 케라스(Kears API) 딥러닝 패키지를 편리하게 사용하기 위해 만들어진 래퍼(Wrapper) 패키지 - 텐서플로 신경망 구현 # 훈련할 가중치 변수 선언 w = tf.Variable(tf.zeros(shape=(1))) b = tf.Variable(tf.zeros(shape=(1))) # 경사하강법 옵티마이저 설정 optimizer = tf.optimizers.SGD(lr = 0.01) #에포크 횟수만큼 훈련 num_epochs = 10 for step in range(num_epochs): # 자동 미분을 위한 연산 과정 기록 with tf.GradientTape() as tape: z_net = w * x_train + b z_net = tf...
7장 여러개를 분류 - 다중 분류 (2) - 의류 이미지 분류 (패션 MNIST) - 의류 데이터 준비 ※ 텐서플로 최신 버전 설치 !pip install tensorflow_gpu==2.6.0 1. 텐서플로 임포트 import tensorflow as tf 2. 텐서플로 버전 확인 tf.__version__ ##출력: '2.6.0' 3. 패션 MNIST 데이터 세트 불러오기 (x_train_all, y_train_all), (x_test, y_test) = tf.keras.datasets.fashion_mnist.load_data() 4. 훈련 세트의 크기 확인 print(x_train_all.shape, y_train_all.shape) ##출력: (60000, 28, 28) (60000,) 5. imshow() 함수로 샘플 이미지 확인 i..
7장 여러개를 분류 - 다중 분류 (1) 7-1 여러 개의 이미지를 분류하는 다층 신경망 다층 신경망을 만들기 위해 소프트맥스(softmax) 함수, 크로스 엔트로피(cross-entropy) 손실 함수를 알아야함 - 다중 분류 신경망 - 다중 분류의 문제점과 소프트맥스 함수 활성화 출력의 합이 1이 아니면 비교하기 어려움 소프트맥스 함수 적용하여 출력 강도 정규화 소프트맥스 함수 : 출력층의 출력 강도를 정규화(전체 출력값의 합을 1로 만듬) - 크로스 엔트로피 손실 함수의 도입 - 크로스 엔트로피 손실 함수 미분 - 다중 분류 신경망 구현 1. 소프트맥스 함수 추가 def sigmoid(self, z): z = np.clip(z, -100, None) # 안전한 np.exp() 계산을 위해 a = 1 / (1 + np.exp(-z)) # 시..
6장 2개의 층을 연결 - 다층 신경망 (4) 6-3 미니 배치를 사용하여 모델 훈련 - 미니 배치 경사 하강법 에포크마다 전체 데이터를 사용하는 것이 아니라 조금씩 나누어 정방향 계산을 수행하고, 그레이디언트를 구하여 가중치 업데이트 작게 나눈 미니 배치만큼 가중치를 업데이트 보통 16,32,64 등 2의 배수 사용 - 미니 배치 경사 하강법 구현 1. MinibatchNetwork 클래스 구현 class MinibatchNetwork(RandomInitNetwork): def __init__(self, units=10, batch_size=32, learning_rate=0.1, l1=0, l2=0): super().__init__(units, learning_rate, l1, l2) self.batch_size = batch_size # 배치 ..
6장 2개의 층을 연결 - 다층 신경망 (3) - 2개의 층을 가진 신경망 구현 1. SingleLayer 클래스를 상속한 DualLayer 클래스 만들기 class DualLayer(SingleLayer): def __init__(self, units=10, learning_rate=0.1, l1=0, l2=0): self.units = units # 은닉층의 뉴런 개수 self.w1 = None # 은닉층의 가중치 self.b1 = None # 은닉층의 절편 self.w2 = None # 출력층의 가중치 self.b2 = None # 출력층의 절편 self.a1 = None # 은닉층의 활성화 출력 self.losses = [] # 훈련 손실 self.val_losses = [] # 검증 손실 self.lr = learning_rate # 학습률..

반응형