Deep Learning 29

Tensorflow Custom Training

Tensorflow를 사용하는 가장 큰 이유는 아마도 편리하게 Deep Learning 모델을 만들고 훈련시킬 수 있다는 점일 것입니다. 특히 2.0부터 Keras가 공식적으로 포함되면서 모델을 만들기가 더 쉬워졌습니다. 물론 그 전에도 Keras를 따로 사용하면 되기는 했지만요. Keras가 대부분의 인기 있는 아키텍처와 유틸리티를 지원하기 때문에 많은 부분을 직접 구현하지 않고, Keras의 구현을 가져다 쓸 수 있죠. 하지만 가끔은 Keras에서 아직 지원하지 않는 모델을 사용하고 싶을 때가 있고, 훈련 과정을 좀 더 세밀하게 제어하고 싶을 때가 있습니다. 이때 Tensorflow의 Custom Training 기능을 사용할 수 있습니다. 오늘은 Keras 패키지 밖의 Tensorflow 기능들도 ..

Deep Learning 2020.06.02

Docker Image에서 개발 중인 코드를 사용하기

전에 Docker를 이용해서 비교적 간편하게 Tensorflow GPU를 사용하는 법을 공유드렸습니다 (Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자). Docker를 이용하면 Performance에 영향은 거의 없으면서, 환경을 독립적으로 유지할 수 있다는 장점이 있습니다. 이런 점은 배포 시에는 아주 좋지만 개발 시에는 치명적인 문제점이 있는데, 바로 코드를 변경할 때마다 Docker Image를 새로 빌드해야 한다는 점입니다. 간단한 방법을 통해서 이 문제를 해결할 수 있습니다. Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자를 따라서 설정을 했다고 가정하겠습니다. 그럼 아래 명령으로 Docker의 Bash shell으로 진입할 수 있습니다. $ dock..

Deep Learning 2020.06.02

Pre-trained Word Vector를 Tensorflow에서 사용하기

Tensorflow에서 제공하는 Embedding Layer는 간편하게 사용하기에 좋습니다. 하지만 아무래도 대량의 데이터를 사용해서 별도로 훈련시킨 Word Embedding을 사용하는 것보다는 성능이 떨어집니다. (Tensorflow의 Embedding Layer vs fastText) fastText 같은 Library는 Python 인터페이스를 제공하기 때문에 pre-trained word vector를 Tensorflow에서 사용하기 쉬운 편입니다 (한국어 토큰의 단위는 뭐가 좋을까?). 하지만 이런 인터페이스가 없이 순수하게 단어와 그 단어의 Embedding 데이터만 있다면 어떻게 할까요? 결론부터 말하면 Keras Embedding Layer의 weights를 수동으로 지정해주고, trai..

Deep Learning 2020.05.20

CategoricalCrossentropy vs SparseCategoricalCrossentropy

Tensorflow는 classification task에서 간편하게 사용할 수 있는 cross entropy loss 함수를 제공하고 있습니다. Binary classification이라면 BinaryCrossentropy를 사용하면 되고, Multi-class classification이면 CategoricalCrossentropy를 사용하면 됩니다. 그런데 API를 보면 비슷하게 생긴 SparseCategoricalCrossentropy라는 녀석도 있습니다. 차이가 뭘까요? 결론부터 말씀드리면, 훈련 데이터의 label(target)이 one-hot vector 이면 CategoricalCrossentropy 훈련 데이터의 label(target)이 정수이면 SparseCategoricalCross..

Deep Learning 2020.05.14

대용량 훈련 데이터 처리 - Generator로 TF Dataset 만들기

1. 너무 큰 데이터 tf.data.Dataset는 Tensorflow의 훈련 데이터를 다룰 때 참 편리합니다. Padding, Batch, Shuffle, Map 등을 다 지원해주니까요. 일단 데이터를 Dataset으로 변환만 시키면 그다음부터는 아주 편리하게 사용할 수 있습니다. from_tensor_slices를 쓰면 numpy array를 바로 Dataset으로 변환해주니까 더할나위 없이 편리하고요. 하지만! 이 방법에는 치명적인 문제가 있으니... 바로 변환하려는 전체 데이터가 메모리에 올릴 수 있는 크기여야 한다는 겁니다. 물론 가상 메모리를 써서 메모리를 가짜로 늘릴 수는 있지만 이 순간부터 Thrashing으로 속도가 급격하게 떨어지고, Out-of-memory로 죽기도 합니다. 이 문제가..

