কেরাস (পাইথন) ব্যবহার করে LSTM-RNN এর জন্য হাইপারপ্যারামিটার অনুসন্ধান করুন


18

কেরাস আরএনএন টিউটোরিয়াল থেকে: "আরএনএনগুলি কৌতুকপূর্ণ।

সুতরাং এটি কেরাসে একটি এলএসটিএম-আরএনএন এর হাইপারপ্যারামিটারগুলি সুর করার বিষয়ে আরও সাধারণ প্রশ্ন। আমি আপনার আরএনএন জন্য সেরা পরামিতি সন্ধান করার একটি পদ্ধতির সম্পর্কে জানতে চাই।

আমি কেরাসের গিথুব- এর আইএমডিবি উদাহরণ দিয়ে শুরু করেছি ।

প্রধান মডেলটি দেখতে এমন দেখাচ্ছে:

(X_train, y_train), (X_test, y_test) = imdb.load_data(nb_words=max_features,
                                                      test_split=0.2)

max_features = 20000
maxlen = 100  # cut texts after this number of words (among top max_features most common words)
batch_size = 32

model = Sequential()
model.add(Embedding(max_features, 128, input_length=maxlen))
model.add(LSTM(128))  
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

print("Train...")
model.fit(X_train, y_train, batch_size=batch_size, nb_epoch=3,
      validation_data=(X_test, y_test), show_accuracy=True)
score, acc = model.evaluate(X_test, y_test,
                        batch_size=batch_size,
                        show_accuracy=True)

print('Test accuracy:', acc)
Test accuracy:81.54321846

৮১.৫ হ'ল একটি ন্যূনতম স্কোর এবং আরও গুরুত্বপূর্ণ এটির অর্থ হল মডেলটি পুরোপুরি অনুকূলিত না হলেও এটি কাজ করে।

আমার ডেটা টাইম সিরিজ এবং টাস্কটি বাইনারি পূর্বাভাস, উদাহরণের মতো। এবং এখন আমার সমস্যাটি এরকম দেখাচ্ছে:

#Training Data
train = genfromtxt(os.getcwd() + "/Data/trainMatrix.csv", delimiter=',', skip_header=1)
validation = genfromtxt(os.getcwd() + "/Data/validationMatrix.csv", delimiter=',', skip_header=1)

#Targets
miniTrainTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/trainTarget.csv", delimiter=',', skip_header=1)]
validationTargets = [int(x) for x in genfromtxt(os.getcwd() + "/Data/validationTarget.csv", delimiter=',', skip_header=1)]

#LSTM
model = Sequential()
model.add(Embedding(train.shape[0], 64, input_length=train.shape[1]))
model.add(LSTM(64)) 
model.add(Dropout(0.5))
model.add(Dense(1))
model.add(Activation('sigmoid'))

# try using different optimizers and different optimizer configs
model.compile(loss='binary_crossentropy',
          optimizer='adam',
          class_mode="binary")

model.fit(train, miniTrainTargets, batch_size=batch_size, nb_epoch=5,
      validation_data=(validation, validationTargets), show_accuracy=True)
valid_preds = model.predict_proba(validation, verbose=0)
roc = metrics.roc_auc_score(validationTargets, valid_preds)
print("ROC:", roc)
ROC:0.5006526

মডেলটি মূলত আইএমডিবি একের মতো। যদিও ফলাফলটির অর্থ এটি কিছুই শিখছে না। যাইহোক, আমি যখন ভ্যানিলা এমএলপি-এনএন ব্যবহার করি তখন আমার একই সমস্যা হয় না, মডেলটি শিখে এবং স্কোর বৃদ্ধি পায়। আমি পর্বের সংখ্যা বৃদ্ধি এবং এলটিএসএম ইউনিটের সংখ্যা বৃদ্ধি-হ্রাস করার চেষ্টা করেছি তবে স্কোর বাড়বে না।

সুতরাং আমি নেটওয়ার্ক টিউন করার জন্য একটি স্ট্যান্ডার্ড পদ্ধতির জানতে চাই কারণ তাত্ত্বিকভাবে অ্যালগরিদমের এই সময়ের সিরিজের ডেটাগুলির জন্য বিশেষত একটি মাল্টিলেয়ার পারসেপ্ট্রন নেটওয়ার্কের চেয়ে আরও ভাল সম্পাদন করা উচিত।


1
আপনার কাছে কত তথ্য আছে? আপনার ক্রম দৈর্ঘ্য কত? LSTM গুলি কেবলমাত্র প্রচুর ডেটা এবং দীর্ঘমেয়াদী নির্ভরতা নিয়ে সমস্যার জন্য সত্যই কার্যকর।
পীর

এলোমেলো অনুসন্ধান বা বায়সিয়ান অপ্টিমাইজেশন হাইপারপ্যারামিটারগুলি সন্ধান করার মানক উপায় :)
পীর

1
আপনি কি এম্বেডিং স্তরটি নিশ্চিত? অনেক সময় সিরিজের ডেটাসেটের এটির প্রয়োজন হবে না।
পীর

আমার প্রায় 100k ডেটা পয়েন্ট রয়েছে এবং আইএমডিবি উদাহরণের দ্বিগুণ বৈশিষ্ট্য রয়েছে তাই আমি মনে করি এটি সমস্যা নয়। এম্বেডিং স্তর হিসাবে, আপনি কীভাবে ইনপুটটির সাথে এলএসটিএম স্তরটি সংযুক্ত করবেন? ডকুমেন্টেশন অনুসারে কেরাস.আইও / লেয়ারস / রিচারেন্ট /# এলএসটিএম কেরাসের এলএসটিএম আর্গুমেন্ট হিসাবে কেবল সূচনা, অ্যাক্টিভেশন এবং আউটপুট_ডিম নেয়। যদি এটি ত্রুটির উত্স হয় তবে এম্বেডিং স্তরটি কীভাবে নির্মূল করা যায় সে সম্পর্কে বর্ণিত কোডটি প্রশংসা পাবে।
ওয়াক্যাক্স

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

