728x90
반응형

심층 신경망

 

8.1 더 깊게

8.1.1 더 깊은 신경망으로 

손글씨 숫자를 인식하는 심층 cnn

채널 수 : 16, 16, 32, 32, 64, 64

가줓이 초깃값: He 초깃값

가중치 매개변수 갱신 : Adam

 

3x3 의 작은 필터를 사용한 합성곱 계층

활성화 함수는 ReLU

완전연결 계층 뒤에 드롭아웃 계층 사용

Adam을 사용해 최적화

가중치 초기값은 'He의 초깃값'

 

8.1.2 정확도를 더 높이려면

data augmentation: 입력 이미지(훈련 이미지)를 알고리즘을 동원해 '인위적'으로 확장합니다.

미세한 변화를 주어 이미지의 개수를 늘리는 것

crop이미지 일부를 잘라내는

flip*좌우를 뒤집는

밝기 등의 외형 변화

확대  축소 등의 스케일 변화

 

8.1.3 깊게 하는 이유

이론적인 근거는 아직 많이 부족한 것이 사실이다.

연구와 실험 결과를 바탕으로 설명할 수 있는 것이 몇가지 있다.

 

1. ILSVRC로 대표되는 대규모 이미지 인식 대회의 결과에서 파악 할 수 있다.

층의 깊이에 비례해 정확도가 좋아진다.

깊게 하는 이점:

 신경망의 매개변수 수가 줄어든다는 것입ㄴ디ㅏ.

 층을 깊게 한 신경망은 깊지 않은 경우보다 적은 매개변수로 같은(혹은 그 이상)수준의 표현력을 달성 할 수 있다.

 5x5 -> 연산 1회   (5x5) => 25개

 3x3 -> 2회 반복하여 5x5 대체 가능 (2x3x3) => 18개

 3x3 3회  => 7x7

 

receptive field:

작은 필터를 겹쳐 신경망을 깊게 할 때의 장점은 매개변수 수를 줄여 넓은 수용 영역을 소화할 수 있다는 데 있다.

(수용 영역은 뉴런에 변화를 일으키는 국소적인 공간 영역)

게다가 층을 거듭하면서 ReLU 등의 활성화 함수를 합성곱 계층 사이에 끼움으로써 신경망의 표현력이 개선됩니다.

이는 활성화 함수가 신경망에 '비선형' 힘을 가하고 , 비선형 함수가 겹치면서 더 복잡한 것도 표현할 수 있기 떄문ㅇ

 

2. 학습의 효율성

학습 데이터의 양을 줄여 학습을 고속으로 수행할수 있다는 뜻

 

합성곱 계층에서는 에지 등의 단순한 패턴에 뉴런이 반응하고 층이 깊어지면서 텍스처와 사물의 일부와 같이 점차 더 복잡한 것에 반응한다.

 

3. 신경망을 깊게 하면 학습해야 할 문제를 계층적으로 분해 할 수 있습니다.

각 층이 학습해야 할 문제를 더 단순한 문제로 대체할 수 있는 것이죠 .

 

4. 정보를 계층적으로 전달 할 수 있다는 점도 중요

예: 에지를 추출한 층의 다음 층은 에지 정보를 쓸 수 있고 , 더 고도의 패턴을 효과적으로 학습하리라 기대할 수 있습니다.

즉 , 층을 깊게 함으로써 각 층이 학습해야 할 문제를 '풀기 쉬운 단순한 문제'로 분해할 수 있어 효율적으로 학습하리라 기대할 수 있습니다.

 

 

8.2 딥러닝의 초기 역사

이미지 인식 기술을 겨루는 장인 ilsvrc imageNet Large scale visual recognition challenge 2012년 대회

AlexNet

 

8.2.1 이미지넷 

이미지넷 은 100만 장이 넘는 이미지를 담고 있는 데이터셋

ILSVRC대회:

분류 classification 

톱-5 top-5 error  확률이 가장 높다고  생각하는 후보 클래스 5개 안에 정답이 포함되지 않는 , 즉 5개 모두가 틀린 비율

 

 

2012년 AlexNet

2015년 ResNet 

 

8.2.2 VGG

합성곱 계층과 풀링 계층으로 구성되는 '기본적'인 CNN입니다.

비중있는 층(합성곱 계층, 완전 연결 계층)을 모두 16층(혹은 19층)으로 심화한게 특징입니다.( layer에 따라서 VGG16, VGG19 )