Deep Learning 2020.05.07

Word Vector 훈련 데이터를 키우면 얼마나 도움이 될까?

지난 테스트(Tensorflow의 Embedding Layer vs fastText)에서 Tensorflow의 자체 임베딩보다는 아무래도 대용량의 데이터를 사용해서 훈련시킨 fastText가 성능 개선에 도움이 된다는 사실을 확인하고 또 궁금한 점이 생겼습니다. 그렇다면 fastText를 훈련시키는 데이터를 키우면 어떨까요? 한국어 위키피디아도 크기는 하지만 실제로 더 큰 데이터는 나무 위키입니다. 콘텐츠 품질에 대해 논란이 있지만 방대한 텍스트 데이터이기는 하죠. 그리고 다소 심한 구어체와 비속어들이 있지만 어떻게 보면 위키피디아보다 요즘 인터넷 상의 언어 형태를 더 잘 보여준다고 볼 수도 있고요. 그리하여 기존 위키피디아 + 네이버 영화 데이터에 나무위키 데이터까지 더해서 fastText를 훈련시켜보..

Deep Learning 2020.05.01

Tensorflow의 Embedding Layer vs fastText

지난 번 한국어 토큰 테스트(한국어 토큰의 단위는 뭐가 좋을까?)를 해보고나니, Tensorflow(Keras)의 Embedding은 어떨지 궁금했습니다. 그래서 지난번 테스트 중 가장 성능이 좋았던 "형태소+글자" 단위 토큰으로 비교를 해보았습니다. Embedding dimension은 fastText의 기본값 100으로 그대로 하고요. OOV를 위한 토큰을 추가합니다. import tensorflow as tf import numpy as np from tqdm import tqdm from konlpy.tag import Mecab OOV_TOKEN = '' EMBEDDING_DIM = 100 Toknizer와 코퍼스 읽는 건 앞에서 그대로 가져오고요. tagger = Mecab() def toke..

Deep Learning 2020.04.30

한국어 토큰의 단위는 뭐가 좋을까?

한국어 자연어 처리를 하다 보면 토큰의 단위를 뭐로 할지 고민이 될 때가 있습니다. 토큰을 어떻게 잡느냐에 따라 데이터의 크기도 달라지고, 아마도(?) 최종 시스템의 성능도 달라질 거고요. 그래서 이 아마도를 한번 확인해보기로 했습니다. 토큰에 따라 성능이 달라질까요? 결론은 네 그렇습니다. 두 줄 요약. 어절을 통으로 쓰는 것보다는 형태소나 Subword와 같은 작은 단위가 좋다. 글자를 쓰느냐, 자소를 쓰느냐는 (특히 형태소 단위 토큰에서) 크게 유의미하지 않다. 이번 글의 또다른 목적은 간단한 한국어 자연어 처리기를 나름 최신의 기술들을 사용해서 처음부터 끝까지 만드는 법을 보여드리는 겁니다. 그래서 전체 데이터와 코드를 포함했습니다. 시작하기 전에 이 글은 읽으시는 분께서 Tensorflow, M..

Deep Learning 2020.04.28

Docker를 이용해서 편리하게 GPU Tensorflow를 사용하자

Ubuntu에 업데이트가 있을 때마다, Tensorflow에 업데이트가 있을 때마다, GPU를 사용할 수 있도록 Tensorflow를 설치하는 일이 여간 어려운 일이 아닙니다. Nvidia 드라이버 버전도 꼬이고, CUDA는 또 호환되는 버전이 따로 있고, Package는 LTS만 지원한다고하고, CuDNN 버전 등등에. 여러분만의 고민이 아닙니다. 이 고민을 Docker를 이용해서 비교적(?) 손쉽게 해결해보겠습니다. 물론 Docker에 대해서 아주 기본 사용법은 아셔야 합니다. (여담이지민 Ubuntu 20.04 LTS가 출시됐다기에 설치해보면서 Tensorflow를 Docker로 설치해봤습니다. 아무래도 이제 막 나온 따끈따끈한 판이다 보니 CUDA와 Tensorflow가 잘 될지도 의문이었고, 무..

Deep Learning 2020.04.25