পুনরাবৃত্ত নিউরাল নেটওয়ার্কগুলি (আরএনএন) সিক্যুয়েন্স ডেটা শিখতে ডিজাইন করা হয়েছে। আপনি অনুমান হিসাবে, তারা অবশ্যই ইনপুট হিসাবে একাধিক বৈশিষ্ট্য নিতে পারে! Keras 'RNNs 2D কেনে (নেওয়া টি , এফ timesteps এর) টি এবং বৈশিষ্ট্য এফ (আমি ব্যাচ মাত্রা এখানে উপেক্ষা করছি)।
তবে, আপনার সবসময় মধ্যবর্তী টাইমস্টেপগুলি দরকার হয় না বা চান না, t = 1, 2 ... ( টি - 1)। অতএব, কেরাস উভয় মোডকে নমনীয়ভাবে সমর্থন করে। এটিতে সমস্ত টি টাইমস্টেপ আউটপুট আনতে, return_sequences=True
আপনার আরএনএন (যেমন, LSTM
বা GRU
) নির্মাণের সময় পাস করুন । আপনি যদি কেবল শেষ টাইমস্টেপ টি = টি চান , তবে ব্যবহার করুন return_sequences=False
(আপনি যদি return_sequences
কনস্ট্রাক্টরের কাছে না যান তবে এটি ডিফল্ট )।
নীচে এই দুটি মোডের উদাহরণ দেওয়া আছে।
উদাহরণ 1: ক্রম শেখা
এখানে এলএসটিএম (আরএনএন প্রকারের) প্রশিক্ষণের একটি দ্রুত উদাহরণ রয়েছে যা পুরো ক্রমটি চারপাশে রাখে। এই উদাহরণে, প্রতিটি ইনপুট ডেটার পয়েন্টটিতে 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: শেষ টাইমস্টেপ শেখা
অন্যদিকে, আপনি যদি কোনও এলএসটিএম প্রশিক্ষণ দিতে চান যা কেবল ক্রমটির শেষ টাইমস্টেপকে 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)