একের কাছে অনেকগুলি এবং কেরাসের অনেকের কাছে অনেকগুলি LSTM উদাহরণ


108

আমি এলএসটিএম বুঝতে এবং কীভাবে কেরাস দিয়ে তাদের তৈরি করব তা বোঝার চেষ্টা করি। আমি জানতে পেরেছি যে, আরএনএন চালানোর জন্য মূলত 4 টি মোড রয়েছে (ছবিতে 4 জন সঠিক)

এখানে চিত্র বর্ণনা লিখুন চিত্রের উত্স: আন্দ্রেজ করপ্যাথি

এখন আমি আশ্চর্য হয়েছি যে কেরাসে তাদের প্রত্যেকের জন্য একটি নমনীয় কোড স্নিপেট কেমন হবে। তাই কিছু

model = Sequential()
model.add(LSTM(128, input_shape=(timesteps, data_dim)))
model.add(Dense(1))

4 টির প্রতিটি কাজের জন্য, সম্ভবত কিছুটা ব্যাখ্যা দিয়ে।

উত্তর:


121

তাই:

  1. ওয়ান-টু ওয়ান : আপনি Denseসিকোয়েন্সগুলি প্রক্রিয়াকরণ না করায় আপনি একটি স্তর ব্যবহার করতে পারেন :

    model.add(Dense(output_size, input_shape=input_shape))
  2. এক-একাধিক : এই বিকল্পটি সমর্থিত নয় পাশাপাশি চেইন মডেলগুলিতে খুব সহজ নয় Keras, সুতরাং নিম্নলিখিত সংস্করণটি সবচেয়ে সহজ:

    model.add(RepeatVector(number_of_times, input_shape=input_shape))
    model.add(LSTM(output_size, return_sequences=True))
  3. একাধিক এক : আসলে, আপনার কোড স্নিপেট (প্রায়) এই পদ্ধতির উদাহরণ:

    model = Sequential()
    model.add(LSTM(1, input_shape=(timesteps, data_dim)))
  4. বহু-থেকে-বহু : ইনপুট এবং আউটপুটটির দৈর্ঘ্য পুনরাবৃত্ত পদক্ষেপের সংখ্যার সাথে মেলে যখন এটি সবচেয়ে সহজ স্নিপেট:

    model = Sequential()
    model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
  5. অনেকগুলি থেকে অনেকগুলি পদক্ষেপের সংখ্যা যখন ইনপুট / আউটপুট দৈর্ঘ্যের থেকে পৃথক হয় : এটি কেরাসে মজাদার। কোড করার জন্য কোনও সহজ কোড স্নিপেট নেই।

সম্পাদনা: বিজ্ঞাপন 5

আমার সাম্প্রতিক অ্যাপ্লিকেশনগুলির মধ্যে একটিতে আমরা এমন কিছু বাস্তবায়ন করেছি যা চতুর্থ চিত্রের থেকে অনেকের সাথে একই রকম হতে পারে । আপনি যদি নিম্নলিখিত আর্কিটেকচারের সাথে নেটওয়ার্ক পেতে চান (যখন কোনও ইনপুট আউটপুটের চেয়ে দীর্ঘ হয়):

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | | | | 
                                  O O O O O O