উত্তর:


5

একটি এম্বেডিং স্তরটি ইতিবাচক পূর্ণসংখ্যার (সূচকগুলি) স্থির আকারের ঘন ভেক্টরে রূপান্তরিত করে। উদাহরণস্বরূপ [[4], [20]] -> [[0.25, 0.1], [0.6, -0.2]],। এই প্রতিনিধিত্বকারী রূপান্তরটি কেরাসে এম্বেডিং স্তরের সাথে স্বয়ংক্রিয়ভাবে শিখতে হবে ( ডকুমেন্টেশন দেখুন )।

তবে, মনে হচ্ছে কোনও রূপান্তর সম্পাদন করার জন্য আপনার ডেটাতে এ জাতীয় এম্বেডিং স্তরের কোনও প্রয়োজন নেই। অপ্রয়োজনীয় এমবেডিং স্তর থাকায় সম্ভবত আপনি নিজের এলএসটিএমকে সঠিকভাবে কাজ করতে না পারার কারণ। যদি এটি হয় তবে আপনার কেবল এমবেডিং স্তরটি সরিয়ে ফেলা উচিত।

আপনার নেটওয়ার্কের প্রথম স্তরটিতে input_shapeআপনার ডেটার মাত্রাগুলির উপর তথ্য যুক্ত যুক্তি যুক্ত করা উচিত ( উদাহরণ দেখুন )। মনে রাখবেন যে আপনি এই আর্গুমেন্টটি যে কোনও স্তরের সাথে যুক্ত করতে পারেন - এটি কোনও নির্দিষ্ট স্তরের জন্য ডকুমেন্টেশনে উপস্থিত হবে না।


যাইহোক, হাইপারপ্যারামিটারগুলি প্রায়শই এলোমেলো অনুসন্ধান বা বায়সিয়ান অপ্টিমাইজেশন ব্যবহার করে সুর করা হয়। আমি আরএমএসপ্রপ ব্যবহার করব এবং ব্যাচের আকারের টিউন (32, 64, 128, 256 এবং 512 এর মতো আকার), গ্রেডিয়েন্ট ক্লিপিং (বিরতি 0.1-10) এবং ড্রপআউট (0.1-0.6 এর বিরতিতে) ফোকাস করব। অবশ্যই নির্দিষ্টকরণগুলি আপনার ডেটা এবং মডেল আর্কিটেকচারের উপর নির্ভর করে।


আপনি এম্বেডিং স্তরটি প্রতিস্থাপনের জন্য কী প্রস্তাব করবেন? আমি কেবল এমবেডিং স্তরটি সরিয়ে দেওয়ার চেষ্টা করেছি কিন্তু এটি কার্যকর হয় না।
ওয়াকাক্স

1
অন্যান্য উদাহরণগুলি দেখুন - শুরু করুন সরাসরি ঘন স্তর দিয়ে। ইনপুট_শ্যাপ প্যারামিটার সেট করতে মনে রাখবেন।
পীর

5

হাইপার প্যারামিটার অনুসন্ধানের জন্য আমি বায়েশিয়ান অপ্টিমাইজেশনের প্রস্তাব দেব এবং স্পিয়ারমিটের সাথে ভাল ফলাফল পেয়েছি। https://github.com/HIP/Spearmint বাণিজ্যিক ব্যবহারের জন্য আপনাকে পুরানো সংস্করণ ব্যবহার করতে হতে পারে।


2

আমি হাইপারপট ( https://github.com/hyperopt/hyperopt ) ব্যবহার করার পরামর্শ দেব , যা উদ্দেশ্য ফাংশন প্রদত্ত হাইপারপ্যারামিটারগুলির সর্বোত্তম মানের অনুসন্ধানের জন্য এক ধরণের বয়েসিয়ান অপটিমাইজেশন ব্যবহার করে। স্পিয়ারমিন্টের চেয়ে এটি ব্যবহার করা আরও স্বজ্ঞাত।

পিএস: কেরাস, হাইপারাসের জন্য হাইপারপট স্পিফিকালি একটি হাইপার্প্টের একটি মোড়ক রয়েছে ( https://github.com/maxpumperla/hyperas )। আপনি এটি ব্যবহার করতে পারেন।


2

তালোস হ'ল আপনি যা খুঁজছেন; কেরাস মডেলগুলির জন্য হাইপারপ্যারমিটার সংমিশ্রণগুলি অনুসন্ধানের জন্য একটি স্বয়ংক্রিয় সমাধান। আমি লেখক হিসাবে আমি উদ্দেশ্যমূলক হতে পারি না, তবে কেরাস কার্যকারিতা সম্পূর্ণরূপে প্রকাশ করার সময় সর্বনিম্ন সম্ভাব্য শিক্ষার বক্ররেখার সাথে বিকল্প সরবরাহ করার উদ্দেশ্য ছিল।

বিকল্প হিসাবে, এটি ইতিমধ্যে উল্লিখিত ছিল, আপনি হাইপ্রেস , বা তারপরে এস ক্লেয়ারন বা অটোকেরাসে সন্ধান করতে পারেন । আমার জানা মতে, লেখার সময় এই 4 টি বিশেষত কেরাস ব্যবহারকারীদের জন্য বিকল্প।

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