केआरएस के साथ LSTM में input_shape पैरामीटर को समझना


20

मैं "स्टैक्ड LSTM फॉर सीक्वेंस वर्गीकरण" नाम के केरस प्रलेखन में वर्णित उदाहरण का उपयोग करने की कोशिश कर रहा हूं (नीचे कोड देखें) और input_shapeअपने डेटा के संदर्भ में पैरामीटर का पता नहीं लगा सकता ।

मेरे पास इनपुट के रूप में 25 संभावित वर्णों के दृश्यों का एक मैट्रिक्स है जो पूर्णांक में अधिकतम लंबाई 31 के गद्देदार अनुक्रम में एन्कोडेड है। परिणामस्वरूप, मेरे x_trainआकार का (1085420, 31)अर्थ है (n_observations, sequence_length)

from keras.models import Sequential
from keras.layers import LSTM, Dense
import numpy as np

data_dim = 16
timesteps = 8
num_classes = 10

# expected input data shape: (batch_size, timesteps, data_dim)
model = Sequential()
model.add(LSTM(32, return_sequences=True,
               input_shape=(timesteps, data_dim)))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32, return_sequences=True))  # returns a sequence of vectors of dimension 32
model.add(LSTM(32))  # return a single vector of dimension 32
model.add(Dense(10, activation='softmax'))

model.compile(loss='categorical_crossentropy',
              optimizer='rmsprop',
              metrics=['accuracy'])

# Generate dummy training data
x_train = np.random.random((1000, timesteps, data_dim))
y_train = np.random.random((1000, num_classes))

# Generate dummy validation data
x_val = np.random.random((100, timesteps, data_dim))
y_val = np.random.random((100, num_classes))

model.fit(x_train, y_train,
          batch_size=64, epochs=5,
          validation_data=(x_val, y_val))

इस कोड x_trainमें आकार (1000, 8, 16), 16 तत्वों के 8 सरणियों के 1000 सरणियों की एक सरणी के रूप में है। वहां मैं पूरी तरह से खो गया कि क्या और कैसे मेरा डेटा इस आकार तक पहुंच सकता है।

केरस डॉक और विभिन्न ट्यूटोरियल और क्यू एंड ए को देखते हुए, ऐसा लगता है कि मुझे कुछ स्पष्ट याद आ रहा है। क्या कोई मुझे संकेत दे सकता है कि मुझे क्या देखना है?

आपकी सहायताके लिए धन्यवाद !

जवाबों:


23

LSTM आकृतियाँ कठिन हैं इसलिए बुरा न मानें, मुझे खुद से जूझते हुए कुछ दिन बिताने पड़े:

यदि आप एक बार में डेटा 1 वर्ण को खिला रहे हैं तो आपके इनपुट का आकार 31,1 होना चाहिए क्योंकि आपके इनपुट में 31 टाइमस्टेप, 1 वर्ण प्रत्येक है। आपको अपने x_train को (1085420, 31) से (1085420, 31,1) में बदलने की आवश्यकता होगी जो इस कमांड के साथ आसानी से किया जाता है:

 x_train=x_train.reshape(x_train.shape[0],x_train.shape[1],1))

2

इस git रिपॉजिटरी LSTM केर सारांश डायग्राम की जांच करें और मेरा मानना ​​है कि आपको सब कुछ क्रिस्टल स्पष्ट होना चाहिए।

इस गिट रेपो में एक केरस LSTM सारांश चित्र शामिल है जो दिखाता है:

  • मापदंडों के उपयोग की तरह return_sequences, batch_size, time_step...
  • Lstm परतों की वास्तविक संरचना
  • केरस में इन परतों की अवधारणा
  • LSTM की परतों को स्टैक करने के लिए अपने मॉडल की आवश्यकताओं से मेल खाने के लिए अपने इनपुट और आउटपुट डेटा में हेरफेर कैसे करें

और अधिक


इसके लिए धन्यवाद, @MohammadFneish। ऐसा लग रहा है कि यह अब अधिक उपयोगी होगा। हालांकि, यह स्पष्ट नहीं है कि यह सवाल का एक जवाब है , एक सहायक सुझाव के विपरीत। ज्ञात हो कि क्रास वैलिडेट कड़ाई से क्यू एंड ए साइट है, न कि फोरम। क्या आप इनपुट आकार पैरामीटर की व्याख्या करने के लिए [अभी भी अधिक] जानकारी जोड़ सकते हैं?
गुंग - को पुनः स्थापित मोनिका

3
@ मैं वास्तव में जिस तरह से आप मानकों पर रखने के लिए इन उत्तरों की समीक्षा करने के लिए प्रबंधन कर रहे हैं, उसकी सराहना करते हैं, लेकिन मुझे लगता है कि मैं इन मापदंडों के बारे में और भी विस्तृत नहीं कर सकता, जहां इसके बारे में कई तकनीकी विवरण हैं। मुझे लगता है कि मेरा जवाब डेवलपर्स के लिए इसी तरह के मुद्दों के साथ सहायक हो सकता है, और यह विशेष रूप से इस विशेष मुद्दे के साथ नहीं है। धन्यवाद
मोहम्मद Fneish

1

मुझे पता है कि यह आपके सवाल का सीधा जवाब नहीं है। यह केवल एक एलएसटीएम सेल के साथ एक सरलीकृत उदाहरण है, जो मुझे इनपुट डेटा के लिए रीसेट ऑपरेशन को समझने में मदद करता है।

from keras.models import Model
from keras.layers import Input
from keras.layers import LSTM
import numpy as np

# define model
inputs1 = Input(shape=(2, 3))
lstm1, state_h, state_c = LSTM(1, return_sequences=True, return_state=True)(inputs1)
model = Model(inputs=inputs1, outputs=[lstm1, state_h, state_c])

# define input data
data = np.random.rand(2, 3)
data = data.reshape((1,2,3))

# make and show prediction
print(model.predict(data))

यह LSTM नेटवर्क का उदाहरण होगा, जिसमें केवल एक LSTM सेल और विशिष्ट आकार के इनपुट डेटा के साथ होगा।

जैसा कि यह पता चला है, हम यहां केवल भविष्यवाणी कर रहे हैं, प्रशिक्षण सरलता के लिए मौजूद नहीं है, लेकिन देखो कि हमें predictविधि से पहले डेटा को फिर से व्यवस्थित करने (अतिरिक्त आयाम जोड़ने के लिए) की आवश्यकता कैसे है ।

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