2016의 게시물 표시

하둡 스파크 공부의 필요성

이미지
RNN 공부를 간단히 한 상태에서 kaggle 데이터셋으로 RNN을 구현하는 중이었다. 글자를 행렬로 바꾸는 과정에서 50만개의 글자를 행렬로 만드려니 메모리 오류가 나는 것은 내 노트북에서 당연한 일이었다. 그래서 생각해보니 내가 하둡 스파크를 공부한 이유가 대용량 데이터의 전처리를 보다 빠르게 하기 위함이었다. 집에 있는 그나마 나은 데스크탑으로 스파크를 통해 데이터를 가공하고 가공된 데이터를 가져와 모델링을 하는 것이 효율적일 것 같다. 파이썬 텐서플로우로는 딥러닝 연산을 하고 하둡 스파크에서 데이터의 가공을 하는 메카니즘을 공부해야겠다. 지금은 하둡2 얀 설치에서 막혀있지만 하루 빨리 설치 오류부터 고쳐나가야겠다.

딥러닝에 쓰이는 어려운 라이브러리 정리

Python 라이브러리 정리 이 게시글의 계기는 TensorFlow에 대한 github의 코드를 이해하지 못해서 입니다. 전체 코드를 보고 싶으시다면 char-rnn-tensorflow 에 있습니다. 물론 아래 코드는 해당 라이브러리 함수의 빙산의 일각에 불과합니다. 굉장히 주관적인 어려움에 의한 게시글입니다. 다행히 여기 쓰일 함수를 구글링해서 들어오신 분들이 많을거라 예상되기 때문에 저가 이미 알고 있는 함수들에 대한 언급은 하지 않겠습니다. 딥러닝에서 아래 라이브러리들이 다 꼭 쓰여야만 하는 것도 아닙니다. 단순히 나중을 위해 공부하는 것입니다. import tensorflow as tf import argparse import time import os from six.moves import cPickle from utils import TextLoader from model import Model def main(): parser = argparse.ArgumentParser() parser.add_argument('--data_dir', type=str, default='data/tinyshakespeare', help='data directory containing input.txt') '''(중략)''' parser.add_argument('--init_from', type=str, default=None, help="""continue training from saved model at this path. Path must contain files saved by previous training process: 'conf...

Recurrent Neural Network - 2

이미지
첫번째 RNN 공부는 TensorFlow 공식 홈페이지 RNN 튜토리얼에서 소개된 좋은 게시글을 공부했었습니다. 이번에는 TensorFlow 공식 홈페이지 튜토리얼 을 공부할 것입니다. Recurrent Neural Networks Introduction RNN과 LSTM을 소개하기 위해 colah's blog 게시글 을 보기 바랍니다. 이 글을 번역하여 공부한 것이 저의 첫번째 게시글이었습니다. Language Modeling 이 튜토리얼에서 언어 모델링 문제에서 RNN을 어떻게 학습시키는 지 알아 볼 것입니다. 우리의 목표는 문장에 확률을 할당하는 확률 모델을 fit시키는 것입니다. 주어진 이전 단어들의 히스토리를 이용하여 다음 단어를 예측할 것입니다. 이런 모델의 질을 측정하기 좋은 Penn Tree Bank (PTB) 데이터셋을 이용할 것입니다. 언어 모델링은 음성 인식, 기계 번역, 이미지 캡셔닝과 같은 많은 재미있는 문제에 핵심이기도 합니다. 이 곳 을 보시면 RNN이 여러 재밌는 분야에 쓰이고 있다는 것을 알 수 있습니다. Tutorial Files 아래 파일들은 TensorFlow Github 의 tensorflow/models/rnn/ptb 에 있습니다. File Purpose ptb_word_lm.py PTB 데이터 셋을 train하는 코드 reader.py 데이터셋를 읽는 코드 Download and Prepare the Data 이 튜토리얼에 필요한 데이터셋은  Tomas Mikolov's webpage :   http://www.fit.vutbr.cz/~imikolov/rnnlm/simple-examples.tgz   에 있습니다.  이 데이터셋은 전처리되어 있고 10000의 다른 단어로 이루어져 있습니다. reader.py를 이용해 위 단어들을 unique integer identifier로 만듭니다. The Model ...

Recurrent Neural Network - 1

이미지
이 글은  Understanding LSTM Networks  라는 블로그 포스트를 번역하고 공부한 내용입니다. Recurrent Neural Network 사람은 처음부터 매 순간 생각하지 않습니다. 이 에세이를 읽을 때, 이전의 단어에 대한 이해를 바탕으로 각각의 단어들을 이해합니다. 사람들은 생각을 처음부터 시작하지 않고 이전의 것들을 모두 버리고 생각하지 않습니다. 즉, 사람들의 생각은 지속성을 지닙니다. 기존의 뉴럴 네트워크는 할 수 없었고, 그것이 가장 큰 단점인 것 같았습니다. 예를 들어, 영화에서 발생하는 모든 상황들을 순간마다 분류한다고 상상해봅시다. 기존의 뉴럴 네트워크는 어떻게 자신의 추론을 이용해 이전의 사건들로 다음 사건들을 알릴 지 불명확합니다. 순환 신경망을 이 문제를 풀어냅니다. 순환 신경망은 자신에게로 돌아오는 반복 네트워크를 갖고 있으며 그것이 정보를 계속 유지시켜줍니다. 위 그림에서 뉴럴 네트워크의 덩어리 A, input으로 보이는 Xt 와 output 값인 ht를 볼 수 있습니다. 반복은 정보가 다음 네트워크를 넘어가도록 합니다. 반복들은 RNN을 미스테리하게 만듭니다. 그러나 , 좀 더 생각해본다면, 평범한 신경망과 크게 다를 게 없다고 판명납니다. RNN은 후손 노드에게 메시지를 넘기는 네트워크들의 여러 복사본들이라고 생각되어질 수 있습니다. 반복을 펼쳐보면 어떤 일이 생길 지 생각해봅시다. 연결되어 있는 노드들은 RNN이 sequence(순서) 와 lists(배열)에 직접적으로 관련되어 있다는 것을 드러냅니다. RNN은 저런 데이터를 위한 자연적인 구조입니다. 즉, RNN 구조는 이전의 데이터를 바탕으로 학습해야하는 데이터를 위한 인간 뇌 신경망의 자연적인 메카니즘이라는 말입니다. 몇 년전부터 RNN은 음성인식, 언어 모델링, 번역, 이미지 캡셔닝 등 많은 문제에 적용되어 엄청난 성과를 냈습니다.  The Unreasonable Effectiveness of...

버추얼 머신 공유 폴더 권한 에러

상황 (2016/08/22) 공유 양방향으로 해놨으나 가끔 안되는 경우가 있어 공유 폴더를 만들고자 했다. vm에 폴더를 공유하기 위해 설정에 들어가 만들었으나 권한 에러 발생. 자동 마운트와 항상 사용 버튼을 누른 상태. 에러 접근 권한 오류 해결 sudo usermod -G vboxsf -a 추가할사용자명 sudo shutdown -r now

TensorBoard : Convolutional Neural Network

이미지
TensorBoard : Convolutional Neural Network 이번에는 cnn을 텐서보드에 나타내는 것을 공부해보겠다. cnn에서도 MNIST 예제를 사용하겠다. 하지만 cnn은 컴퓨터에서 너무 느리게 학습되므로 나중에 AWS로 다시 해볼 예정이다. ```python import tensorflow as tf import numpy as np import input_data batch_size = 128 test_size = 256 def init_weights(shape,name):     return tf.Variable(tf.random_normal(shape, stddev=0.01),name=name) def model(X, w, w2, w3, w4, w_o, p_keep_conv, p_keep_hidden):     with tf.name_scope("layer1") as scope:         l1a = tf.nn.relu(tf.nn.conv2d(X, w,                       # l1a shape=(?, 28, 28, 32)                             strides=[1, 1, 1, 1], padding='SAME'))         l1 = tf.nn.max_pool(l1a, ksize=[1, 2, 2, 1],              # l1 shape=(?, 14, 14, 32)       ...

TensorBoard : Neural Network

이미지
TensorBoard : Neural Network 텐서플로우에서 코드를 좀 더 직관적으로 보기 위해 tensorboard 를 공부했다. 이제 NN,CNN,RNN 예제를 텐서보드에서 구동시키기 위해 코드를 재작성해봤다. NN과 CNN은 MNIST 예제를 이용했고 RNN은 아직 미정이다. ```python import tensorflow as tf import numpy as np import input_data def init_weights(shape, name):     return tf.Variable(tf.random_normal(shape, stddev=0.01), name=name) # This network is the same as the previous one except with an extra hidden layer + dropout def model(X, w_h, w_h2, w_o, p_keep_input, p_keep_hidden):     # Add layer name scopes for better graph visualization     with tf.name_scope("layer1") as scope:         X = tf.nn.dropout(X, p_keep_input)         h = tf.nn.relu(tf.matmul(X, w_h))     with tf.name_scope("layer2") as scope:         h = tf.nn.dropout(h, p_keep_hidden)         h2 = tf.nn.relu(tf.matmul(h, w_h2))     with tf.name_scope("layer3") as scope: ...

ML lab 12 DeepLearning

이미지
lec12 : NN의 꽃 RNN 이야기 RNN은 sequence data에서 자주 쓰이는데 이전의 데이터가 다음의 데이터에 영향을 줄 때 자주 사용된다. 위 그림을 자세히 풀어보면 아래와 같다. RNN에는 state라는 개념이 있다. state는 위에서 언급했듯이 이전의 state에 영향을 받는다. 이제 구체적인 연산 방법에 대해 알아보자. 가장 기본이 되는 Vanilla RNN에 대해 알아보자. 새로운 state는 이전의 state와 x와 weights에 의해 결정된다. 그리고 y는 weight와 state로 결정된다. 예를 들어, hello를 RNN했을 때 위와 같은 모습을 가진다. language model은 네이버 검색과 같다. h를 입력했을 때 가장 많이 나오는 e를 보여주고 그 다음 많이 나오는 l을 보여주고 결국 h 하나 입력했는데 사람들이 가장 많이 입력하는 hello가 검색 도우미 창에 나오는 것이다. RNN의 첫번째 단계는 문자열을 벡터화하는 것이다. 위 예시는 one hot encoding한 것이다. [h,e,l,o] 벡터를 가지고 h = [1,0,0,0]으로 만드는 방식이다. 위 hidden layer에서는 input layer와 이전의 hidden layer를 이용해 다음 layer값 weight를 결정한다. 마지막 output 레이어에서는 가장 큰 수를 가진 문자를 선택하게 된다. 하지만 두번째에서는 l을 원했지만 o가 나왔으므로 에러가 발생한다. 간단히 RNN의 과정을 알아보았다. 이제 RNN의 활용 예들은 아래와 같다. 음성 인식, 대화 모델, 이미지 캡쳐 등 여러가지 방면에서 사용된다. RNN에서 여러가지 기술들이 존재한다. 기술마다 쓰이는 곳이 다르다.

ssh key error (하둡 & 버추얼 박스)

상황 (2016/8/20) 버추얼박스 머신에서 하둡 실행 중 네임 노드를 다른 머신으로 변경하다가 ssh key에 대한 에러 발생 에러 발생  sign_and_send_pubkey: signing failed: agent refused operation 해결 sudo apt-get autoremove gnome-keyring ssh-add -D sudo reboot

ML lab 11 DeepLearning

이미지
lec11-1 CNN 만들기 전체적인 cnn과정을 보면 위와 같다. 전체 사진 하나에서 아래와 같이 픽셀을 줄이면서 레이어를 거치면서 학습한다.   위와 같이 어느 부분의 픽셀을 하나의 숫자로 만들어가면서 전체 픽셀을 줄여간다. 그리고 ReLU를 거치고 다음 레이어에 보낸다. 5x5x3 픽셀을 전체 이미지를 다 훑으면서 픽셀을 줄이면 아래와 같은 과정을 통해 28x28x6이 된다. 필터를 통해 픽셀을 줄여나갈 때, 딱 정수로 떨어지지 않는다면 패딩을 통해 맞출 수 있다. 위의 공식에서 N은 전체 이미지의 가로 혹은 세로 픽셀의 갯수이고 F는 필터 픽셀의 가로 혹은 세로 픽셀의 갯수이다. stride는 필터 픽셀이 몇 칸씩 움직이며 필터링을 할 것인가 정하는 것이다. lec11-2: ConvNet Max pooling 과 Full Network 처음에 봤던 cnn의 전체 과정에서 pooling이라는 과정을 보았다. 풀링은 이미지를 압축하는 과정이다. 풀링 가운데에 max pooling이라는 방법이 있다. 위와 같이 규칙을 통해 특정 범위의 픽셀 중 가장 큰 픽셀로 이미지를 압축한다. lec11-3 ConvNet의 활용예 이미지넷에서 정확도를 확 올린 Alexnet의 딥러닝이다. 이때까지 배운 것을 다 사용했다. ReLU도 처음 활용된 예라고 한다. 총 8개의 레이어를 사용하여 앙상블을 했다. 15프로의 오류율을 보였다. 이번에는 최고의 에러율을 보였던 ResNet이다. 사람의 오류율이 5프로인데 이 딥러닝은 3.6프로의 오류율을 보였다. 이 딥러닝은 152개의 레이어를 사용했다. 이 딥러닝의 특이점은 전 레이어의 값이 갑자기 다다음 레이어로 뛰어넘어 연산된다는 것이다. 왜 잘되는 지는 설명하지 못하지만 제일 높은 정확도를 보였다.

Tensorboard 사용법 익히기

이미지
Tensorboard 사용법 익히기 텐서보드 사용법을 익히는 이유는 텐서플로우를 조금 더 직관적으로 공부하기 위함입니다. 텐서보드를 이용해 코드를 그래프로 표현하는 법을 익히기 위해서는 텐서보드에 대한 텐서플로우 라이브러리를 공부해야 합니다. 간단힌 살펴본 결과 코드의 전체적인 흐름은 같으나 그래프로 표현하고 싶은 cost나 weight의 변화 혹은 딥러닝의 레이어의 흐름을 표현하는 코드가 추가되어 있습니다. 우선 코드를 보면서 하나씩 공부해 나가겠습니다. import tensorflow as tf import numpy as np import input_data def init_weights ( shape , name ) : return tf.Variable(tf.random_normal( shape , stddev = 0.01 ), name = name ) # This network is the same as the previous one except with an extra hidden layer + dropout def model ( X , w_h , w_h2 , w_o , p_keep_input , p_keep_hidden ) : # Add layer name scopes for better graph visualization with tf.name_scope( "layer1" ) as scope : X = tf.nn.dropout( X , p_keep_input ) h = tf.nn.relu(tf.matmul( X , w_h )) with tf.name_scope( "layer2" ) as scope : h = tf.nn.dropout(h, p_keep_hidden ) h2 = tf.nn.relu(tf.matmul(h, w_h2 )) with tf.name_scope( "layer3...