sequenceInputLayer
시퀀스 입력 계층
설명
시퀀스 입력 계층은 신경망에 시퀀스 데이터를 입력하고 데이터 정규화를 적용합니다.
생성
설명
는 하나 이상의 이름-값 인수를 사용하여 선택적 속성을 설정합니다.layer = sequenceInputLayer(inputSize,Name=Value)
입력 인수
입력값의 크기로, 양의 정수 또는 양의 정수로 구성된 벡터로 지정됩니다.
벡터 시퀀스 입력값에 대해,
inputSize는 특징 개수에 대응되는 스칼라입니다.1차원 영상 시퀀스 입력값에 대해,
inputSize는 요소를 2개 가진 벡터[h c]입니다. 여기서h는 영상 높이이고,c는 영상의 채널 개수입니다.2차원 영상 시퀀스 입력값에 대해,
inputSize는 요소를 3개 가진 벡터[h w c]입니다. 여기서h는 영상 높이이고,w는 영상 너비이고,c는 영상의 채널 개수입니다.3차원 영상 시퀀스 입력값에 대해,
inputSize는 요소를 4개 가진 벡터[h w d c]입니다. 여기서h는 영상 높이이고,w는 영상 너비이고,d는 영상 깊이이고,c는 영상의 채널 개수입니다.
입력 데이터의 최소 시퀀스 길이를 지정하려면 MinLength 이름-값 인수를 사용하십시오.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
이름-값 인수
선택적 인수 쌍을 Name1=Value1,...,NameN=ValueN으로 지정합니다. 여기서 Name은 인수 이름이고 Value는 대응값입니다. 이름-값 인수는 다른 인수 뒤에 와야 하지만, 인수 쌍의 순서는 상관없습니다.
R2021a 이전 릴리스에서는 쉼표를 사용하여 각 이름과 값을 구분하고 Name을 따옴표로 묶으십시오.
예: sequenceInputLayer(12,Name="seq1")은 입력 크기가 12이고 이름이 'seq1'인 시퀀스 입력 계층을 만듭니다.
입력 데이터의 최소 시퀀스 길이로, 양의 정수로 지정됩니다. 신경망으로 훈련시키거나 예측할 때, 입력 데이터가 MinLength 시간 스텝보다 적으면 오류가 발생합니다.
시간 차원에서 데이터를 다운샘플링하는 신경망을 만들 때, 신경망에서 훈련 데이터와 예측을 위한 모든 데이터를 지원해야 합니다. 일부 딥러닝 계층은 최소 시퀀스 길이를 갖는 입력이 필요합니다. 예를 들어, 1차원 컨벌루션 계층에는 적어도 필터 크기만큼의 시간 스텝을 갖는 입력값이 필요합니다.
시퀀스 데이터의 시계열이 신경망을 통해 전파됨에 따라 시퀀스 길이가 달라질 수 있습니다. 예를 들어, 1차원 컨벌루션과 같은 다운샘플링 연산은 입력값보다 적은 시간 스텝을 갖는 데이터를 출력할 수 있습니다. 이는 데이터가 계층에 필요한 최소 시퀀스 길이보다 더 짧은 길이를 가지므로 다운샘플링 연산으로 인해 나중에 신경망 계층에 오류가 발생할 수 있음을 의미합니다.
신경망을 훈련시키거나 조합할 때, 길이가 1인 시퀀스가 신경망을 통해 전파될 수 있는지 자동으로 검사됩니다. 일부 신경망은 길이가 1인 시퀀스를 지원하지 않을 수 있지만, 더 긴 길이의 시퀀스는 성공적으로 전파할 수 있습니다. 신경망이 훈련 데이터 및 예상되는 예측 데이터를 전파할 수 있는지 검사하려면 MinLength 속성에 데이터의 최소 길이 및 예측 데이터의 예상되는 최소 길이보다 작거나 같은 값을 설정하십시오.
팁
컨벌루션과 계층 풀링이 데이터의 크기를 변경하지 않도록 하려면 계층의 Padding 옵션을 "same" 또는 "causal"로 설정하십시오.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
데이터가 입력 계층을 통과하여 순방향으로 전파될 때마다 적용할 데이터 정규화로, 다음 중 하나로 지정됩니다.
"zerocenter"—Mean으로 지정된 평균값을 뺍니다."zscore"—Mean으로 지정된 평균값을 빼고StandardDeviation으로 나눕니다."rescale-symmetric"—Min으로 지정된 최솟값과Max로 지정된 최댓값을 사용하여 입력값이 [-1, 1] 범위 내에 오도록 다시 스케일링합니다."rescale-zero-one"—Min으로 지정된 최솟값과Max로 지정된 최댓값을 사용하여 입력값이 [0, 1] 범위 내에 오도록 다시 스케일링합니다."none"— 입력 데이터를 정규화하지 않습니다.함수 핸들 — 지정된 함수를 사용하여 데이터를 정규화합니다. 함수는
Y = f(X)형식이 되어야 합니다. 여기서X는 입력 데이터이고 출력값Y는 정규화된 데이터입니다.
입력 데이터가 복소수 값이고 SplitComplexInputs 옵션이 0(false)인 경우 Normalization 옵션은 "zerocenter", "zscore", "none" 또는 함수 핸들이어야 합니다. (R2024a 이후)
R2024a 이전: 복소수 값 데이터를 신경망에 입력하려면 SplitComplexInputs 옵션이 1(true)이어야 합니다.
팁
기본적으로 trainnet 함수를 사용할 때 자동으로 정규화 통계량이 계산됩니다. 훈련 중에 시간을 절약하려면 정규화에 필요한 통계량을 지정하고 trainingOptions의 ResetInputNormalization 옵션을 0(false)으로 설정하십시오.
채우기 값을 포함하여 모든 입력 요소에 정규화가 적용됩니다.
SequenceInputLayer 객체는 Normalization 속성을 문자형 벡터 또는 함수 핸들로 저장합니다.
데이터형: char | string | function_handle
정규화 차원으로, 다음 중 하나로 지정됩니다.
"auto"–ResetInputNormalization훈련 옵션이0(false)이고 정규화 통계량 중 하나(Mean,StandardDeviation,Min또는Max)를 지정한 경우, 통계량과 일치하는 차원에 대해 정규화합니다. 그렇지 않은 경우, 훈련 시점에 통계량을 다시 계산하고 채널별 정규화를 적용합니다."channel"– 채널별 정규화."element"– 요소별 정규화."all"– 스칼라 통계량을 사용하여 모든 값을 정규화합니다.
SequenceInputLayer 객체는 NormalizationDimension 속성을 문자형 벡터로 저장합니다.
중심 0 및 z-점수 정규화에서의 평균값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Mean 속성을 지정하려면 Normalization 속성이 "zerocenter" 또는 "zscore"이어야 합니다. Mean이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 평균을 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을0으로 설정합니다.
Mean은 복소수 값일 수 있습니다. (R2024a 이후) Mean이 복소수 값이면 SplitComplexInputs 옵션은 0(false)이어야 합니다.
R2024a 이전: SplitComplexInputs 옵션을 1(true)로 설정하여 평균을 실수부와 허수부로 분할하고 입력 데이터를 실수부와 허수부로 분할하도록 설정할 수 있습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부: 예
z-점수 정규화에 사용되는 표준편차로, 숫자형 배열, 숫자형 스칼라 또는 빈 값으로 지정됩니다.
벡터 시퀀스 입력값에 대해,
StandardDeviation은 채널당 표준편차로 구성된InputSize×1 벡터, 숫자형 스칼라 또는[]이어야 합니다.2차원 영상 시퀀스 입력값에 대해,
StandardDeviation은InputSize와 크기가 같은 숫자형 배열, 채널당 표준편차로 구성된 1×1×InputSize(3)배열, 숫자형 스칼라 또는[]이어야 합니다.3차원 영상 시퀀스 입력값에 대해,
StandardDeviation은InputSize와 크기가 같은 숫자형 배열, 채널당 표준편차로 구성된 1×1×1×InputSize(4)배열 또는 숫자형 스칼라여야 합니다.
StandardDeviation 속성을 지정하려면 Normalization이 "zscore"여야 합니다. StandardDeviation이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 표준편차를 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을1로 설정합니다.
StandardDeviation은 복소수 값일 수 있습니다. (R2024a 이후) StandardDeviation이 복소수 값이면 SplitComplexInputs 옵션은 0(false)이어야 합니다.
R2024a 이전: SplitComplexInputs 옵션을 1(true)로 설정하여 표준편차를 실수부와 허수부로 분할하고 입력 데이터를 실수부와 허수부로 분할하도록 설정할 수 있습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부: 예
다시 스케일링하기 위한 최솟값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Min 속성을 지정하려면 Normalization이 "rescale-symmetric" 또는 "rescale-zero-one"이어야 합니다. Min이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 최솟값을 계산하고 결과 값을 사용합니다.Initialize옵션이1(true)인 경우initialize함수와dlnetwork함수는Normalization이"rescale-symmetric"및"rescale-zero-one"일 때 속성을 각각-1및0으로 설정합니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
다시 스케일링하기 위한 최댓값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Max 속성을 지정하려면 Normalization이 "rescale-symmetric" 또는 "rescale-zero-one"이어야 합니다. Max이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 최댓값을 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을1로 설정합니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
입력 데이터를 실수부와 허수부로 분할하는 플래그로, 다음 값 중 하나로 지정됩니다.
0(false) – 입력 데이터를 분할하지 않습니다.1(true) – 데이터를 실수부와 허수부로 분할합니다.
SplitComplexInputs가 1인 경우 계층은 입력 데이터보다 두 배 많은 수의 채널을 출력합니다. 예를 들어, 입력 데이터가 numChannels개의 채널을 갖는 복소수 값이면 계층은 2*numChannels개의 채널을 갖는 데이터를 출력합니다. 이때 채널 1부터 numChannels는 입력 데이터의 실수부를 포함하고 numChannels+1부터 2*numChannels는 입력 데이터의 허수부를 포함합니다. 입력 데이터가 실수인 경우 채널 numChannels+1부터 2*numChannels이 모두 0입니다.
입력 데이터가 복소수 값이고 SplitComplexInputs가 0(false)인 경우, 계층은 복소수 값을 갖는 데이터를 다음 계층에 전달합니다. (R2024a 이후)
R2024a 이전: 복소수 값 데이터를 신경망에 입력하려면 입력 계층의 SplitComplexInputs 옵션이 1(true)이어야 합니다.
복소수 값 데이터를 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network with Complex-Valued Data 항목을 참조하십시오.
속성
시퀀스 입력
입력값의 크기로, 양의 정수 또는 양의 정수로 구성된 벡터로 지정됩니다.
벡터 시퀀스 입력값에 대해,
InputSize는 특징 개수에 대응되는 스칼라입니다.1차원 영상 시퀀스 입력값에 대해,
InputSize는 요소를 2개 가진 벡터[h c]입니다. 여기서h는 영상 높이이고,c는 영상의 채널 개수입니다.2차원 영상 시퀀스 입력값에 대해,
InputSize는 요소를 3개 가진 벡터[h w c]입니다. 여기서h는 영상 높이이고,w는 영상 너비이고,c는 영상의 채널 개수입니다.3차원 영상 시퀀스 입력값에 대해,
InputSize는 요소를 4개 가진 벡터[h w d c]입니다. 여기서h는 영상 높이이고,w는 영상 너비이고,d는 영상 깊이이고,c는 영상의 채널 개수입니다.
입력 데이터의 최소 시퀀스 길이를 지정하려면 MinLength 속성을 사용하십시오.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
입력 데이터의 최소 시퀀스 길이로, 양의 정수로 지정됩니다. 신경망으로 훈련시키거나 예측할 때, 입력 데이터가 MinLength 시간 스텝보다 적으면 오류가 발생합니다.
시간 차원에서 데이터를 다운샘플링하는 신경망을 만들 때, 신경망에서 훈련 데이터와 예측을 위한 모든 데이터를 지원해야 합니다. 일부 딥러닝 계층은 최소 시퀀스 길이를 갖는 입력이 필요합니다. 예를 들어, 1차원 컨벌루션 계층에는 적어도 필터 크기만큼의 시간 스텝을 갖는 입력값이 필요합니다.
시퀀스 데이터의 시계열이 신경망을 통해 전파됨에 따라 시퀀스 길이가 달라질 수 있습니다. 예를 들어, 1차원 컨벌루션과 같은 다운샘플링 연산은 입력값보다 적은 시간 스텝을 갖는 데이터를 출력할 수 있습니다. 이는 데이터가 계층에 필요한 최소 시퀀스 길이보다 더 짧은 길이를 가지므로 다운샘플링 연산으로 인해 나중에 신경망 계층에 오류가 발생할 수 있음을 의미합니다.
신경망을 훈련시키거나 조합할 때, 길이가 1인 시퀀스가 신경망을 통해 전파될 수 있는지 자동으로 검사됩니다. 일부 신경망은 길이가 1인 시퀀스를 지원하지 않을 수 있지만, 더 긴 길이의 시퀀스는 성공적으로 전파할 수 있습니다. 신경망이 훈련 데이터 및 예상되는 예측 데이터를 전파할 수 있는지 검사하려면 MinLength 속성에 데이터의 최소 길이 및 예측 데이터의 예상되는 최소 길이보다 작거나 같은 값을 설정하십시오.
팁
컨벌루션과 계층 풀링이 데이터의 크기를 변경하지 않도록 하려면 계층의 Padding 옵션을 "same" 또는 "causal"로 설정하십시오.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
데이터가 입력 계층을 통과하여 순방향으로 전파될 때마다 적용할 데이터 정규화로, 다음 중 하나로 지정됩니다.
"zerocenter"—Mean으로 지정된 평균값을 뺍니다."zscore"—Mean으로 지정된 평균값을 빼고StandardDeviation으로 나눕니다."rescale-symmetric"—Min으로 지정된 최솟값과Max로 지정된 최댓값을 사용하여 입력값이 [-1, 1] 범위 내에 오도록 다시 스케일링합니다."rescale-zero-one"—Min으로 지정된 최솟값과Max로 지정된 최댓값을 사용하여 입력값이 [0, 1] 범위 내에 오도록 다시 스케일링합니다."none"— 입력 데이터를 정규화하지 않습니다.함수 핸들 — 지정된 함수를 사용하여 데이터를 정규화합니다. 함수는
Y = f(X)형식이 되어야 합니다. 여기서X는 입력 데이터이고 출력값Y는 정규화된 데이터입니다.
입력 데이터가 복소수 값이고 SplitComplexInputs 옵션이 0(false)인 경우 Normalization 옵션은 "zerocenter", "zscore", "none" 또는 함수 핸들이어야 합니다. (R2024a 이후)
R2024a 이전: 복소수 값 데이터를 신경망에 입력하려면 SplitComplexInputs 옵션이 1(true)이어야 합니다.
팁
기본적으로 trainnet 함수를 사용할 때 자동으로 정규화 통계량이 계산됩니다. 훈련 중에 시간을 절약하려면 정규화에 필요한 통계량을 지정하고 trainingOptions의 ResetInputNormalization 옵션을 0(false)으로 설정하십시오.
채우기 값을 포함하여 모든 입력 요소에 정규화가 적용됩니다.
SequenceInputLayer 객체는 이 속성을 문자형 벡터 또는 함수 핸들로 저장합니다.
데이터형: char | string | function_handle
정규화 차원으로, 다음 중 하나로 지정됩니다.
"auto"–ResetInputNormalization훈련 옵션이0(false)이고 정규화 통계량 중 하나(Mean,StandardDeviation,Min또는Max)를 지정한 경우, 통계량과 일치하는 차원에 대해 정규화합니다. 그렇지 않은 경우, 훈련 시점에 통계량을 다시 계산하고 채널별 정규화를 적용합니다."channel"– 채널별 정규화."element"– 요소별 정규화."all"– 스칼라 통계량을 사용하여 모든 값을 정규화합니다.
SequenceInputLayer 객체는 이 속성을 문자형 벡터로 저장합니다.
중심 0 및 z-점수 정규화에서의 평균값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Mean 속성을 지정하려면 Normalization 속성이 "zerocenter" 또는 "zscore"이어야 합니다. Mean이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 평균을 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을0으로 설정합니다.
Mean은 복소수 값일 수 있습니다. (R2024a 이후) Mean이 복소수 값이면 SplitComplexInputs 옵션은 0(false)이어야 합니다.
R2024a 이전: SplitComplexInputs 옵션을 1(true)로 설정하여 평균을 실수부와 허수부로 분할하고 입력 데이터를 실수부와 허수부로 분할할 수 있습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부: 예
z-점수 정규화에 사용되는 표준편차로, 숫자형 배열, 숫자형 스칼라 또는 빈 값으로 지정됩니다.
벡터 시퀀스 입력값에 대해,
StandardDeviation은 채널당 표준편차로 구성된InputSize×1 벡터, 숫자형 스칼라 또는[]이어야 합니다.2차원 영상 시퀀스 입력값에 대해,
StandardDeviation은InputSize와 크기가 같은 숫자형 배열, 채널당 표준편차로 구성된 1×1×InputSize(3)배열, 숫자형 스칼라 또는[]이어야 합니다.3차원 영상 시퀀스 입력값에 대해,
StandardDeviation은InputSize와 크기가 같은 숫자형 배열, 채널당 표준편차로 구성된 1×1×1×InputSize(4)배열 또는 숫자형 스칼라여야 합니다.
StandardDeviation 속성을 지정하려면 Normalization이 "zscore"여야 합니다. StandardDeviation이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 표준편차를 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을1로 설정합니다.
StandardDeviation은 복소수 값일 수 있습니다. (R2024a 이후) StandardDeviation이 복소수 값이면 SplitComplexInputs 옵션은 0(false)이어야 합니다.
R2024a 이전: SplitComplexInputs 옵션을 1(true)로 설정하여 표준편차를 실수부와 허수부로 분할하고 입력 데이터를 실수부와 허수부로 분할할 수 있습니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
복소수 지원 여부: 예
다시 스케일링하기 위한 최솟값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Min 속성을 지정하려면 Normalization이 "rescale-symmetric" 또는 "rescale-zero-one"이어야 합니다. Min이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 최솟값을 계산하고 결과 값을 사용합니다.Initialize옵션이1(true)인 경우initialize함수와dlnetwork함수는Normalization이"rescale-symmetric"및"rescale-zero-one"일 때 속성을 각각-1및0으로 설정합니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
다시 스케일링하기 위한 최댓값으로, 숫자형 배열 또는 빈 값으로 지정됩니다.
Max 속성을 지정하려면 Normalization이 "rescale-symmetric" 또는 "rescale-zero-one"이어야 합니다. Max이 []이면 훈련 시점이나 초기화 시점에 속성이 자동으로 설정됩니다.
trainnet함수는 채우기 값을 무시하고 훈련 데이터를 사용하여 최댓값을 계산하고 결과 값을 사용합니다.initialize함수와dlnetwork함수는Initialize옵션이1(true)인 경우 속성을1로 설정합니다.
데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64
읽기 전용 속성입니다.
입력 데이터를 실수부와 허수부로 분할하는 플래그로, 다음 값 중 하나로 지정됩니다.
0(false) – 입력 데이터를 분할하지 않습니다.1(true) – 데이터를 실수부와 허수부로 분할합니다.
SplitComplexInputs가 1인 경우 계층은 입력 데이터보다 두 배 많은 수의 채널을 출력합니다. 예를 들어, 입력 데이터가 numChannels개의 채널을 갖는 복소수 값이면 계층은 2*numChannels개의 채널을 갖는 데이터를 출력합니다. 이때 채널 1부터 numChannels는 입력 데이터의 실수부를 포함하고 numChannels+1부터 2*numChannels는 입력 데이터의 허수부를 포함합니다. 입력 데이터가 실수인 경우 채널 numChannels+1부터 2*numChannels이 모두 0입니다.
입력 데이터가 복소수 값이고 SplitComplexInputs가 0(false)인 경우, 계층은 복소수 값을 갖는 데이터를 다음 계층에 전달합니다. (R2024a 이후)
R2024a 이전: 복소수 값 데이터를 신경망에 입력하려면 입력 계층의 SplitComplexInputs 옵션이 1(true)이어야 합니다.
복소수 값 데이터를 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network with Complex-Valued Data 항목을 참조하십시오.
계층
읽기 전용 속성입니다.
계층의 입력값 개수. 이 계층에는 입력값이 없습니다.
데이터형: double
읽기 전용 속성입니다.
계층의 입력값 이름. 이 계층에는 입력값이 없습니다.
데이터형: cell
읽기 전용 속성입니다.
계층의 출력값 개수로, 1로 저장됩니다. 이 계층은 단일 출력값만 가집니다.
데이터형: double
읽기 전용 속성입니다.
출력값 이름으로, {'out'}으로 저장됩니다. 이 계층은 단일 출력값만 가집니다.
데이터형: cell
예제
입력 크기가 12인 시퀀스 입력 계층을 만듭니다.
layer = sequenceInputLayer(12)
layer =
SequenceInputLayer with properties:
Name: ''
InputSize: 12
MinLength: 1
SplitComplexInputs: 0
Hyperparameters
Normalization: 'none'
NormalizationDimension: 'auto'
Layer 배열에 시퀀스 입력 계층을 포함시킵니다.
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers =
4×1 Layer array with layers:
1 '' Sequence Input Sequence input with 12 dimensions
2 '' LSTM LSTM with 100 hidden units
3 '' Fully Connected 9 fully connected layer
4 '' Softmax softmax
이름이 'seq1'이고 224x224 RGB 영상으로 구성된 시퀀스를 위한 시퀀스 입력 계층을 만듭니다.
layer = sequenceInputLayer([224 224 3], 'Name', 'seq1')
layer =
SequenceInputLayer with properties:
Name: 'seq1'
InputSize: [224 224 3]
MinLength: 1
SplitComplexInputs: 0
Hyperparameters
Normalization: 'none'
NormalizationDimension: 'auto'
sequence-to-label 분류를 위해 딥러닝 LSTM 신경망을 훈련시킵니다.
WaveformData.mat에서 예제 데이터를 불러옵니다. 이 데이터는 시퀀스로 구성된 numObservations×1 셀형 배열이며, 여기서 numObservations는 시퀀스 개수입니다. 각 시퀀스는 numTimeSteps×numChannels 숫자형 배열이며, 여기서 numTimeSteps는 시퀀스의 시간 스텝 개수이고 numChannels는 시퀀스의 채널 개수입니다.
load WaveformData시퀀스 중 일부를 플롯으로 시각화합니다.
numChannels = size(data{1},2);
idx = [3 4 5 12];
figure
tiledlayout(2,2)
for i = 1:4
nexttile
stackedplot(data{idx(i)},DisplayLabels="Channel "+string(1:numChannels))
xlabel("Time Step")
title("Class: " + string(labels(idx(i))))
end
클래스 이름을 확인합니다.
classNames = categories(labels)
classNames = 4×1 cell
{'Sawtooth'}
{'Sine' }
{'Square' }
{'Triangle'}
테스트를 위해 데이터를 남겨 둡니다. 데이터의 90%가 포함된 훈련 세트와 데이터의 나머지 10%가 포함된 테스트 세트로 데이터를 분할합니다. 데이터를 분할하려면 이 예제에 지원 파일로 첨부된 trainingPartitions 함수를 사용합니다. 이 파일에 액세스하려면 이 예제를 라이브 스크립트로 여십시오.
numObservations = numel(data); [idxTrain,idxTest] = trainingPartitions(numObservations, [0.9 0.1]); XTrain = data(idxTrain); TTrain = labels(idxTrain); XTest = data(idxTest); TTest = labels(idxTest);
LSTM 신경망 아키텍처를 정의합니다. 입력 크기를 입력 데이터의 채널 개수로 지정합니다. 은닉 유닛 120개를 포함하고 시퀀스의 마지막 요소를 출력하는 LSTM 계층을 지정합니다. 마지막으로, 출력 크기가 클래스 개수와 일치하는 완전 연결 계층을 포함하고 그 뒤에 소프트맥스 계층을 포함합니다.
numHiddenUnits = 120; numClasses = numel(categories(TTrain)); layers = [ ... sequenceInputLayer(numChannels) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer]
layers =
4×1 Layer array with layers:
1 '' Sequence Input Sequence input with 3 dimensions
2 '' LSTM LSTM with 120 hidden units
3 '' Fully Connected 4 fully connected layer
4 '' Softmax softmax
훈련 옵션을 지정합니다. Adam 솔버에 학습률을 0.01로, 기울기 임계값을 1로 설정하여 훈련시킵니다. 최대 Epoch 횟수를 200으로 설정하고 모든 Epoch를 섞습니다. 기본적으로 사용 가능한 GPU가 있으면 GPU에서 훈련시킵니다. GPU를 사용하려면 Parallel Computing Toolbox와 지원되는 GPU 장치가 필요합니다. 지원되는 장치에 대한 자세한 내용은 GPU 연산 요구 사항 (Parallel Computing Toolbox) 항목을 참조하십시오.
options = trainingOptions("adam", ... MaxEpochs=200, ... InitialLearnRate=0.01,... Shuffle="every-epoch", ... GradientThreshold=1, ... Verbose=false, ... Metrics="accuracy", ... Plots="training-progress");
trainnet 함수를 사용하여 LSTM 신경망을 훈련시킵니다. 분류에는 교차 엔트로피 손실을 사용합니다.
net = trainnet(XTrain,TTrain,layers,"crossentropy",options);
테스트 데이터를 분류합니다. 훈련에 사용된 것과 동일하게 미니 배치 크기를 지정합니다.
scores = minibatchpredict(net,XTest); YTest = scores2label(scores,classNames);
예측의 분류 정확도를 계산합니다.
acc = mean(YTest == TTest)
acc = 0.8700
분류 결과를 혼동행렬 차트로 표시합니다.
figure confusionchart(TTest,YTest)

