딥러닝(텐서플로우) 14

윈도우 기법

데이터의 전체를 모두 인풋으로 학습하는것이 아니라, 일부 구간은 학습으로 사용하고, 일부 구간은 해당 학습의 예측 데이터로 활용하는 방법이다. 시간 순서 혹은 정렬된 데이터의 미래예측 뿐 아니라 다양한 분야에서 사용된다. 학습시 인풋으로 데이터 전부를 전달하는것이 아닌, 일부 구간만 잘라서 학습 데이터로 사용하고, 그 다음 부터 일부 구간은 예측 결과로 사용한다. 다시말해, 앞구간의 데이터를 통해 학습한 예측 결과로 그 다음 구간의 데이터를 활용한다. 예를들어 1,2,3,4,5,6,7,8,9,10 의 데이터가 있다고 한다면, 1,2,3,4,5 가 첫번째 윈도우가 되고, 6,7,8,9,10 이 다음 윈도우가 된다. 앞의 윈도우는 학습데이터로 사용하고, 뒤의 윈도우는 예측 데이터로 사용한다. 시간 기준으로 ..

자연어 처리(NLP), 원핫벡터 (ft.임베딩), GlobalPooling

1. 자연어 처리 NLP Natural Language Process를 자연어 처리라고 한다. 우리가 일상적으로 사용하는 문장을 이해하고 딥러닝에서 활용하기 위함이고, 앞서 이야기 했듯 NLP를 위해 LSTM 알고리즘을 사용하여 처리한다. 그리고 여기서 빠질수 없는것이 원핫벡터이다. 이 카테고리 초기 글 중 FNN 에 관련한 글을 적었을때 설명한 적이 있으나, 따로 글로 빼는것이 찾기가 편할것 같아서 따로 기록을 한다. 2. 원핫벡터 (원핫 인코딩) 일상적으로 사용하는 문장을 데이터화 하여 사용하기 위한 방법이다. 1개만 1의 값을 가지고 나머지는 0을 가지는 벡터를 원핫 벡터라고 한다. "나는 버스를 타고 출근을 한다." 라는 문장이 있을 경우, 각 단어를 구분짓기 위해 임의의 숫자를 배정해보자 예를들..

RNN, LSTM

딥러닝은 해당 서버를 종료하거나, 해당 레이어에 다른것을 학습 시키거나 혹은 epoch 가 진행되면서 앞에 학습했던 내용들을 잊어 버린다. 1. RNN RNN은 학습했던 데이터를 다시 인풋으로 넣음으로서, 이전에 학습했던 내용을 토대로 동작하기 위함이다. Recurrent Neural Networks 의 줄임말 이다. RNN 으로도 FNN 보다 약간 나을뿐이라, 다른 방식이 나오게 되었고, 그것이 LSTM 이다. Long Short Term Memory의 약자이다. 2. LSTM LSTM의 경우 뇌가 기억하는 방식을 흉내낸것으로, 장기 기억중 얼만큼 소실할 것인가, 새로 입력한 정보 중 얼마를 혹은 무엇을 몇% 정도 장기기억으로 이동할 것인가 같은 메커니즘을 구현해 낸 알고리즘 이다. 일기예보, 주가예측..

DeConv (DCNN), ConvTranspose

1. Deconvolutional Networks - CNN은 이미지를 압축하는 역할을 했다면, DCNN은 그 반대되는 역할을 수행한다. - 이미지를 팽창, 확대하는 역할을 한다 2. keras.layers.Conv2DTranspose - 원본과 동일한 형태로 복원 해주는 함수. (Upsampling) - Deconv 의 경우 원본값으로 되돌려 주지만, Transpose 는 그 형식만 원본으로 맞춰줄 뿐, 실제 데이터를 원본으로 돌리는 것은 아니다. - 엄밀히 말하면 Transpose 는 Deconv 가 아니지만, 해당 작업을 위해 사용된다. - 즉, 이미지 처리 과정에서 사이즈를 줄인 후 학습한 경우, 그 값을 원본 크기로 다시 복원 할때 사용된다. - 인자값 - 1번째 인자값 filter : 출력되는..

이미지 생성, GAN

Generative Adversarial Network 의 줄임말이다. 이미지를 생성하는 알고리즘 이다. 사전 지식이나 기억이 없이 이미지를 생성해 낸다. 즉 학습데이터가 없다. 동작방식은 다음과 같다, Generator AI 가 있고, Discriminator AI 가 있다. Generator AI 는 이미지를 생성하는 AI 이고, Discriminator AI는 해당 이미지가 진짜 인지 가짜인지를 판단하는 AI 이다. 두 AI를 경쟁관계로 두어 딥러닝을 하게 되면, 양쪽 AI의 수준이 점점 늘어나며, Generator의 수준이 일정 수준을 뛰어 넘게 되면 Discriminator 가 더이상 detect를 하지 못하게 된다. 이 후 Generator 만을 이용하여 이미지를 생성하게 된다. 1. Disc..

