RNN कई विशेषताओं के साथ है


27

मेरे पास मशीन लर्निंग एल्गोरिदम (मूल यादृच्छिक वन और रैखिक प्रतिगमन प्रकार के सामान) के साथ काम करने का थोड़ा सा सिखाया गया ज्ञान है। मैंने शाखा लगाने का फैसला किया और आरएनएन को केर के साथ सीखना शुरू किया। जब अधिकांश उदाहरणों को देखते हुए, जिनमें आमतौर पर स्टॉक भविष्यवाणियों को शामिल किया जाता है, तो मैं 1 कॉलम के अलावा अन्य कई सुविधाओं के बुनियादी उदाहरणों को खोजने में सक्षम नहीं हो पाया हूं जो कि सुविधा की तारीख और आउटपुट होने के अलावा अन्य हैं। क्या कोई महत्वपूर्ण मूलभूत चीज है जो मुझे याद आ रही है या कुछ और है?

अगर किसी के पास एक उदाहरण है तो मैं इसकी बहुत सराहना करूंगा।

धन्यवाद!


1
सुनिश्चित नहीं हैं कि "कई विशेषताओं" से आपका क्या मतलब है। यदि आपके पास सीखने पर प्रभाव पड़ने वाली एक से अधिक विशेषता का मतलब है, तो आप बस एक बहुभिन्नरूपी डिज़ाइन मैट्रिक्स का उपयोग करते हैं। Pls एक उदाहरण या कुछ द्वारा स्पष्ट करें।
20

@horaceT मैंने multiple features यहां विस्तार से बताया , संख्यात्मक डेटा और गैर-संख्यात्मक डेटा वाली सुविधाओं के साथ समय-श्रृंखला भविष्यवाणियों के लिए RNN का उपयोग करने के बारे में एक और अधिक विशिष्ट प्रश्न?
hhh

जवाबों:


25

आवर्तक तंत्रिका नेटवर्क (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)

आपकी महान व्याख्या के लिए धन्यवाद। डेटापॉइंट # 1 और डेटापॉइंट # 2 के बीच क्या संबंध है। उदाहरण के लिए, पहली स्थिति में, यदि आप डाटापॉइंट 2 को हटाकर इसे डाटापॉइंट 1 के तहत रखें, तो अब हमारे पास 4 कदम हैं। यह एक पूरे के रूप में मॉडल को कैसे प्रभावित करेगा?
Rjay155

डेटापॉइंट्स के बीच कोई विशेष संबंध नहीं है। एक अच्छे डीप लर्निंग ट्रेनिंग सेट में कई दसियों या लाखों डैटपॉइंट होंगे। एक डेटा बिंदु = एक प्रशिक्षण नमूना, बस इतना ही। यदि आप # 1 और # 2 डेटापॉइंट्स को "मर्ज" करने के लिए थे, तो data_xबस एक एकल डेटा पॉइंट होगा, और उस डेटापॉइंट में चार टाइमस्टेप्स होंगे, प्रत्येक 3 आयाम (और इसी तरह, आपको data_yउसी तरह विलय करना होगा )। आपके द्वारा उपयोग किए जाने वाले टाइमस्टेप्स की संख्या इस बात पर निर्भर करती है कि आप क्या करने की कोशिश कर रहे हैं (और उस प्रक्रिया के लिए कितने टाइमस्टेप प्रासंगिक हैं)।
एडम साइपनिव्स्की

@ एड्म Sypniewski मैं y के बारे में सवाल है। data_y = numpy.array ([# Datapoint 1 # टाइमस्टेप 2 पर लक्ष्य सुविधाएँ [[105, 106, 107, 108], [0, 1]], # Datapoint 2 # टाइमस्टेप 2 पर लक्ष्य सुविधाएँ [205], 206, 207 , २०१], [१, ०]]]) अगर मेरी वाई में से कोई एक वस्तुगत विशेषताएं हैं। मैं यह कैसे संरचना करूँगा। धन्यवाद!
हुआ ये

2
उस स्थिति में, आपको संभवतः आरएनएन के उत्पादन को एक घनी परत में खिलाना चाहिए, ताकि प्रत्येक आउटपुट टाइमस्टेप एक-गर्म श्रेणियों में मैप हो जाए।
एडम साइपनिव्स्की

आप यहां परिणामों की कल्पना कैसे कर सकते हैं? कुछ भूखंड उपयोगी होंगे।
hhh
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.