여러 기능을 갖춘 RNN


27

기계 학습 알고리즘 (기본 임의 포리스트 및 선형 회귀 유형 항목)으로 작업하는 약간의 자체 학습 지식이 있습니다. Keras와 함께 RNN을 배우기 시작했습니다. 일반적으로 재고 예측과 관련된 대부분의 예제를 살펴보면 기능 날짜가 1 열이고 출력이 다른 열이 아닌 여러 기능의 기본 예제를 찾을 수 없었습니다. 내가 빠뜨린 중요한 근본적인 것이 있습니까?

누구든지 모범이 있다면 크게 감사하겠습니다.

감사!


1
"복수 기능"의 의미를 잘 모르겠습니다. 학습에 영향을 미치는 둘 이상의 기능을 의미하는 경우 다변량 설계 행렬을 사용하면됩니다. pls는 예 또는 무언가로 설명합니다.
horaceT

@horaceT multiple features 여기서는 숫자 데이터와 숫자가 아닌 데이터를 포함하는 기능으로 시계열 예측에 RNN을 사용하는 방법에 대한보다 구체적인 질문이 있습니까?
hhh

답변:


25

RNN (Recurrent Neural Network)은 시퀀스 데이터를 학습하도록 설계되었습니다. 짐작할 수 있듯이 여러 기능을 입력으로 사용할 수 있습니다! Keras 'RNNs는 2D 입력 (소요 T , F 시간 단계의) T를 하고 있습니다 F를 (내가 여기에 배치 차원을 무시하고 있습니다).

그러나 항상 중간 시간 단계 t = 1, 2 ... ( T -1)를 필요로하거나 원하는 것은 아닙니다 . 따라서 Keras는 두 모드를 유연하게 지원합니다. 모든 T 타임 스텝을 출력하려면 시공시 return_sequences=TrueRNN (예 : LSTM또는 GRU)으로 전달 하십시오 . 마지막 timestep t = T 만 원하는 경우 사용하십시오 return_sequences=False( return_sequences생성자에 전달하지 않으면 이것이 기본값입니다 ).

아래는이 두 모드의 예입니다.

예 1 : 시퀀스 학습

다음은 전체 시퀀스를 유지하는 LSTM (RNN 유형)을 훈련시키는 간단한 예입니다. 이 예에서, 각 입력 데이터 포인트는 2 개의 타임 스텝을 가지며 각각 3 개의 특징을 갖습니다. 출력 데이터에는 2 개의 타임 스텝 ( return_sequences=True)이 있으며 각각 4 개의 데이터 포인트가 있습니다 (크기가이므로 LSTM).

import keras.layers as L
import keras.models as M

import numpy

# The inputs to the model.
# We will create two data points, just for the example.
data_x = numpy.array([
    # Datapoint 1
    [
        # Input features at timestep 1
        [1, 2, 3],
        # Input features at timestep 2
        [4, 5, 6]
    ],
    # Datapoint 2
    [
        # Features at timestep 1
        [7, 8, 9],
        # Features at timestep 2
        [10, 11, 12]
    ]
])

# The desired model outputs.
# We will create two data points, just for the example.
data_y = numpy.array([
    # Datapoint 1
    [
        # Target features at timestep 1
        [101, 102, 103, 104],
        # Target features at timestep 2
        [105, 106, 107, 108]
    ],
    # Datapoint 2
    [
        # Target features at timestep 1
        [201, 202, 203, 204],
        # Target features at timestep 2
        [205, 206, 207, 208]
    ]
])

# Each input data point has 2 timesteps, each with 3 features.
# So the input shape (excluding batch_size) is (2, 3), which
# matches the shape of each data point in data_x above.
model_input = L.Input(shape=(2, 3))

# This RNN will return timesteps with 4 features each.
# Because return_sequences=True, it will output 2 timesteps, each
# with 4 features. So the output shape (excluding batch size) is
# (2, 4), which matches the shape of each data point in data_y above.
model_output = L.LSTM(4, return_sequences=True)(model_input)

# Create the model.
model = M.Model(input=model_input, output=model_output)

# You need to pick appropriate loss/optimizers for your problem.
# I'm just using these to make the example compile.
model.compile('sgd', 'mean_squared_error')

# Train
model.fit(data_x, data_y)

예 2 : 마지막 단계 배우기