Object Detection 및 Semantic Segmentation (FCN)

1. Object Detection - 사물을 인식 하는 방법 - 이미지 영역을 가로/세로로 분할 한 후 분할된 영역들을 CNN을 통해 분석 작업을 한다. 각 영역에 특정 물체가 속해 있는지를 판별하여 물체를 인식한다 - yolo 프레임워크에서 활용, (실시간으로 인식 가능) 2. Semantic Segmentation - 사진 (영상) 에서 각기 다른 물체를 인식하는 것을 말한다. 같은 물체의 경우 같은 물체로 인식한다 (예 : 사람들) - 모든 픽셀을 하나 하나 분류하여 동작한다. - 최근에는 단 한번의 연산으로 모든 픽셀을 분류하는 알고리즘이 있다. (FCN) - 간단히 설명하자면, 1차적으로 Object Detection 으로 물체를 인식하고, 인식된 영역의 픽셀을 분류하여 정확히 Detect 한..

keras.layers.concatenate

데이터를 합치는 함수. A 데이터, B 데이터가 있을경우 두개의 데이터를 합쳐 C 데이터를 생성함 keras.layers.Concatenate()([데이터1, 데이터2]) [1,2,3] 데이터와 [4,5,6] 데이터가 있을경우, Add 를 이용하면 [5,7,9] 가 되고, concatnenate 를 하면 [1,2,3,4,5,6] 이 된다. 하나의 신경망을 거친 결과물 A 와 B 를 합쳐 다른 신경망의 input 으로 넣는 용도로 사용 할 수 있다. 하나의 인풋을 통해 딥러닝 학습하는것이 아니라, 멀티 인풋을 이용해 학습할 때 사용한다. 즉, A 연산 결과, B 연산 결과를 모두 합쳐 새로운 연산을 한다. Semantic Segmentation 의 Unet 에서 이미지 처리 후 원본 사이즈로 복원(?) 하..

Fit 의 인자값 X, Y

신경망 학습을 명령하는 함수인 Fit 에 반드시 들어 가야 할 인자값중 하나이다. X, Y를 Train 인자값도, Test 인자값도 같은 쌍으로 들어 가게 되는데, 이 X가 무엇인지 Y가 무엇인지 명확히 모르고 있어서 정리겸 글을 적는다. X 는 실제 테스트에 수행되는 데이터 이다. Y 는 X 가 소속되는 데이터, 즉 카테고리 혹은 label 이다. 예를들자면, 이미지를 분류하는 신경망의 경우, X는 이미지 데이터, Y는 이미지가 속한 분류 (예 : 신발, 옷, ....) 의 카테고리를 의미한다. 예를 하나 더 들자면, 학생들의 신체 데이터를 분류 할때, 해당 신체데이터가 초등학교,중학교, 고등학교의 분류를 가진다. 여기서 신체 데이터 자체는 X, 초등,중,고등학교 의 분류 카테고리는 Y 값이다. Fit..

Predict

앞서 한 FNN, CNN 모두 학습까지는 해 보았으나, 실제 학습된 AI 에게 데이터를 던지고 결과를 받는것은 해보지 않았다. Predict 함수는, 실제 데이터를 넘겨, 학습된 AI로 부터 결과를 받아오는 함수 이다. 인자값으로는 학습에 사용된 X 데이터와 동일한 데이터를 넘겨주어야 한다. item = model.predict(학습에 사용한 x 데이터와 동일한 데이터셋) print(f'${item[0]}') print("================") print(f'${np.argmax(item[0])}') 예시는 위와 같고, 결과값을 받아오고 그냥 출력을 하면, 숫자값만 쭉 나열이 되어 있다. 학습에 사용되는 데이터는 numpy 를 이용하여 재구성하여 던지므로, Predict의 결과값 또한 nump..

이미지 (영상) 딥러닝 CNN

이미지(영상) 데이터를 딥러닝 하기 위해선 CNN을 보통 사용한다. 물론 FNN 으로도 사용할 수 있으나 학습률이 좋지 못하다. FNN으로 처리하는 과정을 설명하자면, Flatten 을 이용하여 이미지의 X, Y 의 2차원 정보를 1차원인 배열로 변경한 후 일반 분류데이터 처럼 은닉층을 통해 학습을 시킨다. 별도로 쓰지는 않고, CNN 계산 후 Flatten 을 이용하여 최종 완성 한다. 1. keras,layers.Flatten - 인자값으로 input_shape=(숫자, 숫자) 를 입력받는다 - 해당 인자값은 , 인풋으로 받을 이미지의 x,y 크기 이다. keras.layers.Flatten(input_shape=(x축 이미지 크기, y축 이미지 크기)), keras.layers.Dense(은닉층 개..