Main Content

convolution1dLayer

1차원 컨벌루션 계층

R2021b 이후

    설명

    1차원 컨벌루션 계층은 1차원 입력값에 슬라이딩 컨벌루션 필터를 적용합니다. 이 계층은 입력값을 따라 필터를 이동하면서 가중치와 입력값의 내적을 계산한 다음 편향 항을 추가하여 입력값을 컨벌루션합니다.

    계층이 컨벌루션하는 차원은 계층 입력값에 따라 다릅니다.

    • 시계열과 벡터 시퀀스 입력값의 경우(채널, 관측값, 시간 스텝에 상응하는 3차원 데이터), 계층은 시간 차원에 대해 컨벌루션합니다.

    • 1차원 영상 입력값의 경우(공간 픽셀, 채널, 관측값에 상응하는 3차원 데이터), 계층은 공간 차원에 대해 컨벌루션합니다.

    • 1차원 영상 시퀀스 입력값의 경우(공간 픽셀, 채널, 관측값, 시간 스텝에 상응하는 4차원 데이터), 계층은 공간 차원에 대해 컨벌루션합니다.

    생성

    설명

    예제

    layer = convolution1dLayer(filterSize,numFilters)는 1차원 컨벌루션 계층을 만들고 FilterSizeNumFilters 속성을 설정합니다.

    layer = convolution1dLayer(filterSize,numFilters,Name=Value)는 하나 이상의 이름-값 인수를 사용하여 선택적으로 Stride, DilationFactor, NumChannels, 파라미터 및 초기화, 학습률 및 정규화, Name 속성도 설정합니다. 입력값 채우기를 지정하려면 Padding 이름-값 인수를 사용하십시오. 예를 들어, convolution1dLayer(11,96,Padding=1)은 크기가 11인 필터 96개를 갖는 1차원 컨벌루션 계층을 만들고, 계층 입력값의 왼쪽과 오른쪽에 크기 1의 채우기를 지정합니다.

    입력 인수

    모두 확장

    이름-값 인수

    선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.

    예: convolution1dLayer(11,96,Padding=1)은 크기가 11인 필터 96개를 갖는 1차원 컨벌루션 계층을 만들고, 계층 입력값의 왼쪽과 오른쪽에 크기 1의 채우기를 지정합니다.

    입력값에 적용할 채우기로, 다음 중 하나로 지정됩니다.

    • "same" — 출력 크기가 ceil(inputSize/stride)가 되도록 채우기를 적용합니다. 여기서 inputSize는 입력값의 길이입니다. Stride1이면 출력값은 입력값과 크기가 같습니다.

    • "causal" — 입력값에 (FilterSize - 1) .* DilationFactor와 같은 크기로 왼쪽 채우기를 적용합니다. Stride1이면 출력값은 입력값과 크기가 같습니다.

    • 음이 아닌 정수 sz — 입력값의 양쪽 끝에 크기가 sz인 채우기를 더합니다.

    • 음이 아닌 정수로 구성된 벡터 [l r] — 입력값의 왼쪽에 크기가 l인 채우기를, 오른쪽에 크기가 r인 채우기를 더합니다.

    예: Padding=[2 1]은 입력값의 왼쪽에 크기가 2인 채우기를, 오른쪽에 크기가 1인 채우기를 더합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

    속성

    모두 확장

    컨벌루션

    읽기 전용 속성입니다.

    필터의 너비로, 양의 정수로 지정됩니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    읽기 전용 속성입니다.

    필터 개수로, 양의 정수로 지정됩니다. 이 수치는 계층에서 입력값의 동일한 영역에 연결되는 뉴런의 개수에 대응됩니다. 이 파라미터는 계층의 출력값에 있는 채널(특징 맵)의 개수를 결정합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    입력값 순회 스텝 크기로, 양의 정수로 지정됩니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    팽창된 컨벌루션(아트루스 컨벌루션이라고도 함) 인자로, 양의 정수로 지정됩니다.

    파라미터의 개수나 연산량을 늘리지 않으면서 계층의 수용 영역(입력값에서 계층이 볼 수 있는 영역)을 늘리려는 경우 팽창된 컨벌루션을 사용할 수 있습니다.

    이 계층은 각 필터 요소 사이에 0을 삽입하여 필터를 확장합니다. 팽창 인자는 입력값 추출을 위한 스텝 크기 또는 이와 동등한 필터 업샘플링 인자를 결정합니다. 팽창 인자에 따라 필터 크기가 (FilterSize – 1) .* DilationFactor + 1로 정해집니다. 예를 들어, 팽창 인자가 2인 1×3 필터는 요소들 사이에 0이 삽입된 1×5 필터와 같습니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    입력값의 양쪽에 적용할 채우기 크기로, 2개의 음이 아닌 정수로 구성된 벡터 [l r]로 지정됩니다. 여기서 l는 왼쪽에 적용할 채우기이고, r은 오른쪽에 적용할 채우기입니다.

    계층을 만들 때 Padding 이름-값 인수를 사용하여 채우기 크기를 지정합니다.

    데이터형: double

    읽기 전용 속성입니다.

    채우기 크기를 결정하는 방법으로, 다음 중 하나로 지정됩니다.

    • 'manual'Padding으로 지정된 정수 또는 벡터를 사용하여 채웁니다.

    • 'same' – 출력 크기가 ceil(inputSize/Stride)가 되도록 채우기를 적용합니다. 여기서 inputSize는 입력값의 길이입니다. Stride1이면 출력값은 입력값과 같습니다.

    • 'causal' — 인과적 채우기를 적용합니다. 입력값의 왼쪽을 채우기 크기 (FilterSize - 1) .* DilationFactor로 채웁니다.

    계층 채우기를 지정하려면 Padding 이름-값 인수를 사용하십시오.

    데이터형: char

    읽기 전용 속성입니다.

    데이터에 채울 값으로, 다음 중 하나로 지정됩니다.

    PaddingValue설명
    스칼라지정된 스칼라 값으로 채웁니다.

    [314][0031400]

    'symmetric-include-edge'가장자리 값을 포함해 미러링된 입력값을 사용하여 채웁니다.

    [313][1331441]

    'symmetric-exclude-edge'가장자리 값을 제외하고 미러링된 입력값을 사용하여 채웁니다.

    [314][4131413]

    'replicate'입력의 반복되는 테두리 요소를 사용하여 채웁니다.

    [313][3331444]

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

    읽기 전용 속성입니다.

    입력 채널의 개수로, 다음 중 하나로 지정됩니다.

    • 'auto' — 훈련 시점에 자동으로 입력 채널의 개수가 결정됩니다.

    • 양의 정수 — 지정된 입력 채널의 개수에 맞게 계층을 구성합니다. NumChannels와 계층 입력 데이터의 채널 개수는 일치해야 합니다. 예를 들어, 입력값이 RGB 영상이면 NumChannels는 3이어야 합니다. 입력값이 16개의 필터가 있는 컨벌루션 계층의 출력값이면 NumChannels는 16이어야 합니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | char | string

    파라미터 및 초기화

    가중치를 초기화하는 함수로, 다음 중 하나로 지정됩니다.

    • 'glorot' — Glorot 이니셜라이저[1](Xavier 이니셜라이저라고도 함)를 사용하여 가중치를 초기화합니다. Glorot 이니셜라이저는 평균이 0이고 분산이 2/(numIn + numOut)인 균등분포에서 독립적으로 샘플링합니다. 여기서 numIn = FilterSize*NumChannels이고 numOut = FilterSize*NumFilters입니다.

    • 'he' – He 이니셜라이저[2]를 사용하여 가중치를 초기화합니다. He 이니셜라이저는 평균이 0이고 분산이 2/numIn인 정규분포에서 샘플링합니다. 여기서 numIn = FilterSize*NumChannels입니다.

    • 'narrow-normal' — 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 가중치를 초기화합니다.

    • 'zeros' — 가중치를 0으로 초기화합니다.

    • 'ones' — 가중치를 1로 초기화합니다.

    • 함수 핸들 — 사용자 지정 함수를 사용하여 가중치를 초기화합니다. 함수 핸들을 지정할 경우, 함수는 weights = func(sz) 형식이 되어야 합니다. 여기서 sz는 가중치의 크기입니다. 예제는 Specify Custom Weight Initialization Function 항목을 참조하십시오.

    계층은 Weights 속성이 비어 있는 경우에만 가중치를 초기화합니다.

    데이터형: char | string | function_handle

    편향을 초기화하는 함수로, 다음 값 중 하나로 지정됩니다.

    • "zeros" — 편향을 0으로 초기화합니다.

    • "ones" — 편향을 1로 초기화합니다.

    • "narrow-normal" — 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 편향을 초기화합니다.

    • 함수 핸들 — 사용자 지정 함수를 사용하여 편향을 초기화합니다. 함수 핸들을 지정할 경우, 함수는 bias = func(sz) 형식을 가져야 합니다. 여기서 sz는 편향의 크기입니다.

    계층은 Bias 속성이 비어 있는 경우에만 편향을 초기화합니다.

    데이터형: char | string | function_handle

    전치 컨벌루션 연산의 계층 가중치로, FilterSize×NumChannels×numFilters 숫자형 배열 또는 []로 지정됩니다.

    계층 가중치는 학습 가능한 파라미터입니다. 계층의 Weights 속성을 사용하여 가중치의 초기값을 직접 지정할 수 있습니다. 신경망을 훈련시킬 때 계층의 Weights 속성이 비어 있지 않으면 trainnet 함수 및 trainNetwork 함수는 Weights 속성을 초기값으로 사용합니다. Weights 속성이 비어 있으면 계층의 WeightsInitializer 속성으로 지정된 이니셜라이저가 사용됩니다.

    데이터형: single | double

    전치 컨벌루션 연산의 계층 편향으로, 1×NumFilters 숫자형 배열 또는 []로 지정됩니다.

    계층 편향은 학습 가능한 파라미터입니다. 신경망을 훈련시킬 때 Bias가 비어 있지 않으면 trainnettrainNetwork 함수는 Bias 속성을 초기값으로 사용합니다. Bias가 비어 있으면 BiasInitializer로 지정된 이니셜라이저가 사용됩니다.

    데이터형: single | double

    학습률 및 정규화

    가중치에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 학습률을 곱하여 이 계층의 가중치에 대한 학습률이 결정됩니다. 예를 들어, WeightLearnRateFactor2인 경우, 이 계층의 가중치에 대한 학습률은 현재 전역 학습률의 2배입니다. trainingOptions 함수를 사용하여 지정한 설정을 기반으로 전역 학습률이 결정됩니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    편향에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 학습률을 곱하여 이 계층의 편향에 대한 학습률이 결정됩니다. 예를 들어, BiasLearnRateFactor2인 경우, 이 계층의 편향에 대한 학습률은 현재 전역 학습률의 2배입니다. trainingOptions 함수를 사용하여 지정한 설정을 기반으로 전역 학습률이 결정됩니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    가중치에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 가중치에 대한 L2 정규화가 결정됩니다. 예를 들어, WeightL2Factor2인 경우, 이 계층의 가중치에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions 함수를 사용하여 지정할 수 있습니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    편향에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

    이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 편향에 대한 L2 정규화가 결정됩니다. 예를 들어, BiasL2Factor2인 경우, 이 계층의 편향에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. trainingOptions 함수를 사용하여 지정한 설정을 기반으로 전역 L2 정규화 인자가 결정됩니다.

    데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

    계층

    계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. Layer 배열 입력값에 대해 trainnetdlnetwork 함수는 이름이 ""인 계층에 자동으로 이름을 할당합니다.

    Convolution1DLayer 객체는 이 속성을 문자형 벡터로 저장합니다.

    데이터형: char | string

    읽기 전용 속성입니다.

    계층에 대한 입력값의 개수로, 1로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

    데이터형: double

    읽기 전용 속성입니다.

    입력값 이름으로, {'in'}으로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

    데이터형: cell

    읽기 전용 속성입니다.

    계층의 출력값 개수로, 1로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

    데이터형: double

    읽기 전용 속성입니다.

    출력값 이름으로, {'out'}으로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

    데이터형: cell

    예제

    모두 축소

    dlnetwork 객체를 만듭니다.

    net = dlnetwork;

    너비가 11인 필터 96개를 갖는 1차원 컨벌루션 계층을 만듭니다.

    layer = convolution1dLayer(11,96);

    해당 1차원 컨벌루션 계층을 분류 가지의 Layers 배열에 포함시킨 후 신경망에 추가합니다.

    layers = [
        sequenceInputLayer(3,MinLength=20)
        layer
        reluLayer
        globalMaxPooling1dLayer
        fullyConnectedLayer(10)
        softmaxLayer
        classificationLayer];
    
    net = addLayers(net,layers);

    알고리즘

    모두 확장

    참고 문헌

    [1] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

    [2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123

    확장 기능

    버전 내역

    R2021b에 개발됨