딥러닝
0807 6장 텍스트 데이터 다루기 [Embedding층에 사용할 IMDB 데이터 로드하기]
원-핫 인코딩 - 단어수준의 원-핫인코딩 import numpy as np # 초기 데이터 : 각 원소가 샘플 # ( 이 예에서 하나의 샘플이 하나의 문장. 하지만 문장 전체가 될 수 도 있음 ) samples = ['The cat sat on the mat.', 'The dog ate my homework.'] # 데이터에 있는 모든 토큰의 인덱스를 구축 token_index = {} for sample in samples : # split() 메서드를 사용해 샘플을 토큰으로 나눈다. # 실전에서는 구둣점과 특수 문자도 사용 for word in sample.split(): if word not in token_index: # 단어마다 고유한 인덱스 할당 token_index[word] = len(to..
0807 미세조정 fine-tuning
미세조정은 특성추출에 사용했던 동결 모델의 상위 층 몇 개를 동결에서 해제하고 모델에 새로 추가한 층과 함께 훈련하는것. 주어진 문제에 조금 더 밀접하게 재사용 모델의 표현을 일부 조정하기 때문에 미세조정이라고 부름. - 스스로 해보기 컨브넷은 컴퓨터 비전 작업에 가장 뛰어난 머신러닝모델, 아주 작은 데이터 셋에서도 처음부터 훈련해서 괜찮은 성능을 낼 수 있음. 작은 데이터셋에서는 과대적합이 가장 큰 문제!! -> 데이터 증식으로 해결 특성추출 방식으로 새로운 데이터셋에 기존의 컨브넷을 쉽게 재사용 할 수 있음. -> 작은 이미지 데이터셋 작업 효과적. 특성추출을 보완하기위해 미세조정사용 -> 기존 모델에서 사전에 학습한 표현의 일부를 새로운 문제에 적용. 성능 업!
0807 사전훈련된컨브넷사용하기 - VGG16합성곱
- VGG 네트워크 다운받기 from keras.applications import VGG16 conv_base = VGG16(weights = 'imagenet', ## 모델을 초기화할 가중치 체크포인트 지정 include_top = False, ## 최상위 완전 연결 분류기를 포함할지 안할지 input_shape = (150, 150, 3)) ## 이미지 텐서의 크기 - 합성곱 구조 보기 conv_base.summary() - ImageDataGenerator를 사용하여 이미지와 레이블을 넘파이 배열로 추출 - conv_base모델의 predict 메서드를 호출하여 이 이미지에서 특성을 추출 import os import numpy as np from keras.preprocessing.image i..
0806 kaggle 자료 이용해서 컨브넷 훈련하기 - 소규모데이터
https://www.kaggle.com/c/dogs-vs-cats/data에서 자료 내려받기! - 디렉토리 설정하기 import os, shutil original_dataset_dir = './datasets/cats_and_dogs/train' original_dataset_dir - 저장할 디렉터리 공간 만들기 # 소규모 데이터셋을 저장할 디렉터리 base_dir = './datasets/cats_and_dogs_small' os.mkdir(base_dir) # 훈련, 검증, 테스트 분할을 위한 디렉터리 train_dir = os.path.join(base_dir, 'train') os.mkdir(train_dir) validation_dir = os.path.join(base_dir, 'vali..
0806 합성곱 신경망
학습도니 패턴은 평균 이동 불변성을 갖는다!! -> 컨볼루션의 특징 nXn 일때 n의 크기에 따라서 패딩을 다르게 줌!! - 패딩 주기 - 스트라이드
0806 +) 가중치규제, 드롭아웃
신경망에서 과대적합을 방지하기위한 방법 1. 훈련데이터를 더 모으기 2. 네트워크의 용량을 감소시키기 3. 가중치 규제를 추가하기 4. 드롭아웃을 추가하기 - 모델 생성하기 ## 가중치 규제 모델 from keras import regularizers ## l2란 가중치의 파라미터를 모두 제곱하여 더한 후 이 값의 제곱근을 구함. ## l2(0.001)이란 가중치 행렬의 모둔 원소를 제곱하고 0.001을 곱하여 네트워크 ## 전체 손실에 더해진다는 의미. 훈련할때만 추가됨! model2 = models.Sequential() model2.add(layers.Dense(16, kernel_regularizer = regularizers.l2(0.001), activation = 'relu', input_s..