কেরাসের সাথে LSTM এ ইনপুট_শ্যাপের প্যারামিটার বোঝা যাচ্ছে


20

আমি "ক্রম শ্রেণিবিন্যাসের জন্য স্ট্যাকড এলএসটিএম" (নীচের কোডটি দেখুন) নামক কেরাস ডকুমেন্টেশনে বর্ণিত উদাহরণটি ব্যবহার করার চেষ্টা করছি input_shapeএবং আমার ডেটা প্রসঙ্গে প্যারামিটারটি বের করতে পারছি না ।

আমার ইনপুট হিসাবে সর্বাধিক দৈর্ঘ্যের 31 টি প্যাডযুক্ত ক্রমের সাথে পূর্ণসংখ্যায় এনকোড হওয়া 25 টি সম্ভাব্য অক্ষরের ক্রমগুলির একটি ম্যাট্রিক্স রয়েছে a ফলস্বরূপ, আমার 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))

এই কোডটিতে 16 টি উপাদানগুলির 8 টি অ্যারের 1000 টি অ্যারের হিসাবে x_trainআকার (1000, 8, 16)রয়েছে। আমার ডেটা এই আকারে কীভাবে পৌঁছতে পারে তা কী এবং আমি সম্পূর্ণরূপে হারিয়ে গিয়েছি।

কেরাস ডক এবং বিভিন্ন টিউটোরিয়াল এবং প্রশ্নোত্তর দেখে মনে হচ্ছে যে আমি স্পষ্ট কিছু মিস করছি। কেউ কি আমাকে সন্ধান করতে হবে তার ইঙ্গিত দিতে পারে?

আপনার সাহায্যের জন্য ধন্যবাদ !

উত্তর:


23

এলএসটিএম আকারগুলি শক্ত তাই খারাপ মনে করবেন না, আমি নিজে লড়াইয়ের জন্য কয়েক দিন সময় কাটাতে হয়েছিল:

আপনি যদি একসাথে ডেটা 1 অক্ষর খাওয়াতেন তবে আপনার ইনপুটটির আকারটি (31,1) হওয়া উচিত যেহেতু আপনার ইনপুটটির 31 টি টাইমস্টেপ, প্রতিটি অক্ষর রয়েছে। আপনাকে আপনার x_train (1085420, 31) থেকে (1085420, 31,1) থেকে পুনরায় আকার দেওয়ার দরকার হবে যা এই আদেশ দিয়ে সহজেই করা হয়ে থাকে:

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

2

এই গিট সংগ্রহস্থলটি এলএসটিএম কেরাস সংক্ষিপ্ত চিত্রটি পরীক্ষা করে দেখুন এবং আমি বিশ্বাস করি আপনার সবকিছু স্ফটিক পরিষ্কার হওয়া উচিত।

এই গিট রেপোতে একটি কেরাস এলএসটিএম সংক্ষিপ্ত চিত্র রয়েছে যা দেখায়:

  • পরামিতি ব্যবহার পছন্দ return_sequences, batch_size, time_step...
  • lstm স্তরগুলির আসল কাঠামো
  • কেরাসে এই স্তরগুলির ধারণা
  • কীভাবে এলএসটিএম এর স্তরগুলি স্ট্যাক করবেন তা আপনার মডেল প্রয়োজনীয়তার সাথে মেলে আপনার ইনপুট এবং আউটপুট ডেটা কীভাবে পরিচালনা করবেন

এবং আরও


এর জন্য আপনাকে ধন্যবাদ, @ মোহাম্মদফ্নিশ। দেখে মনে হচ্ছে এটি এখন আরও সহায়ক হবে। তবে এটি পরিষ্কার নয় যে এটি একটি সহায়ক পরামর্শের বিরোধিতা হিসাবে এই প্রশ্নের বেশিরভাগ উত্তর । সচেতন থাকুন যে ক্রস ভ্যালিটেটেড কঠোরভাবে প্রশ্নোত্তর সাইট, কোনও ফোরাম নয়। ইনপুট শেপ প্যারামিটারটি ব্যাখ্যা করতে আপনি কি [আরও আরও] তথ্য যুক্ত করতে পারেন?
গুং - মনিকা পুনরায়

3
@ গুং, মানগুলি বজায় রাখার জন্য আপনি এই উত্তরগুলি পর্যালোচনা করার জন্য যেভাবে পরিচালনা করছেন তা আমি সত্যই প্রশংসা করি, তবে আমি মনে করি যে এই পরামিতিগুলির বিষয়ে আমি আরও কিছু বিশদভাবে জানাতে পারি না যেখানে এটি সম্পর্কে অনেক প্রযুক্তিগত বিবরণ রয়েছে। আমি কেবলমাত্র মনে করি যে আমার উত্তর বিকাশকারীদের কেরাস ইনপুটগুলির সাথে একই রকম সমস্যার মুখোমুখি হতে পারে এবং অগত্যা এই নির্দিষ্ট সমস্যাটি নয় helpful ধন্যবাদ
মোহাম্মদ ফনিশ

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))

এটি কেবলমাত্র একটি একক এলএসটিএম সেল এবং নির্দিষ্ট আকারের ইনপুট ডেটা সহ এলএসটিএম নেটওয়ার্কের একটি উদাহরণ।

দেখা যাচ্ছে যে, আমরা এখানে কেবল ভবিষ্যদ্বাণী করছি, সরলতার জন্য প্রশিক্ষণ উপস্থিত নেই, তবে predictপদ্ধতির আগে কীভাবে আমাদের ডেটা পুনরায় আকার দেওয়ার (অতিরিক্ত মাত্রা যুক্ত করতে) প্রয়োজন তা দেখুন ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.