আপনি নিম্নলিখিত পদ্ধতিতে এটি অর্জন করতে পারেন:

    model = Sequential()
    model.add(LSTM(1, input_shape=(timesteps, data_dim), return_sequences=True))
    model.add(Lambda(lambda x: x[:, -N:, :]

Nআপনি সর্বশেষ পদক্ষেপের সংখ্যাটি কোথায় coverেকে রাখতে চান (চিত্রটিতে N = 3)।

এই জায়গা থেকে পাওয়া:

                                        O O O
                                        | | |
                                  O O O O O O
                                  | | | 
                                  O O O 

এটি যথাযথ আকারের সাথে সামঞ্জস্য করার জন্য ভেক্টরগুলির Nসাথে ব্যবহার করে যেমন দৈর্ঘ্যের কৃত্রিম প্যাডিং ক্রম সাধারণ is0


10
একটি স্পষ্টতা: উদাহরণস্বরূপ অনেকের জন্য আপনি এলএসটিএম (1, ইনপুট_শ্যাপ = (টাইমস্টেপস, ডেটা_ডিম)) ব্যবহার করেছেন I টু ওয়ান দিয়ে বলুন, এর চেয়ে 512 নোড? (যেহেতু আমি সিমলিয়ার কিছু পড়েছি আমি ভেবেছিলাম এটি মডেল.এডিডি (এলএসটিএম (512, ইনপুট_শ্যাপ = ...)) মডেল.এডিডি (ঘন (1)) এর সাথে কী ব্যবহৃত হয়?)
লুকা থিয়েডে ২

1
এই ক্ষেত্রে - আপনার কোড - একটি টাইপো সংশোধন করার পরে ঠিক হওয়া উচিত।
মার্সিন মোজেজেকো

কেন আমরা পুনরাবৃত্তিকারক ব্যবহার করি, এবং প্রথম এন্ট্রি 1 = 0 এবং অন্যান্য সমস্ত এন্ট্রি = 0 সহ ভেক্টর নয় (উপরের চিত্র অনুসারে, পরবর্তী রাজ্যে কোনও ইনপুট নয় এবং সর্বদা একই ইনপুট নয়, পুনরাবৃত্তি ভেক্টর আমার বোঝার মধ্যে কি করবে)
লুকা থিয়েডে

1
আপনি যদি এই ছবিটি সম্পর্কে যত্ন সহকারে চিন্তা করেন - এটি কেবল এক থেকে অনেকের ধারণার ধারণাগত উপস্থাপনা । এই সমস্ত লুকানো ইউনিট অবশ্যই একটি ইনপুট হিসাবে কিছু গ্রহণ করতে হবে । সুতরাং - তারা একই ইনপুটটির পাশাপাশি প্রথম ইনপুটটির সমান xএবং অন্য সমান এর সাথে ইনপুট গ্রহণ করতে পারে 0। তবে - অন্যদিকে - তারা একই xপুনরাবৃত্তিটি বহুবার গ্রহণও করতে পারে । চেইন মডেলগুলির পক্ষে ভিন্ন ভিন্ন পদ্ধতির মধ্যে রয়েছে যা শক্ত Keras। আমি যে বিকল্পটি সরবরাহ করেছি তা হ'ল এক-একাধিক আর্কিটেকচারের সহজতম ঘটনা Keras
মার্সিন মোয়েজকো 14 '15

সুন্দর! আইএম জিএন আর্কিটেকচারে এলএসটিএম এন থেকে এন ব্যবহার করার বিষয়ে ভাবছে। আমার কাছে একটি এলএসটিএম ভিত্তিক জেনারেটর থাকবে। আমি এই জেনারেটরটি দেব (গ্যান্সে "লেটেন্ট ভেরিয়েবল" হিসাবে ব্যবহৃত) সময় সিরিজের প্রথমার্ধ এবং এই জেনারেটর সময় সিরিজের দ্বিতীয়ার্ধ উত্পাদন করবে। তারপরে আমি জাঁটির জন্য "জাল" ইনপুট তৈরি করতে দুইটি অর্ধ (বাস্তব এবং উত্পন্ন) একত্রিত করব। আপনি কি মনে করেন যে আপনার 4 পয়েন্ট ব্যবহার করে সলিউশন কাজ করবে? বা, অন্য কথায়, এটি (সমাধান 4) এটি করার সঠিক উপায়?
rjpg

6

@ মার্সিন মোয়েজকো দ্বারা দুর্দান্ত উত্তর

আমি নিম্নলিখিতগুলি এনআর .5 এ যুক্ত করব (অনেকের মধ্যে / বহির দৈর্ঘ্যের সাথে অনেকগুলি):

ক) ভ্যানিলা এলএসটিএম হিসাবে

model = Sequential()
model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES)))
model.add(Dense(N_OUTPUTS))

খ) এনকোডার-ডিকোডার এলএসটিএম হিসাবে

model.add(LSTM(N_BLOCKS, input_shape=(N_INPUTS, N_FEATURES))  
model.add(RepeatVector(N_OUTPUTS))
model.add(LSTM(N_BLOCKS, return_sequences=True))  
model.add(TimeDistributed(Dense(1)))
model.add(Activation('linear')) 

1
আপনি কি দয়া করে B) Encoder-Decoder LSTMস্থাপত্যের বিবরণ ব্যাখ্যা করতে পারেন ? আমি "পুনরাবৃত্তিকারী" / "টাইমডিস্ট্রিবিউটেড" পদক্ষেপগুলির ভূমিকা বোঝার জন্য সমস্যা বোধ করছি।
মার্শেলাস ওয়ালেস
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.