VGG : 주목할 점 : 3X3 작은 필터를 사용한 합성곱 계층을 연속으로 거친다는 것입니다.

2~ 4회 연속으로 풀링 계층을 두어 크기를 절반으로 줄이는 처리를 반복합니다. 

그리고 마지막에는 완전연결 계층을 통과시켜 결과를 출력합니다.

VGG는 2014년 2위

성능 면에서는 1위인 GoogLeNet에 뒤지지만 , VGG는 구성이 간단하여 응용하기 좋습니다.

 

8.2.3 GoogLeNet

인센션 구조

GoogLeNet은 세로 방향 깊이뿐 아니라 가로 방향도 깊다는 점이 특징입니다.

GoogLeNet 가로 방향에 '폭'이 있습니다.

이를 인셉션 구조라 하며  , 그 구조는 위의 그림과 같습니다.

인셉션  구조 : 같이 크기가 다른 필터(와 풀링)를 여려 개 적용하여 그 결과를 결합니다.

이 인셉션 구조를 하나의 빌딩 블록(구성요소)으로 사용하는 것이 GoogLeNet의 특징인 것이죠 , 또 GoogLeNet 에서는 1x1 크기의 필터를 사용한 합성곱 계층을 많은 곳 에서 사용합니다. 

이 1x1 의 합성곱 연산은 채널 쪽으로 크기를 줄이는 것으로 , 매개변수 제거와 고속 처리에 기여합니다.

 

8.2.4 ResNet 

마이크로소프트의 팀이 개발한 네트워크입니다.

특징: 지금 까지 보다 층을 더 깊게 할 수 있는 특별한 '장치'에 있습니다.

깊게 하는 것이 성능 향상에 중요하다는 건 알 고 있었지만 그러나 딥러닝의 학습에서는 층이 지나치게 깊으면 학습이 잘 되지 않고 , 오히려 성능이 떨어지는 경우도 많습니다.

ResNet에서는 그런 문제를 해결하기 위해  스킵연결skip connection을 도입합니다.

이 구조가 층의 깊이에 비례해 성능을 향상시킬 수 있게 한 핵심입니다.( 물론 층을 깊게 하는 데는 여전히 한계가 있습니다.)

 

시킵 연결이란 아래 그람와 같이 입력 데이터를 합성곱 계층을 건너뛰어 출력에 바로 더하는 구조를 말합니다.

스킵 연결은 층이 깊어져도 학습을 효율적으로 할 수 있도록 해주는데 , 이 는 역전파 때 스킵 연결이 신호 감쇠를 막아주기 때문입니다.

스킵 연결은 입력 데이터를 '그대로 ' 흘리는 것으로 , 역전파 때도 상류의 기울기를 그대로 하류로 보냅니다.

여기에서의 핵심은 상류의 기울기에 아무런 수정도 가하지 않고 '그대로 '흘린다는 것이죠 . 그래서 스킵 연결로 기울기가 작아지거나 지나치게 커질 걱정 없이 앞 층에 '의미 있는 기울기'가 전해지리라 기대할 수 있습니다.

층을 깊게 할 수록 기울기가 작아지는 소실 문제를 이 스킵 연결이 줄여주는 것입니다.

VGG신경망을 기반으로 스킵 연결을 도입하여 층을 깊게 했습니다.

ResNet은 합성곱 계층을 2개 층마다 건너뛰면서 층을 깊게 합니다

 

