Tekrarlayan sinir ağları (RNN'ler) dizi verilerini öğrenmek için tasarlanmıştır. Tahmin ettiğiniz gibi, kesinlikle girdi olarak birden fazla özellik alabilirler! Keras' RNNs 2D girdileri (almak T , F dilimler arasında) T ve özellikleri F (burada toplu boyut görmezden geliyorum).
Bununla birlikte, her zaman ara zaman adımlarına ihtiyaç duymaz veya istemezsiniz, t = 1, 2 ... ( T - 1). Bu nedenle Keras, her iki modu da esnek bir şekilde destekler. Tüm T timestepslerini çıkartabilmek için, yapım sırasındaki RNN'nize return_sequences=True
(ör. LSTM
Veya GRU
) geçin . Sadece son zamanaşımını t = T istiyorsanız , o zaman kullanın return_sequences=False
(bu, kurucuya geçmezseniz varsayılan değerdir return_sequences
).
Aşağıda bu modların her ikisine de örnek gösterilmektedir.
Örnek 1: Diziyi öğrenme
İşte tüm diziyi etrafında tutan bir LSTM (RNN tipi) eğitimi için hızlı bir örnek. Bu örnekte, her giriş veri noktası, her biri 3 özellik içeren 2 zaman adımına sahiptir; çıktı verisi return_sequences=True
, her biri 4 veri noktası olan (çünkü ilettiğim boyuta göre ) 2 zamanlayıcısına (çünkü ) sahiptir 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)
Örnek 2: Son zaman adımını öğrenme
Öte yandan, dizideki yalnızca son zaman adımını çıkaran bir LSTM düzenlemek istiyorsanız, o zaman ayarlamanız gerekir return_sequences=False
(ya da sadece False
varsayılan olduğundan , bunu yapıcıdan tamamen kaldırmanız gerekir ). Ve sonra çıktı verilerinizin ( data_y
yukarıdaki örnekte) yeniden düzenlenmesi gerekir, çünkü yalnızca son zaman aşımını sağlamanız gerekir. Yani bu ikinci örnekte, her bir giriş veri noktası hala her biri 3 özellik içeren 2 zaman adımına sahiptir. Bununla birlikte, çıktı verileri her veri noktası için sadece tek bir vektördür, çünkü her şeyi tek bir zaman aşamasına indirdik. Bu çıkış vektörlerinin her biri yine de 4 özelliğe sahiptir (çünkü aktardığım boyut budur 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)