반면에 시퀀스의 마지막 타임 스텝 만 출력하는 LSTM을 학습 return_sequences=False시키 려면 설정해야합니다 (또는 False기본값 이므로 생성자에서 완전히 제거해야 함 ). data_y마지막 시간 단계 만 제공하면되므로 출력 데이터 ( 위의 예에서)를 다시 정렬해야합니다. 따라서이 두 번째 예에서 각 입력 데이터 포인트에는 여전히 3 개의 기능이있는 2 개의 타임 스텝이 있습니다. 그러나 출력 데이터는 모든 데이터 포인트에 대해 단일 벡터입니다. 모든 것이 단일 타임 스텝으로 축소 되었기 때문입니다. 이 출력 벡터 각각에는 여전히 4 개의 기능이 있습니다 (왜냐하면 내가 전달하는 크기이기 때문입니다 LSTM).

import keras.layers as L
import keras.models as M

import numpy

# The inputs to the model.
# We will create two data points, just for the example.
data_x = numpy.array([
    # Datapoint 1
    [
        # Input features at timestep 1
        [1, 2, 3],
        # Input features at timestep 2
        [4, 5, 6]
    ],
    # Datapoint 2
    [
        # Features at timestep 1
        [7, 8, 9],
        # Features at timestep 2
        [10, 11, 12]
    ]
])

# The desired model outputs.
# We will create two data points, just for the example.
data_y = numpy.array([
    # Datapoint 1
    # Target features at timestep 2
    [105, 106, 107, 108],
    # Datapoint 2
    # Target features at timestep 2
    [205, 206, 207, 208]
])

# Each input data point has 2 timesteps, each with 3 features.
# So the input shape (excluding batch_size) is (2, 3), which
# matches the shape of each data point in data_x above.
model_input = L.Input(shape=(2, 3))

# This RNN will return timesteps with 4 features each.
# Because return_sequences=False, it will output 2 timesteps, each
# with 4 features. So the output shape (excluding batch size) is
# (2, 4), which matches the shape of each data point in data_y above.
model_output = L.LSTM(4, return_sequences=False)(model_input)

# Create the model.
model = M.Model(input=model_input, output=model_output)

# You need to pick appropriate loss/optimizers for your problem.
# I'm just using these to make the example compile.
model.compile('sgd', 'mean_squared_error')

# Train
model.fit(data_x, data_y)

큰 설명 감사합니다. 데이터 포인트 # 1과 데이터 포인트 # 2의 관계는 무엇입니까? 예를 들어 첫 번째 상황에서 데이터 포인트 2를 제거하고 데이터 포인트 1 아래에 배치하면 이제 4 개의 시간 단계가 있습니다. 그것이 모델 전체에 어떤 영향을 미칠까요?
Rjay155

데이터 포인트 사이에는 특별한 관계가 없습니다. 좋은 딥 러닝 교육 세트에는 수만 또는 수백만 개의 데이터 포인트가 있습니다. 하나의 데이터 포인트 = 하나의 훈련 샘플, 그게 다야. 데이터 포인트 # 1 및 # 2를 "병합"하는 경우 data_x단순히 단일 데이터 포인트를 포함하고 해당 데이터 포인트에는 각각 3 차원의 네 단계가 있으며, 마찬가지로 data_y동일한 방식으로 병합해야합니다 . 사용하는 타임 스텝 수는 모델링하려는 대상 (및 해당 프로세스와 관련된 타임 스텝 수)에 따라 다릅니다.
Adam Sypniewski

@ Adam Sypniewski 나는 y에 대해 질문이 있습니다. data_y = numpy.array ([# 데이터 포인트 1 # 타임 스텝 2에서의 타겟 피처 [[105, 106, 107, 108], [0, 1]], # 데이터 포인트 2 # 타임 스텝 2에서의 타겟 피처 [[205, 206, 207 , 208], [1, 0]]]) 내 y 중 하나가 범주 형 특징 인 경우. 어떻게 구성할까요? 고마워!
Hua Ye

2
이 경우 각 출력 타임 스텝이 one-hot 카테고리로 매핑되도록 RNN의 출력을 고밀도 계층으로 공급해야합니다.
Adam Sypniewski

여기에서 결과를 어떻게 시각화 할 수 있습니까? 일부 도표가 유용 할 것입니다.
hhh
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.