전이학습 transfer learning : 학습된 가중치(혹은 그 일부_를 다른 신경망에 복사한 다음, 그 상태로 재학습을 수앵합니다.

예를 들어 vgg와 구성이 같은 신경망을 준비하고 , 미리 학습된 가중치를 초깃값으로 설정한 후 , 새로운 데이터셋을 대상으로 재학습(fine tuning)을 수행합니다.

전이 학습은 보유한 데이터셋이 적을 때 특히 유용한 방법입니다.

 

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

08-3. 딥러닝  (0) 2021.01.06
08-2. 딥러닝  (0) 2021.01.04
07-3 합성곱 신경망(CNN)  (0) 2020.12.18
07-2. 합성곱 신경망(cnn)  (0) 2020.12.09
07-1. 합성곱 신경망(cnn)  (0) 2020.11.19
728x90
반응형

인수 (factor) :

문자형 데이터를 저장하는 새로운 방식의 프레임워크를 제공한다.

수준(level):

특정한 값만을 포함하는 특별한 벡터이다.

 

factor() 함수의 levels옵션을 이용해 새로운 수준값을 인수에 추가해야 한다.

 

다차원 배열:

일반 백터를 생성 한 후 차원들을 부여해 만들어진다.

array() 

일반 벡터는 1차원 배열로 

dim() 다차원 배열로 바꾸려면

 

행렬(matrix)은 2차원 배열의 특별한 경우로 주로 matrix()함수 이용

nrow

ncol

cbind() rbind()

 

dimnames()

rownames()

colnames()

 

is.array()

is.matrix()

 

데이터프레임

data.frame()

as.data.frame()

stringAsFactors 옵션

stringAsFactors= FALSE  지정하지 않으면 문자열을 포함한 열들을 인수로 변환해 저장한다.

transform()함수를 사용해 문자형으로 저장하고 싶은 열들을 지정하려면 as.character()또는 as.factor()함수를 사용하면 된다.

 

 

R로 데이터 로드하기

install.packages()

library()또는 require()

getwd() 파일 입출력의 기본이 될 위치를 알 수 있다.

setwd() 위치 변동

 

데이터프레임 저장하기

write.table() 함수

write.csv()

 

기본도표 및 ggplot2패키지

히스트그램 과 선점도

hist()

plot()

curve()함수를 사용하면 단변량 수학 함수의 그래프를 from과 to값으로 지정된 구간에서 작성할 수 있다.

expr인수는 수치 벡터 또는 수치 벡터를 리턴하는 함수를 출력물로 지정할 수 있게 해 준다.

pie()함수로 원형 차트를 그릴 수 있다.

boxplot()함수를 이용하면 상자그림을 그릴 수 있다.

 

 

제어문

for(i in vector){commands}

 

apply()함수를 행렬 또는 배열에 대해 행 방향이나 열 방향으로 , 또는 양 방향으로 반복적으로 함수를 적용할 수 있게 해주는데 , for()루프에 대한 좋은 대안이 된다.

apply()  두번째 인수인 MARGIN의 값이 1인 경우는 행 방향으로 , 2인 경우는 열 방향으로 , c(1,2) 인 경우에는 양 방향으로 지정된 함수를 반복 적용한다.

  FUN: 마지막 인수 함수 mean()이나 function(x) x+3

 

if문

if(condition){commands}

else if(condition){commands}

else{commands}

 

while()루프

while(condition){commands}

 

repeat{}, break문

repeat{commands} while와 유사한데 , break문을 포함시키지 않으면 계속 코드를 문한히 반복 실행하게 된다.

 

함수 function

특정 작업을 수행하고 그 결과를 출력하거나 객체 형태로 리턴해 주는 짧은 코드들을 의미한다.

help()함수로 함수 내용을 확인한다.

??mean

na.rm = TRUE

반응형

' > 빅데이터 통계분석과 R' 카테고리의 다른 글

04  (0) 2021.01.01
03  (0) 2020.12.30
01  (0) 2020.12.20
728x90
반응형

과학 계산은 수리 모형 및 주어진 문제를 해석하고 시각화해 해법을 찾는 계량 분석 기법을 이용해 정보과학적으로 문제를 해결하는 접근법이다. 

 

R의 자료구조

동질적 : 객체가 모두 같은 데이터 타입인 성분들로 구성되었을 때

   백터 

   행렬

   배열 

이질적: 객체가 다른 데이터 타입의 성분들로 구성되었을 때 

   리스트

   데이터프레임

 

백터

백터는 일반 벡터와 리스트를 포괄하는 개념으로써 R에서 기본이 되는 데이터 구조이다.

일반 벡터: 논리값(logical), 숫자(double), 정수(integer), 문자(character), 복소수(complex) 등 단일 속성

 

c() 원소들을 벡터로 묶는다. combine

정수 생성 L

논리값 벡터 TRUE, T와 FALSE,또는 F

 

R은 반복되는 원소들로 이뤄진 벡트를 만들 수 있는 REP()함수 와 수열을 생성해주는 SEQ()함수를 제공한다.

seq(1,12,by = 3) by 생략 가능 

rep(3,12) => 3을 12번 중복한다. 

 

most flexible(가장 유연한 ) ->least flexible

character ->numeric->integer -> logical

 

ls()함수 : 현재 작업공간 또는 환경하에 있는 객체들의 이름으로 구성된 벡터를 얻게 된다. 

 

새로운 환경 생성 new.env()

 

백터간 연산 

벡터들의 길이가 서로 달은 경우 , 길이가 짧은 벡터를 첫 번째 원소부터 다시 재사용해 길이를 늘여서 긴 벡터의 길이와 같아지도록 맞춘 후 계산한다.

 

%% 나눗셈의 나머지

정수 나눗셈의 몫을 계싼 %/%

 

리스트

list()

일바 벡터를 리스트로 강제 변환하려면 as.list()

 

속성 attr()

객체가 원래 갖고 있는 속성에 추가적인 속성을 부여할 수 있는 것 

class(), dim(), names()등의 함수에 의해 부여되는 내장속성이 있다.

부여된 원소 이름을 제거하고 싶으면 unname()함수를 이용하거나 이름을 NULL로 대체 하면 된다. 

반응형

' > 빅데이터 통계분석과 R' 카테고리의 다른 글

04  (0) 2021.01.01
03  (0) 2020.12.30
02  (0) 2020.12.22
728x90
반응형

7.5 CNN구현하기

단순한 CNN의 네트워크 구성

 

OrderedDict 순서가 있는 딕셔너리

 

gradient()

순전파

self.loss()

 

역전파

dout = 1

dout = self.last_layer.backward(dout)

 

layers = list(self.layers.values())

layers.reverse()

for layer in layers:

  dout = layer.backward(dout)

 

7.6 cnn 시각화하기

 

 

계층이 깊어질수록 추출되는 정보(정확히는 강하게 반응하는 뉴런)는 더 추상화된다는 것을 알 수 있습니다.

 

AlexNet: 합성곱 계층과 풀링 계층을 여러 겹 쌓고 , 마지막으로 완전연결 계층을 거쳐 결과를 출력하는 구조입니다.

합성공 계층을 여러 개 쌓으면 , 층이 깊어지면서 더 복잡하고 추상화된 정보가 추출 된다는 것입니다.

처음 층은 단순한 에지에 반응하고 , 이어서 텍스처에 반응하고 , 더 복잡한 사물의 일부에 반응하도록 변화합니다.

즉 , 층이 깊어지면서 뉴런이 반응하는 대상이 단순한 모양에서 '고급' 정보로 변화해갑니다. 

다시 말하면 , 사물의 '의미'를 이해하도록 변화하는 것입니다.

 

 

7.7 대표적인 CNN

7.7.1 LeNet

cnn의 원조 LeNet

LeNet 은 손글 씨 숫자를 인식하는 네트워크로 , 1998 년 에 제안되였다.

합성곱 계층과 풀링계층(정확히는 단순히 '원소를 줄이기'만 하는 서버샘플링 계층)을 반복하고 , 마지막으로 완전연결 계층을 거치면서 결과를 출력

 

LeNet과 '현재의 CNN' 차이점:

활성화 함수  LeNet은 시그모이드 함수를 사용하는데 반해 ,현재는 ReLU를 사용

원래의 LeNet은 서브 샘플링을 하여 중간 데이터의 크기를 줄이지만 현재는 최대 풀링이 주류입니다.

 

큰 차이는 아니다. 

'첫 cnn'

 

7.7.1 AlexNet

딥러닝이 주목받도록 이끈 것 

2012년에 발표 

AlexNet 합성곱 계층과 풀링 계층을 거듭하며 마지막으로 완전연결 계층을 거쳐 결과를 출력합니다.

LeNet에서 큰 구조는 바뀌지 않았습니다만 , AlexNet에서는 다음과 같은 변화를 주었습니다.

활성화 함수로 ReLu를 이용

LRN(Local Response Normilization)이라는 국소적 정규화를 실시하는 계층을 이용

드롭아웃을 사용

 

gpu 

딥러닝 발전의 큰 원동력: 빅데이터와 gpu

 

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

08-2. 딥러닝  (0) 2021.01.04
08-1. 딥러닝  (0) 2020.12.28
07-2. 합성곱 신경망(cnn)  (0) 2020.12.09
07-1. 합성곱 신경망(cnn)  (0) 2020.11.19
06. 학습 관련 기술들  (0) 2020.10.20
728x90
반응형

7.4 합성곱/풀링 계층 구현하기

 

7.4.1 4차원 배열

cnn에서 계층 사이를 흐르는 데이터는 4차원입니다.

 

(10,3,28,28) => 높이 28 너비 28 채널 3개인 데이터가 10개 

 

import numpy as np
x = np.random.rand(10,1,28,29)
x.shape

 

 

 

7.4.2 im2col로 데이터 전개하기

합성곱 연산을 곧이곧대로 구현하려면 for문을 겹겹이 쌓아야 하는데 성능이 떨어지는 단점이 있어서 

im2col 사용 

im2col은 입력 데이터를 필터링(가중치 계산)하기 좋게 전개하는 (펼치는 )함수입니다.

3차원 입력 데이터에 im2col을 적용하면 2차원 행렬로 바뀝니다. (정확히는 배치 안의 데이터 수 까지 포함한 4차원 데이터를 2차원으로 변환합니다.)

필털이 하기 좋게 입력 데이터를 전개합니다.

입력 데이터에서 필터를 적용하는 영역(3차원 블록)을 한 줄로 늘어놓습니다.

필터 적용 영역이 겹치게 되면 im2col로 전개한 후의 원소 수가 원래 블록의 원소 수보다 많아집니다.

단점: im2col을 사용해 구현하면 메모리를 더 많이 소비하는 단점이 있습니다.

하지만 컴퓨터는 큰 행렬을 묶어서 계산하는데 탁월합니다.

image to column => Caffe와 Chainer등 의 딥러닝 프레임워크는 im2col이라는 이름의 함수를 만들어 합성곱 계층을 구현할 때 이용하고 있습니다.

 

im2col로 입력 데이터를 전개한 다음에는 합성곱 계층의 필터(가중치)를 1열로 전개하고 , 두 행렬의 곱을 계산하면 됩니다.  Affine계층 

 

7.4.3 합성곱 계층 구현하기

input_data(데이터수 , 채널수 , 높이 , 너비) => 4차원

import sys, os
sys.path.append(os.pardir)
from common.util import im2col
import numpy as np

x1 = np.random.rand(1,3,7,7)
col1 = im2col(x1, 5, 5, stride=1, pad=0)
print(col1.shape) #(9, 75)

x2 = np.random.rand(10,3,7,7)
col2 = im2col(x2,5,5,stride=1,pad=0)
print(col2.shape) #(90, 75)

ModuleNotFoundError: No module named 'common.util'

 

im2col함수를 정의하였다.

def im2col(input_img, FH, FW, stride=1, pad=0):
    N, C, H, W = input_img.shape
    out_h = 1 + int((H + 2 * pad - FH) / stride)
    out_w = 1 + int((W + 2 * pad - FW) / stride)
    img = np.pad(input_img, [(0, 0), (0, 0), (pad, pad), (pad, pad)], 'constant')  # pad 0 
    out_img = np.zeros((N, C, FH, FW, out_h, out_w))
    for y in range(FH):
        y_max = y + out_h * stride
        for x in range(FW):
            x_max = x + out_w * stride
            out_img[:, :, y, x, :, :] = img[:, :, y:y_max:stride,x:x_max:stride] 
    out_img = np.transpose(out_img,(0, 4, 5, 1, 2, 3))  # N,OH,OW,C,FH,FW
    out_img = out_img.reshape(N * out_h * out_w, -1)  # inmage 를 reshape height N*out_h*out_w,width C*FW*FH
    return out_img

아래의 방식도 가능하다.

def im2col(input_img, FH, FW, stride=1, pad=0):
    N, C, H, W = input_img.shape
    out_h = 1 + int((H + 2 * pad - FH) / stride)
    out_w = 1 + int((W + 2 * pad - FW) / stride)
    img = np.pad(input_img, [(0, 0), (0, 0), (pad, pad), (pad, pad)], 'constant') 
    out_img = np.zeros((N, C, FH, FW, out_h, out_w))
    for y in range(out_h):
        y_left=y*stride
        for x in range(out_w):
            x_left=x*stride
            out_img[:, :, :, :, y, x] = img[:, :, y_left:y_left+FH,x_left:x_left+FW] 
    out_img = np.transpose(out_img,
                           (0, 4, 5, 1, 2, 3))  
    out_img = out_img.reshape(N * out_h * out_w, -1)  
    return out_img

out_h = (H + 2*pad - filter_h)//stride + 1 =>  3/2 =>1

np.zeros((N, C, filter_h, filter_w, out_h, out_w)) => 초기화 

np.transpose(out_img,(0, 4, 5, 1, 2, 3))

=> 0은 움직이지 않고, 1->3 , 2->4 , 3-> 5, 4->1 , 5->2

 0 1 2 3 4 5

 0 4 5 1 2 3

reshape 2차원

import sys, os
import numpy as np

x1 = np.random.rand(1,3,7,7)
col1 = im2col(x1, 5, 5, stride=1, pad=0)
print(col1.shape) #(9, 75)

 

합성곱 계층을 Convolution이라는 클래스로 구현

 

python reshape 

reshape 두번째 인수를 -1로 지정했는데 , 이는 reshape이 제공하는 편의 기능

reshape -1을 지정하면 다차원 배열의 원소 수가 변환 후에도 똑같이 유지되도록 적절히 묶어집니다.

x = np.random.rand(10,3,7,7)
print(x.shape)
print(x.reshape(10,-1).shape)

 

forward에서 

python transpose

transpose 다차원 배열의 축 순서를 바뀌주는 함수

im2col로 전개한 덕분에 완전연결 계층의 Affine 계층과 거의 똑같이 구현할 수 있다.

class Conv:
    '''
    초기 필터(가중치), 편향, 스트라이드 , 패딩  
    4차원 형상(FN , C, FH , FW)
    FN - 필터 개수 
    C - 채널 개수
    FH -  필터 높이
    FW - 필터 너비 
    '''
    def __init__(self, W, b, stride = 1, pad = 0):
        self.W = W
        self.b = b
        self.stride = stride
        self.pad = pad
    def forward(self, x):
        FN , C , FH , FW = self.W.shape
        N, C, H, W = x.shape
        out_h = int(1 + H+ 2 * self.pad -FH / self.stride)
        out_w = int(1 + W+ 2 * self.pad -FW / self.stride)
        
        #RESHAPE를 통해 2차원 배열로 전개 
        # 블록을 한 줄로 펼쳐봅니다.
        col = im2col(x, FH, FW, self.stride, self.pad)
        col_W = self.W.reshape(FN, -1).T
        out = np.dot(col, col_W) + self.b
        
        out = out.reshape(N, out_h, out_w, -1).transpose(0,3,1,2)
        
        return out
        
    def backward(self, dout):
        FN, C, FH, FW = self.W.shape
        dout = dout.transpose(0,2,3,1).reshape(-1, FN)

        self.db = np.sum(dout, axis=0)
        self.dW = np.dot(self.col.T, dout)
        self.dW = self.dW.transpose(1, 0).reshape(FN, C, FH, FW)

        dcol = np.dot(dout, self.col_W.T)
        dx = col2im(dcol, self.x.shape, FH, FW, self.stride, self.pad)

        return dx

 

 

 

 

7.4.4 풀링 계층 구현하기

채널 쪽이 독립적이라는 점이 합성곱 계층 때와 다릅니다.

풀링 적용 영역을 채널마다 독립적으로 전개합니다.

class Pooling:
    def __init__(self, pool_h, pool_w, stride = 1, pad = 0):
        self.pool_h = pool_h
        self.pool_w = pool_w
        self.stride = stride
        self.pad = pad
        
    def forward(self, x):
        N , C , H , W = x.shape
        N, C, H, W = x.shape
        out_h = int(1 + (H - self.pool_h) / self.stride)
        out_w = int(1 + (W - self.pool_w) / self.stride)
        
        #RESHAPE를 통해 2차원 배열로 전개 
        # 블록을 한 줄로 펼쳐봅니다.
        col = im2col(x, self.pool_h, self.pool_w, self.stride, self.pad)
        col = self.W.reshape(-1,self.pool_h * self.pool_w)
        
        out = np.max(col, axis = 1) #최댓값
        
        out = out.reshape(N, out_h, out_w, -1).transpose(0,3,1,2)
        
        return out
        
    def backward(self, dout):
        dout = dout.transpose(0, 2, 3, 1)
        
        pool_size = self.pool_h * self.pool_w
        dmax = np.zeros((dout.size, pool_size))
        dmax[np.arange(self.arg_max.size), self.arg_max.flatten()] = dout.flatten()
        dmax = dmax.reshape(dout.shape + (pool_size,)) 
        
        dcol = dmax.reshape(dmax.shape[0] * dmax.shape[1] * dmax.shape[2], -1)
        dx = col2im(dcol, self.x.shape, self.pool_h, self.pool_w, self.stride, self.pad)
        
        return dx

1. 입력 데이터를 전개한다.

2. 행별 최댓값을 구한다.

3. 적절한 모양으로 성형한다.

 

np.max 메소드

np.max 인수로 축(axis)과 같이 쓰면 입력 x의 1번째 차원의 축 마다 최댓값을 구합니다.

반응형

' > 밀바닥부터 시작하는 딥러닝' 카테고리의 다른 글

08-1. 딥러닝  (0) 2020.12.28
07-3 합성곱 신경망(CNN)  (0) 2020.12.18
07-1. 합성곱 신경망(cnn)  (0) 2020.11.19
06. 학습 관련 기술들  (0) 2020.10.20
05. 오차역전파법  (0) 2020.10.16
728x90
반응형

소프트웨어 요구사항은 시간 차원을 포함한다.

 

기능 요구사항

고객  

비즈니스 

 

요구사항 

 

유스케이스는 행위자가 어떤 가치 있는 결과를 도축하기 위한 행위에 대한 별개의 독립적인 활동을 설명한다.

유스케이스는 공통의 목표를 가진 일련의 관련 활동을 포함할 수 있다.

 

 

특정 대사을 위한 요구사항을 작성해야 한다

 

갭 분석(gap analysis)은 기존 시스템의 기능과 신규 시스템에서 원하는 기능을 비교하는 것이다.

유스케이스 , 사용자 스토리 ,기능 등 다양한 방식으로 표현될 수 있다.

 

요구사항에 관한 버전 관리를 정확하게 해야 한다.

 

요구사항은 프로젝트 계획 프로세스의 기초 역할을 한다.

 

 

 

반응형
728x90
반응형

01. 단순선형회귀

단순선형회귀 :X,y  한 변수와 또 다른 변수의 크기 사이에 어떤 관계 

선형 모형 linear model

독립변수 혹은 예측변수

응답변수 혹은 종속변수

 

 

02. 다중선형회귁귀

제곱근 평균제곱오차 : 회귀시 평균제곱오차의 제곱근. 회귀 모형을 평가하는 데 가장 널리 사용되는 측정 지표다.

 

03. 회귀를 이용한 예측

외삽법: 모델링에 사용된 데이터 범위를 벗어난 부분까지 모델을 확장하는 것

 

04. 회귀에서의 요인변수

범주형 변수

 

05. 회귀방정식 해석

종속변수를 예측 

 

06. 가정 검정: 회귀 진단

여러 측정 지표들을 고려하여 , 매 단계마다 모델이 데이터에 얼마나 적합한지를 평가한다.

 

07. 다항회귀와 스플라인 회귀

스플라인 회귀 : 다항 구간들을 부드러운 곡선 형태로 피팅한다.

 

05. 분류

범주의 개수

 

01. 나이브 베이즈

주어진 결과에 대해 예측변수 값을 관찰할 확률을 사용하여 예측변수 값을 관찰할 확률을 사용하여  ,예측변수가 주어졌을 때 , 결과 Y = i를 관찰할 확률을 추정하한다.

 

02. 판별 분석

초창기의 통계분류 방법이다.

공분산: 하나의 변수가 다른 변수와 함께 변화하는 정도(유사한 크기와 방향)를 측정하는 지표

판변함수 : 예측 변수에 적용했을 때 , 클래스 구분을 최대화하는 함수

 

03. 로지스틱 회귀

이진형 변수라는 점만 빼면 다중선형회귀와 유사하다.

 

04. 분류 모델 평가하기

예측 모델링에서 , 수많은 모델을 시도해보고 각각에 홀드아웃 표본(시험 표본 혹은 타당성 검사 표본이라고도 부른다.)

혼동행렬: 분류 결과를 나타내는 가장 대표적인 행렬이다.

 

05. 불균형 데이터 다루기

과소표본추출(다움샘플링)을 해서 모델링할 때 0과 1의 데이터 개수에 균형을 맞출 수 있다.

 

06. 통계적 머신러닝

앙상블 학습

의사결정 트리

 

6.1 k최근접 이웃:

특징들이 가장 유사한 k개의 레코드를 찾는다.

분류 

예측

 

 두 벡터 사이에 가장 많이 사용되는 지표는 유클리드 거리이다.

맨하탄거리

 

6.2 트리 메돌

회귀 및 분석트리 , 의사결정 트리 , 혹은 단순히 그냥 트리라도고 불리며 

 

6.3 배깅과 랜덤 포레스트

랜덤 포레스트 : 의사 결정 트리 모델에 기반을 둔 배깅 추정 모델

배깅 : 데이터를 부트스트래핑해서 여러 모델을 만드는 일반적인 방법

 

6.4 부스팅

앙상블 형태

에이다부스트, 그레이디언트 부스팅, 확률적 그레이디언트 부스팅

 

 

07. 비지도 학습 

레이블이 달린 데이터를 이용해 모델을 학습하는 과정 없이 

 

7.1 주성분분석 : 예측 변수들의 선형 결합

7.2 K평균 클러스터링 : 서로 유사한 레코드들의 집합

7.3 계층적 클러스터링 :k평균보다 유연하고 , 수치형 변수가 아니어도 쉽게 적용이 가능하다.

7.4 모델 기반 클러스터링

7.5 스케일링과 범주형 변수

스케일링: 데이터의 범위를 늘리거나 줄이는 방식으로 여러 변수들이 같은 스케일에 오도록 하는 것

 

반응형
728x90
반응형

가설 확인하거나 기각하기 위해 목표를 가짐

 

추론; 제한된 데이터로 주어진 실험 결과를 더 큰 과정 또는 모집단에 적용하려는 의도를 반영

 

3.1 A/B검증

 

A/B검증 두 처리 방법, 제품 , 혹은 절차 중 어느 쪽이 다른 쪽보다 더 우월하다는 것을 입증하기 위해 실험군을 두 그룹으로 나누어 진행하는 실험

대조군

처리군

 

무작위로 실험

 

 

3.2 가설검정 

가설검정 혹은 유의성 검증 

 

귀무가설  = 

대립가설  < > !=

 

3.3 재표본 추출

랜덤한 변동성을 알아보자는 일반적인 목표를 가지고 , 관찰된 데이터의 값에서 표본을 반복적으로 추출하는 것

순열검정

 

 

3.4 통계적 유이성과 P값

우연히 일어난 것인지 아니면 우연히 일어날 수 없는 극단적인 것인지를 판단하는 방법

 

 

3.5 t검증

유의성 검증 방법 

t분포

 

 

3.6 다중검증

제1종 오류: 어떤 효과가 통계적으로 유의미하다고 잘못된 결론을 내린다.

p vlaue 조정: 동일한 데이터에 대해 다중검정을 수행하는 경우에 필요하다.

과대적합(오버피팅) overfitting

거짓 발견 비율: 다중검정에서 1종 오류가 발생하는 비율  

  원래 주어진 여러 개의 가설검정들 가운데 하나가 유의미한 효과가 있다고 잘못 판단하는 비율을 나타내는데 사용되었다.

 

'중복도' 같은 일반적인 무제를 포함하여 여러 가지 이류로 , 더 많은 연구가 반드시 더 나은 연구를 의미하는 것이 아니다.

 

 

3.7 자유도

자유도: 표본 데이터에서 계산된 통계량에 적용되며 변화가 가능한 값들의 개수를 나타낸다.

df : 자유도 

해당 데이터에서 관측값의 개수

 

3.8 분산분석

여러 그룹간의 통계적으로 유의미한 차이를 검정하는 통계적 절차

 

F통계량 : 그룹 평균 간의 차이가 랜덤 모델에서 예상되는 것보다 벗어나는 정도를 측정하는 표준화된 통계량

 

 

3.9 카이제곱 검정

카이제곱 검정 횟수 관련 데이ㅓ에 주로 사용되며 예상되는 분포에 얼마나 잘 맞는지를 검정한다.

카이제곱 통계량: 기댓값으로부터 어떤 관찰 값까지의 거리를 나타내는 측정치

기댓값: 어떤 가정(보통 귀무가설)으로부터 데이터가 발생할 때, 그에 대해 기대하는 정도

 

3.10 멀티암드 밴딧 알고리즘

실험설계에 대한 전통적인 통계쩍 접근 방식보다 명시적인 최적화와 좀 더 빠른 의사 결정을 가능하게 하며 , 여러 테스트 ,특히 웹 테스트를 위해 이를 사용한다.

 

 

 

3.11 검정력과 표본크기

검정력이란 주어진 표보크기로 주어진 효과 크기를 알아낼 확률

유의수준: 검증시 사용할 통계 우의 수준

 

 

반응형

+ Recent posts