기계 학습 알고리즘 (기본 임의 포리스트 및 선형 회귀 유형 항목)으로 작업하는 약간의 자체 학습 지식이 있습니다. Keras와 함께 RNN을 배우기 시작했습니다. 일반적으로 재고 예측과 관련된 대부분의 예제를 살펴보면 기능 날짜가 1 열이고 출력이 다른 열이 아닌 여러 기능의 기본 예제를 찾을 수 없었습니다. 내가 빠뜨린 중요한 근본적인 것이 있습니까?
누구든지 모범이 있다면 크게 감사하겠습니다.
감사!
기계 학습 알고리즘 (기본 임의 포리스트 및 선형 회귀 유형 항목)으로 작업하는 약간의 자체 학습 지식이 있습니다. Keras와 함께 RNN을 배우기 시작했습니다. 일반적으로 재고 예측과 관련된 대부분의 예제를 살펴보면 기능 날짜가 1 열이고 출력이 다른 열이 아닌 여러 기능의 기본 예제를 찾을 수 없었습니다. 내가 빠뜨린 중요한 근본적인 것이 있습니까?
누구든지 모범이 있다면 크게 감사하겠습니다.
감사!
답변:
RNN (Recurrent Neural Network)은 시퀀스 데이터를 학습하도록 설계되었습니다. 짐작할 수 있듯이 여러 기능을 입력으로 사용할 수 있습니다! Keras 'RNNs는 2D 입력 (소요 T , F 시간 단계의) T를 하고 있습니다 F를 (내가 여기에 배치 차원을 무시하고 있습니다).
그러나 항상 중간 시간 단계 t = 1, 2 ... ( T -1)를 필요로하거나 원하는 것은 아닙니다 . 따라서 Keras는 두 모드를 유연하게 지원합니다. 모든 T 타임 스텝을 출력하려면 시공시 return_sequences=True
RNN (예 : LSTM
또는 GRU
)으로 전달 하십시오 . 마지막 timestep t = T 만 원하는 경우 사용하십시오 return_sequences=False
( return_sequences
생성자에 전달하지 않으면 이것이 기본값입니다 ).
아래는이 두 모드의 예입니다.
다음은 전체 시퀀스를 유지하는 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)
반면에 시퀀스의 마지막 타임 스텝 만 출력하는 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)
data_x
단순히 단일 데이터 포인트를 포함하고 해당 데이터 포인트에는 각각 3 차원의 네 단계가 있으며, 마찬가지로 data_y
동일한 방식으로 병합해야합니다 . 사용하는 타임 스텝 수는 모델링하려는 대상 (및 해당 프로세스와 관련된 타임 스텝 수)에 따라 다릅니다.