앎을 경계하기

DAFIT 66

<DAFIT> 04 한국어 데이터 Tokenizer 01 - 형태소 분석기 라이브러리

가장 먼저 해야할 일 "형태소 분석기 라이브러리"를 설치하자. 그냥 구글에 형태소 분석기 라이브러리 검색하니까 나온 라이브러리 https://konlpy-ko.readthedocs.io/ KoNLPy: 파이썬 한국어 NLP — KoNLPy 0.4.3 documentation KoNLPy: 파이썬 한국어 NLP KoNLPy(“코엔엘파이”라고 읽습니다)는 한국어 정보처리를 위한 파이썬 패키지입니다. 설치법은 이 곳을 참고해주세요. NLP를 처음 시작하시는 분들은 시작하기 에서 가볍게 기본 지식을 습득할 수 있으며, KoNLPy의 사용법 가이드는 사용하기, 각 모듈의 상세사항은 API 문서에서 보실 수 있습니다. >>> from konlpy.tag import Kkma >>> from konlpy.utils ..

<DAFIT> 03 음성 단어 분류기 알고리즘 구현 04 - 오디오 데이터의 이해과정 문제

이번에는 03에서 그렸던 파형을 normalization한 데이터로 다시 한번 그려서 비교하고 차이점을 서술하는 문제이다. import wave import numpy as np import matplotlib.pyplot as plt filepath = './train/bed/004ae714_nohash_1.wav' sound = wave.open(filepath) 파일은 004ae714_nohash_1.wave를 사용했다. signal = sound.readframes(-1) signal = np.fromstring(signal, 'Int16') fs = sound.getframerate() Time=np.linspace(0, len(signal)/fs, num=len(signal)) print(si..

<DAFIT> 03 음성 단어 분류기 알고리즘 구현 03 - 오디오 데이터의 이해과정 문제

지난 오디오 데이터의 이해에 이어서 이번에도 데이터를 이해해보는 과정이다. 문제는 raw data의 shape과 data를 출력해보고 출력한 data에 대한 파형정보를 그래프로 표현해보는 것. 지난 포스팅에서 waveform을 그려봤기때문에 쉽게 해결할 수 있을 것 같다. librosa 대신 wave 라이브러리를 사용해봤다. 코드는 이곳을 참고하였다. 전 포스팅에서 사용했던 코드에다 아래코드를 추가한다. import wave wav = wave.open(path+'/'+folder_list[0]+'/'+fname[0], mode='rb') signal = wav.readframes(-1) # 최대 n 프레임의 오디오를 bytes 객체로 읽고 반환합니다. signal = np.fromstring(signa..

<DAFIT> 03 음성 단어 분류기 알고리즘 구현 02 - 오디오 데이터의 이해 과정 문제

일단 오디오 데이터가 가지고 있는 정보를 서술하기 전에 신호처리 알못이라서 예제에 나와있는 단어들부터 파악하려고 한다. Sampling Rate는 sampling frequency라고도 하고 이산적인 신호를 만들기 위해 연속적 신호에서 얻어진 단위시간 당 샘플링 횟수를 말한다. 단위는 헤르츠이다. (음.. 디지털 신호로 만들기 위해서 아날로그 신호에서 초당 샘플링한 횟수를 sampling rate라고 생각해도 되는걸까..?) bit depth는 음의 세기? 강도를 얼마나 세세하게 표현할 수 있냐라는것. 이 사이트를 보니 sample rate와 bit depth에 대해 잘 이해되게 설명해놨다. https://logicstar.kr/bbs/board.php?bo_table=gt_3_8&wr_id=23&sst..

<DAFIT> 03 음성 단어 분류기 알고리즘 구현 - 01 데이터 셋 준비 과정

지난 데이터 전처리(DF901), 딥러닝으로 은하 분류(DF902)에 이어서 음성 단어 분류기 알고리즘을 만들어보자. 음성 신호 처리 같은건 거의 몰라서,, 구글링을 굉장히 많이 할 것 같다^^;; 요구하는 것은 다음과 같다. 원래 데이터 셋은 이렇게 바로 폴더들만 들어있다. 이것을 각각 train, valid, test 폴더로 나눠서 이동시켜줘야한다. 1. test, valid, train 폴더를 만든다. 2. txt 파일을 읽어서 음원 파일 경로를 배열로 분리한다. 3. test,valid,train 폴더 안에 음원 파일이 속한 폴더가 없으면 만든다. 4. shutil.move() 사용해서 음원 파일을 이동시킨다.

<DAFIT> 02 딥러닝으로 은하 분류하기 08 - Another Model

CNN의 개선된 모델로 AlexNet을 사용했다. 다른 개선된 모델들(VGGNet, GoogleNet, ResNet)보다 구현이 쉬워서 적용해보니 확실히 성능이 개선되었다. AlexNet은 https://m.blog.naver.com/thswlrud0825/221287973276 여기 참고해서 모델 사용함. 원래 제공했던 예제 코드로는 78%, Conv, MaxPooling 하나씩 추가해서 81%, AlexNet을 사용하니 87%로 올랐다. dropout과 batch normalization으로 regularization 효과를 내서 overfitting을 막는다. 그리고 전 모델들보다 훨씬 깊게 쌓아서 더 깊게(?) feature들을 뽑아낸다.

<DAFIT> 02 딥러닝으로 은하 분류하기 07 - Accuracy

7번 문제 전에 사전 설명을 보면 다음과 같다. 각 은하의 형태를 보면 색보다는 모양에서 확연히 분류를 할 수 있을 것 같다. 이것은 꼭 이미지에서 RGB를 반영하지 않더라도 Grayscale로 충분히 학습할 수 있다는 것을 의미한다. 기존에는 아래와 같이 Conv-Pooling-Conv-Flat-FC-FC 구조였다. model.add(layers.Conv2D(32, (3,3), activation='relu', input_shape=(50,50,3))) # RGB model.add(layers.MaxPooling2D((2,2))) model.add(layers.Conv2D(64, (3,3), activation='relu')) model.add(layers.Flatten()) model.add(laye..

<DAFIT> 02 딥러닝으로 은하 분류하기 06 - Validation, Evaluate

6번 문제는 본격적으로 모델을 학습시키고 정확도 평가를 하는 문제이다. keras는 model.fit()으로 model을 학습시킨다. (A)에는 fit이 될 것이다. steps_per_epoch는 1 epoch당 몇번의 step을 진행할 것이냐는 건데, 쉽게 말하면 배치를 몇 번 학습시킬것이냐를 말한다. 주로 총 학습 데이터/배치 사이즈 로 나타낸다. 이 예제에서는 (B) = 10233/batch_size가 될 것이다. validation_steps 는 말 그대로 validation 스텝 수이다. 각 200장이니까 (C) = 200을 써주면 된다. ( batch_size를 3으로 한다고 했을 때를 가정한다) evaluation 과정은 이미 학습이 다 끝난 모델에 test data를 넣어서 진짜 학습이 잘..

<DAFIT> 02 딥러닝으로 은하 분류하기 05 - Loss, Optimizer

이번 05 문제도 지난 04처럼 코드가 아닌 이론을 설명하는 문제이다. Loss function과 Optimizer에 대해서 설명하면 된다. loss function loss function은 ground truth(정답)과 생성한 모델의 예측값 간의 차이를 나타내는 함수. cross entropy(classification), mse(regression)가 대표적이다. cross entropy를 잘 설명해주는 블로그를 참고하면 좋을 것 같다. https://ratsgo.github.io/deep%20learning/2017/09/24/loss/ 딥러닝 모델의 손실함수 · ratsgo's blog 이번 글에서는 딥러닝 모델의 손실함수에 대해 살펴보도록 하겠습니다. 이 글은 Ian Goodfellow 등이..

<DAFIT> 02 딥러닝으로 은하 분류하기 04 - Relu, Softmax

4번 문제는 코드를 작성하는 게 아닌 이론적으로 설명하는 문제이다. relu 0보다 크면 그 값을 그대로 쓰고 0보다 작으면 0을 사용하는 활성화 함수. max(0,x) 입력이 음수인 경우 계속 0이 되어 dying Relu 가 발생한다. softmax 주로 output을 0~1 사이 값으로 정규화하여 주로 확률값으로 나타내는 경우에 사용하는 활성화 함수.