आवर्तक तंत्रिका नेटवर्क (RNN) अनुक्रम डेटा को सीखने के लिए डिज़ाइन किए गए हैं। जैसा कि आप अनुमान लगाते हैं, वे निश्चित रूप से इनपुट के रूप में कई सुविधाएँ ले सकते हैं! केरस के आरएनएन टाइमस्टेप टी के 2 डी इनपुट ( टी , एफ ) लेते हैं और एफ (मैं यहां बैच आयाम को अनदेखा कर रहा हूं) की सुविधा देता है।
हालाँकि, आपको हमेशा इंटरमीडिएट टाइमस्टेप, टी = 1, 2 ... ( टी - 1) की आवश्यकता नहीं है या नहीं चाहिए । इसलिए, Keras लचीले ढंग से दोनों मोड का समर्थन करता है। यह सभी टी टाइमस्टेप को आउटपुट return_sequences=True
करने के लिए, निर्माण के समय अपने आरएनएन (जैसे, 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)