เครือข่ายประสาทที่เกิดขึ้นอีก (RNNs) ได้รับการออกแบบมาเพื่อเรียนรู้ข้อมูลลำดับ อย่างที่คุณเดาพวกเขาสามารถใช้คุณสมบัติหลายอย่างเป็นอินพุตได้อย่างแน่นอน! Keras 'RNNs รับอินพุต 2D ( T , F ) ของการตั้งเวลาTและฟีเจอร์F (ฉันไม่สนใจมิติแบทช์ที่นี่)
อย่างไรก็ตามคุณไม่ต้องการหรือต้องการการประทับเวลาระดับกลางเสมอt = 1, 2 ... ( T - 1) ดังนั้น Keras ยืดหยุ่นรองรับทั้งสองโหมด หากต้องการให้มันส่งออกการจับเวลาTทั้งหมดให้ส่งreturn_sequences=True
ไปที่ RNN ของคุณ (เช่นLSTM
หรือGRU
) ที่กำลังก่อสร้าง หากคุณต้องการการประทับเวลาล่าสุดเท่านั้น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
ในตัวอย่างข้างต้น) จะต้องมีการจัดเรียงใหม่เนื่องจากคุณจะต้องระบุเวลาล่าสุด ดังนั้นในตัวอย่างที่สองนี้จุดข้อมูลอินพุตแต่ละจุดยังคงมีการประทับเวลา 2 ครั้งแต่ละอันมี 3 ฟีเจอร์ อย่างไรก็ตามข้อมูลที่ส่งออกเป็นเพียงเวกเตอร์เดียวสำหรับแต่ละจุดข้อมูลเพราะเราได้ทำให้ทุกอย่างราบเรียบลงในการประทับเวลาเดียว แต่ละเวกเตอร์เอาต์พุตเหล่านี้ยังคงมีคุณสมบัติ 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)