sequence-to-label 분류를 위한 LSTM 신경망을 만들려면 시퀀스 입력 계층, LSTM 계층, 완전 연결 계층, 소프트맥스 계층을 포함하는 계층 배열을 만듭니다.
시퀀스 입력 계층의 크기를 입력 데이터의 특징 개수로 설정합니다. 완전 연결 계층의 크기를 클래스 개수로 설정합니다. 시퀀스 길이는 지정할 필요가 없습니다.
LSTM 계층의 경우, 은닉 유닛의 개수와 출력 모드 "last"를 지정합니다.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numClasses) softmaxLayer];
sequence-to-label 분류를 위한 LSTM 신경망을 훈련시키고 새 데이터를 분류하는 방법을 보여주는 예제는 딥러닝을 사용한 시퀀스 분류 항목을 참조하십시오.
sequence-to-sequence 분류를 위한 LSTM 신경망을 만들려면 sequence-to-label 분류와 동일한 아키텍처를 사용하되 LSTM 계층의 출력 모드를 "sequence"로 설정합니다.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="sequence") fullyConnectedLayer(numClasses) softmaxLayer];
sequence-to-one 회귀를 위한 LSTM 신경망을 만들려면 시퀀스 입력 계층, LSTM 계층, 완전 연결 계층을 포함하는 계층 배열을 만듭니다.
시퀀스 입력 계층의 크기를 입력 데이터의 특징 개수로 설정합니다. 완전 연결 계층의 크기를 응답 변수의 개수로 설정합니다. 시퀀스 길이는 지정할 필요가 없습니다.
LSTM 계층의 경우, 은닉 유닛의 개수와 출력 모드 "last"를 지정합니다.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="last") fullyConnectedLayer(numResponses)];
sequence-to-sequence 회귀를 위한 LSTM 신경망을 만들려면 sequence-to-one 회귀와 동일한 아키텍처를 사용하되 LSTM 계층의 출력 모드를 "sequence"로 설정합니다.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,OutputMode="sequence") fullyConnectedLayer(numResponses)];
sequence-to-sequence 회귀를 위한 LSTM 신경망을 훈련시키고 새 데이터에 대해 예측하는 방법을 보여주는 예제는 딥러닝을 사용한 sequence-to-sequence 회귀 항목을 참조하십시오.
LSTM 계층 앞에 출력 모드가 "sequence"인 LSTM 계층을 추가로 삽입하여 LSTM 신경망의 심도를 높일 수 있습니다. 과적합을 방지하기 위해 LSTM 계층 뒤에 드롭아웃 계층을 삽입할 수 있습니다.
sequence-to-label 분류 신경망의 경우, 마지막 LSTM 계층의 출력 모드가 "last"가 되어야 합니다.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,OutputMode="sequence") dropoutLayer(0.2) lstmLayer(numHiddenUnits2,OutputMode="last") dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer];
sequence-to-sequence 분류 신경망의 경우, 마지막 LSTM 계층의 출력 모드가 "sequence"가 되어야 합니다.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,OutputMode="sequence") dropoutLayer(0.2) lstmLayer(numHiddenUnits2,OutputMode="sequence") dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer];
알고리즘
계층 배열 또는 계층 그래프의 계층은 뒤에 오는 계층에 데이터를 전달할 때 형식이 지정된 dlarray 객체로 전달합니다. dlarray 객체의 형식은 문자들로 구성된 문자열로, 각 문자는 데이터의 대응되는 차원을 설명합니다. 형식은 다음 문자 중 하나 이상으로 구성됩니다.
"S"— 공간"C"— 채널"B"— 배치"T"— 시간"U"— 지정되지 않음
예를 들어 벡터 시퀀스 데이터를 3차원 배열로 표현할 수 있습니다. 여기서 첫 번째 차원은 채널 차원에, 두 번째 차원은 배치 차원에, 세 번째 차원은 시간 차원에 대응됩니다. 이 표현은 "CBT"(채널, 배치, 시간) 형식입니다.
신경망의 입력 계층은 신경망에 필요한 데이터의 레이아웃을 지정합니다. 다른 레이아웃의 데이터를 가지고 있다면 InputDataFormats 훈련 옵션을 사용하여 레이아웃을 지정하십시오.
다음 표에서는 시퀀스 입력 계층이 있는 신경망의 예상 데이터 레이아웃을 설명합니다.
| 데이터 | 레이아웃 |
|---|---|
| 벡터 시퀀스 |
|
| 1차원 영상 시퀀스 | h×c×t 배열. 여기서 h, c는 각각 영상의 높이, 채널 개수이고 t는 시퀀스 길이입니다. |
| 2차원 영상 시퀀스 | h×w×c×t 배열. 여기서 h, w, c는 영상의 높이, 너비, 채널 개수이고 t는 시퀀스 길이입니다. |
| 3차원 영상 시퀀스 | h×w×d×c×t 배열. 여기서 h, w, d, c는 각각 3차원 영상의 높이, 너비, 깊이, 채널 개수이고 t는 시퀀스 길이입니다. |
신경망에 대한 입력이 복소수 값인 경우, SplitComplexIputs가 0(false)이면 계층은 뒤에 오는 계층에 복소수 값 데이터를 전달합니다. (R2024a 이후)
R2024a 이전: 복소수 값 데이터를 신경망에 입력하려면 입력 계층의 SplitComplexInputs 옵션이 1(true)이어야 합니다.
입력 데이터가 복소수 값이고 SplitComplexInputs 옵션이 0(false)인 경우 Normalization 옵션은 "zerocenter", "zscore", "none" 또는 함수 핸들이어야 합니다. 계층의 Mean 속성과 StandardDeviation 속성은 정규화 옵션이 "zerocenter" 및 "zscore"인 경우 복소수 값 데이터도 지원합니다.
복소수 값 데이터를 갖는 신경망을 훈련시키는 방법을 보여주는 예제는 Train Network with Complex-Valued Data 항목을 참조하십시오.
확장 기능
코드 생성 시 미지정(U) 차원을 가진
dlarray객체를 이 계층으로 전달하는 것은 지원되지 않습니다.벡터 시퀀스 입력값의 경우, 코드 생성 시에 특징의 개수가 상수여야 합니다.
공간 차원이 0, 1, 2 또는 3개인 입력 데이터에 대해 딥러닝 타사 라이브러리를 사용하지 않는 C 또는 C++ 코드를 생성할 수 있습니다.
ARM® Compute 및 Intel® MKL-DNN의 경우 입력 데이터에 0개 또는 2개의 공간 차원이 있어야 합니다.
코드 생성 시 함수 핸들을 사용하여 지정된
'Normalization'은 지원되지 않습니다.코드 생성 시 복소수 입력값은 지원되지 않으며
'SplitComplexInputs'옵션도 지원되지 않습니다.
사용법 관련 참고 및 제한 사항:
코드 생성 시 미지정(U) 차원을 가진
dlarray객체를 이 계층으로 전달하는 것은 지원되지 않습니다.GPU Coder™를 사용하여 CUDA® 또는 C++ 코드를 생성하려면 먼저 심층 신경망을 생성하고 훈련시켜야 합니다. 신경망이 훈련되고 평가된 후에는 코드를 생성하고 NVIDIA® 또는 ARM GPU 프로세서를 사용하는 플랫폼에 컨벌루션 신경망을 배포하도록 코드 생성기를 구성할 수 있습니다. 자세한 내용은 GPU Coder를 사용한 딥러닝 (GPU Coder) 항목을 참조하십시오.
공간 차원이 0, 1, 2 또는 3개인 입력 데이터에 대해 딥러닝 라이브러리를 사용하지 않는 CUDA 코드를 생성할 수 있습니다.
NVIDIA CUDA 심층 신경망 라이브러리(cuDNN) 또는 NVIDIA TensorRT™ 고성능 추론 라이브러리를 사용하는 코드를 생성할 수 있습니다.
cuDNN 라이브러리는 벡터와 2차원 영상 시퀀스를 지원합니다. TensorRT 라이브러리는 벡터 입력 시퀀스만 지원합니다.
입력값의 모든 공간 차원과 채널 차원은 코드 생성 중에 일정해야 합니다. 예를 들면 다음과 같습니다.
벡터 시퀀스 입력값의 경우, 코드 생성 시에 특징의 개수가 상수여야 합니다.
영상 시퀀스 입력값의 경우, 코드 생성 시에 높이, 너비, 채널 개수가 상수여야 합니다.
코드 생성 시 함수 핸들을 사용하여 지정된
'Normalization'은 지원되지 않습니다.코드 생성 시 복소수 입력값은 지원되지 않으며
'SplitComplexInputs'옵션도 지원되지 않습니다.
버전 내역
R2017b에 개발됨신경망에 대한 입력이 복소수 값인 경우, SplitComplexIputs가 0(false)이면 계층은 뒤에 오는 계층에 복소수 값 데이터를 전달합니다.
입력 데이터가 복소수 값이고 SplitComplexInputs 옵션이 0(false)인 경우 Normalization 옵션은 "zerocenter", "zscore", "none" 또는 함수 핸들이어야 합니다. 계층의 Mean 속성과 StandardDeviation 속성은 정규화 옵션이 "zerocenter" 및 "zscore"인 경우 복소수 값 데이터도 지원합니다.
R2024a부터 DAGNetwork 객체와 SeriesNetwork 객체는 권장되지 않습니다. 대신 dlnetwork 객체를 사용하십시오.
DAGNetwork 객체와 SeriesNetwork 객체에 대한 지원을 제거할 계획은 없습니다. 하지만 다음과 같은 이점이 있는 dlnetwork 객체가 대신 권장됩니다.
dlnetwork객체는 신경망 구축, 예측, 기본 제공 훈련, 시각화, 압축, 검증 및 사용자 지정 훈련 루프를 지원하는 통합 데이터형입니다.dlnetwork객체는 외부 플랫폼에서 만들거나 가져올 수 있는 더 넓은 범위의 신경망 아키텍처를 지원합니다.dlnetwork객체는trainnet함수에서 지원되기 때문에 손실 함수를 쉽게 지정할 수 있습니다. 내장 손실 함수 중에서 선택하거나 사용자 지정 손실 함수를 지정할 수 있습니다.일반적으로
dlnetwork객체를 사용한 훈련과 예측이LayerGraph와trainNetwork를 사용하는 워크플로보다 더 빠릅니다.
훈련된 DAGNetwork 또는 SeriesNetwork 객체를 dlnetwork 객체로 변환하려면 dag2dlnetwork 함수를 사용하십시오.
dlnetwork 객체의 시퀀스 입력 계층은 DAGNetwork 및 SeriesNetwork 객체의 시퀀스 입력 계층과 다른 레이아웃의 데이터가 필요합니다. 벡터 시퀀스 입력값의 경우, DAGNetwork 및 SeriesNetwork 객체 함수에는 c×t 행렬이 필요하며, 여기서 c는 시퀀스의 특징 개수이고 t는 시퀀스 길이입니다. 벡터 시퀀스 입력값의 경우, dlnetwork 객체 함수에는 t×c 행렬이 필요하며, 여기서 t는 시퀀스 길이이고 c는 시퀀스의 특징 개수입니다.
R2020a부터, trainNetwork는 정규화 통계량 계산 시에 채우기 값을 무시합니다. 즉, 이제 sequenceInputLayer의 Normalization 옵션을 사용하면 훈련이 모든 데이터 조작에 대해 불변합니다. 예를 들어, 이제 'zerocenter' 정규화는 훈련 결과가 데이터의 평균에 대해 불변한다는 점을 내포합니다.
채우기가 적용된 시퀀스에서 훈련시킬 경우, 초반 버전의 계산된 정규화 인자들이 다를 수 있으며 서로 다른 결과를 생성할 수 있습니다.
R2019b부터, sequenceInputLayer는 기본적으로 0이 중심이 되는 정규화에 채널별 정규화를 사용합니다. 이전 버전에서는 이 계층이 요소별 정규화를 사용했습니다. 이 동작을 재현하려면 이 계층의 NormalizationDimension 옵션을 'element'로 설정하십시오.
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)