কেরাসে স্ট্রিমিং টেস্ট ডেটা সম্পর্কে ভবিষ্যদ্বাণী_জেনেটরের সাথে পূর্বাভাস কীভাবে পাবেন?


16

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


1
আপনি জেনারেটরের সাথে মডেল.প্রেডিক্ট_জেনেটর (...) ফাংশনটিতে কল করতে পারেন যা পরীক্ষার সেট সম্বলিত ডিরেক্টরি থেকে ডেটা পাঠ করে। এটি পূর্বাভাসগুলি ফিরিয়ে দেয়, যা আপনি একটি বিভ্রান্তির ম্যাট্রিক্স গণনা করতে ব্যবহার করতে পারেন। আপনি কি এটি খুঁজছেন? দস্তাবেজের জন্য এখানে দেখুন: কেরাস.আইও
মডেল

1
হ্যাঁ, আমি এটি দেখেছি। পূর্বাভাস_জেনেটর পূর্বাভাসগুলির একটি তালিকা ফেরত দেয় যা 0 এবং 1 এর মধ্যে ভাসমান মানগুলির একটি তালিকা I আমি এটি কীভাবে ব্যাখ্যা করব? এটি কনফিউশন ম্যাট্রিক্সের সাথে সরাসরি ব্যবহার করা যায় না।
রঘুরাম

2
আমি এখনও পূর্বাভাস_ জেনারেটর চেষ্টা করি নি (এটি বরং নতুন) তবে এটি বর্গের সম্ভাবনাগুলি ফিরে আসবে বলে মনে হচ্ছে। মানগুলিকে <= 0.5 থেকে 0 এবং> 0.5 থেকে 1 রূপান্তর করার চেষ্টা করুন একবার 0 এবং 1 এর সমন্বয়ে আপনার একটি তালিকা তৈরি হয়ে গেলে আপনি বিভ্রান্তির ম্যাট্রিক্স গণনার জন্য এটি ফাংশনে ফিড করতে পারেন।
stmax

2
একদিকে যেমন, এটি দুটি বর্গ সমস্যার জন্য সূক্ষ্মভাবে কাজ করবে, তবে সেখানে যদি আরও দুটি শ্রেণি থাকে?
রঘুরাম

1
যদি আরও দুটি শ্রেণি থাকে তবে আপনার নেটওয়ার্কের একাধিক আউটপুট প্রয়োজন। এন ক্লাসগুলির জন্য আপনার এন আউটপুট রয়েছে এবং আপনি সবচেয়ে বেশি আউটপুট রয়েছে এমন শ্রেণীর পূর্বাভাস দিয়েছেন। Softmax ফাংশন (কটাক্ষপাত আছে en.wikipedia.org/wiki/Softmax_function )।
stmax

উত্তর:


15

পরীক্ষার ডেটা থেকে একটি বিভ্রান্তির ম্যাট্রিক্স পেতে আপনার দুটি পদক্ষেপ ছোঁড়া উচিত:

  1. পরীক্ষার ডেটার জন্য ভবিষ্যদ্বাণী করুন

উদাহরণস্বরূপ, model.predict_generatorপরীক্ষার জেনারেটর থেকে প্রথম 2000 সম্ভাব্যতার পূর্বাভাস দেওয়ার জন্য ব্যবহার করুন ।

generator = datagen.flow_from_directory(
        'data/test',
        target_size=(150, 150),
        batch_size=16,
        class_mode=None,  # only data, no labels
        shuffle=False)  # keep data in same order as labels

probabilities = model.predict_generator(generator, 2000)
  1. লেবেল পূর্বাভাসের উপর ভিত্তি করে কনফিউশন ম্যাট্রিক্স গণনা করুন

উদাহরণস্বরূপ, সম্ভাব্যতার সাথে তুলনা করুন যে যথাক্রমে 1000 বিড়াল এবং 1000 কুকুর রয়েছে case

from sklearn.metrics import confusion_matrix

y_true = np.array([0] * 1000 + [1] * 1000)
y_pred = probabilities > 0.5

confusion_matrix(y_true, y_pred)

পরীক্ষা এবং বৈধতা ডেটা উপর অতিরিক্ত নোট

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


2
কোড স্নিপেটের জন্য ধন্যবাদ। আপনি কি এই দুটি লিঙ্ক করতে পারেন? আপনার উদাহরণে y_true টি ডামি ডেটা সহ জনবহুল বলে মনে হচ্ছে। আপনি অ্যারে পপুলেট করার জন্য জেনারেটর.ক্ল্যাশগুলি ব্যবহার করবেন?
জেজেনওয়াইন্ড

আমি নিশ্চিত নই, তবে আমি মনে করি পরিবর্তে np.array([0] * 1000 + [1] * 1000)আপনি একই অ্যারেটি পেতে পারেনgenerator.classes
মেহেদি নেলেন

2

এখানে আমি চেষ্টা করেছি এবং আমার পক্ষে কাজ করেছি এমন কিছু কোড এখানে রয়েছে:

pred= model.predict_generator(validation_generator, nb_validation_samples // batch_size)
predicted_class_indices=np.argmax(pred,axis=1)
labels = (validation_generator.class_indices)
labels2 = dict((v,k) for k,v in labels.items())
predictions = [labels[k] for k in predicted_class_indices]
print(predicted_class_indices)
print (labels)
print (predictions)

তারপরে আপনি এটি ব্যবহার করতে পারেন:

print (confusion matrix(predicted_class_indices,labels)

নিশ্চিত হয়ে নিন যে আপনি shuffle=Falseআপনার পরীক্ষার জেনারেটরটি ব্যবহার করেছেন (আমার ক্ষেত্রে এটি বৈধতা জেনারেটর) এবং validation_generator.reset()আপনি পূর্বাভাস দেওয়ার আগে এটি ব্যবহার করে পুনরায় সেট করুন।


0

কনফিউশন ম্যাট্রিক্সের জন্য আপনাকে স্ক্লারন প্যাকেজ ব্যবহার করতে হবে। আমি মনে করি না কেরাস একটি বিভ্রান্তির ম্যাট্রিক্স সরবরাহ করতে পারে। পরীক্ষার সেটে মানগুলির পূর্বাভাস দেওয়ার জন্য, পরীক্ষার সেটটির জন্য ভবিষ্যদ্বাণী উত্পন্ন করতে কেবল মডেল.প্রডিক্ট () পদ্ধতিটি কল করুন। আউটপুট মানগুলির ধরণ আপনার মডেলের ধরণের উপর নির্ভর করে যেমন হয় বিচ্ছিন্ন বা সম্ভাব্য।


উত্তরের জন্য ধন্যবাদ. আমি জানি যে কেরার নিজস্ব বিভ্রান্তির ম্যাট্রিক্স প্যাকেজ নেই। আমার প্রশ্ন হ'ল মডেল.প্রেডিক্ট_জেনেটর ভাসমান মানগুলির একটি তালিকা ফেরত দেয় যা কনফিউশন ম্যাট্রিক্স গণনা করতে ব্যবহার করা যায় না।
রঘুরাম

আপনি কোন ধরণের ডেটা ব্যবহার করছেন?
এন্টারএমএল

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