본문 바로가기

반응형

딥러닝 학습

(27)
9장 텍스트 분류 - 순환신경망 (5) 9-4 LSTM 순환 신경망으로 텍스트 분류 - LSTM 타임 스텝이 멀리 떨어진 영단어 사이의 관계를 파악하기 위함 1997년 호크라이터와 슈미트후버가 고안한 것으로, 그레이디언트 소실(vanishing gradient) 문제를 극복하여 긴 시퀀스를 성공적으로 모델링하게 됨 셀의 구조 - 텐서플로로 LSTM 순환 신경망 만들기 1. LSTM 순환 신경망 만들기 from tensorflow.keras.layers import LSTM model_lstm = Sequential() model_lstm.add(Embedding(1000, 32)) model_lstm.add(LSTM(8)) model_lstm.add(Dense(1, activation='sigmoid')) model_lstm.summary()..
9장 텍스트 분류 - 순환신경망 (4) 9-3 텐서플로로 순환 신경망 만들기 - SimpleRNN 클래스로 순환 신경망 만들기 1. 순환 신경망에 필요한 클래스 임포트 from tensorflow.keras.models import Sequential from tensorflow.keras.layers import Dense, SimpleRNN 2. 모델 만들기 model = Sequential() model.add(SimpleRNN(32, input_shape=(100, 100))) model.add(Dense(1, activation='sigmoid')) model.summary() """ Model: "sequential" ________________________________________________________________..
9장 텍스트 분류 - 순환신경망 (3) - 순환 신경망 클래스 구현하기 1. init() 메서드 수정 import tensorflow as tf def __init__(self, n_cells=10, batch_size=32, learning_rate=0.1): self.n_cells = n_cells # 셀 개수 self.batch_size = batch_size # 배치 크기 self.w1h = None # 은닉 상태에 대한 가중치 self.w1x = None # 입력에 대한 가중치 self.b1 = None # 순환층의 절편 self.w2 = None # 출력층의 가중치 self.b2 = None # 출력층의 절편 self.h = None # 순환층의 활성화 출력 self.losses = [] # 훈련 손실 self.val_losses ..
9장 텍스트 분류 - 순환신경망 (2) 9-2 순환 신경망 만들고 텍스트 분류 - 훈련 세트와 검증 세트 준비 IMDB 데이터 세트(인터넷 영화 데이터베이스(Internet Movie Database)에서 수집한 영화 리뷰 데이터) 훈련 세트 25,000개, 테스트 세트 25,000개 (훈련 세트에서 5,000개 분리하여 검증 세트로 사용) 1. 텐서플로에서 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) ##출력 Downloading data from https://storage.google..
9장 텍스트 분류 - 순환신경망 (1) 9-1 순차 데이터와 순환 신경망 - 순차 데이터 시계열(time series) 데이터 : 일정 시간 간격으로 배치된 데이터 순차 데이터(sequential data) : 시계열 데이터와 같이 샘플에 순서가 있는 데이터 타임 스텝(time step) : 모델에서 순차 데이터를 처리하는 각 단계 완전 연결 신경망에 순차 데이터가 주입되는 모습 - 순환 신경망 뉴런의 출력이 순환되는 신경망 은닉층의 출력이 다시 은닉층의 입력으로 사용 됨 순환 신경망에서 층이나 뉴런을 셀(cell)이라고 함 각 뉴런마다 순환 구조를 표현하기 번거로워 셀 하나에 순환 구조 나타냄 순환 신경망에서는 셀의 출력을 은닉 상태(hidden state)라고 함 - 순환 신경망의 역방향 계산 가중치 W2에 대한 손실 함수의 도함수 구하기..
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..

반응형