বাইনারি_ক্রসনট্রপি এবং শ্রেণিবদ্ধ_ক্রস্রসট্রপি কেন একই সমস্যার জন্য বিভিন্ন পারফরম্যান্স দেয়?


159

আমি বিষয় অনুসারে পাঠ্যকে শ্রেণীবদ্ধ করার জন্য একটি সিএনএন প্রশিক্ষণ দেওয়ার চেষ্টা করছি। আমি যখন বাইনারি ক্রস-এন্ট্রপি ব্যবহার করি আমি ক্লাস্টিকাল ক্রস-এনট্রপি সহ ~ 80% নির্ভুলতা পাই। 50% নির্ভুলতা পাই।

আমি কেন বুঝতে পারছি না। এটি একটি মাল্টিক্লাস সমস্যা, এর অর্থ এই নয় যে আমাকে শ্রেণীবদ্ধ ক্রস-এনট্রপি ব্যবহার করতে হবে এবং বাইনারি ক্রস-এন্ট্রপি সহ ফলাফলগুলি অর্থহীন?

model.add(embedding_layer)
model.add(Dropout(0.25))
# convolution layers
model.add(Conv1D(nb_filter=32,
                    filter_length=4,
                    border_mode='valid',
                    activation='relu'))
model.add(MaxPooling1D(pool_length=2))
# dense layers
model.add(Flatten())
model.add(Dense(256))
model.add(Dropout(0.25))
model.add(Activation('relu'))
# output layer
model.add(Dense(len(class_id_index)))
model.add(Activation('softmax'))

তারপরে আমি এটি categorical_crossentropyক্ষতির ফাংশন হিসাবে এটি ব্যবহার করে এটি পছন্দ করে :

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

অথবা

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

স্বজ্ঞাতভাবে এটি বোধগম্য হয় যে আমি কেন বিভাগীয় ক্রস-এন্ট্রপি ব্যবহার করতে চাই, কেন বাইনারি সহ ভাল ফলাফল পাচ্ছি এবং শ্রেণিবদ্ধ সহ খারাপ ফলাফল কেন তা আমি বুঝতে পারি না।


10
যদি এটি কোনও মাল্টিক্লাস সমস্যা হয় তবে আপনাকে ব্যবহার করতে হবে categorical_crossentropy। এছাড়াও লেবেলগুলিকে বিভাগীয় বিন্যাসে রূপান্তর করা দরকার। এটি করতে দেখুন to_categorical। শ্রেণিবদ্ধ এবং বাইনারি ক্রসসেন্ট্রোপের সংজ্ঞা এখানেও দেখুন
স্বায়ত্তশাসিত

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

আমি তাই মনে করি. আপনি যদি শ্রেণিবদ্ধ লেবেলগুলি ব্যবহার করেন যেমন একটি গরম ভেক্টর, তবে আপনি চান categorical_crossentropy। আপনার যদি দুটি ক্লাস থাকে তবে সেগুলি 0, 1বাইনারি লেবেল এবং 10, 01শ্রেণিবদ্ধ লেবেল ফর্ম্যাট হিসাবে উপস্থাপিত হবে।
স্বায়ত্তশাসিত

1
আমি মনে করি তিনি কেবল ভেক্টরের প্রথম সংখ্যার সাথে তুলনা করেন এবং বাকী অংশগুলি উপেক্ষা করেন।
টমাস পিনেটজ

2
@ নীলাভবরণঘোষ উপস্থাপনাটি [[1, 0], [0, 1]] আপনার শ্রেণীর দুটি শ্রেণির ([[0, 0], [0, 1]] জড়িত) শ্রেণিবদ্ধের জন্য হবে [যেমনটি আপনি উল্লেখ করেছেন)। Dense(1, activation='softmax')বাইনারি শ্রেণিবদ্ধকরণ জন্য সহজ ভুল। মনে রাখবেন সফটম্যাক্স আউটপুট হ'ল এটির সম্ভাব্য বন্টন। আপনি যদি বাইনারি শ্রেণিবদ্ধকরণের সাথে কেবল একটি আউটপুট নিউরন রাখতে চান তবে বাইনারি ক্রস-এন্ট্রপি সহ সিগময়েড ব্যবহার করুন।
স্বায়ত্তশাসিত

উত্তর:


204

শ্রেণীবদ্ধ এবং বাইনারি ক্রস এন্ট্রপির মধ্যে এই আপাত পারফরম্যান্সের পার্থক্যের কারণ ব্যবহারকারী xtof54 ইতিমধ্যে নীচে তার উত্তরে রিপোর্ট করেছেন , যেমন:

evaluate2 টিরও বেশি লেবেল সহ বাইনারি_ক্রস্রসট্রপি ব্যবহার করার সময় কেরাস পদ্ধতির সাথে গণনা করা নির্ভুলতা কেবল সরল ভুল

আমি এ সম্পর্কে আরও বিস্তারিত জানাতে চাই, প্রকৃত অন্তর্নিহিত সমস্যাটি প্রদর্শন করব, এটি ব্যাখ্যা করব এবং এর প্রতিকারের প্রস্তাব দেব।

এই আচরণটি কোনও বাগ নয়; অন্তর্নিহিত কারণটি একটি বরং সূক্ষ্ম এবং অনির্ধারিত ইস্যু যেখানে আপনি কেবলমাত্র আপনার মডেল সংকলনে অন্তর্ভুক্ত করার সময় কেরাস কীভাবে যথাযথভাবে সঠিকভাবে ব্যবহার করবেন তা অনুমান করেন selected metrics=['accuracy']অন্য কথায়, যখন আপনার প্রথম সংকলন বিকল্প

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

আপনার দ্বিতীয়টি বৈধ,

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])

আপনি যা প্রত্যাশা করেছেন তা উত্পাদন করবে না, তবে কারণটি বাইনারি ক্রস এনট্রপি ব্যবহার নয় (যা অন্তত নীতিগতভাবে একেবারে বৈধ ক্ষতির কাজ)।

তা কেন? আপনি যদি মেট্রিক্স সোর্স কোডটি পরীক্ষা করেন তবে কেরাস একটি একক নির্ভুলতার মেট্রিকের সংজ্ঞা দেয় না, তবে তাদের মধ্যে binary_accuracyএবং বেশ কয়েকটি বিভিন্ন রয়েছে categorical_accuracyহুডের নীচে যা ঘটে তা হ'ল, যেহেতু আপনি বাইনারি ক্রস এনট্রপিকে আপনার ক্ষতির ফাংশন হিসাবে বেছে নিয়েছেন এবং নির্দিষ্ট কোনও নির্ভুলতা মেট্রিক নির্দিষ্ট করেন নি, কেরাস (ভুলভাবে ...) যে ইনফ্রেরিতে আপনার আগ্রহী binary_accuracy, এবং এটিই ফিরে আসে - বাস্তবে আপনি আগ্রহী categorical_accuracy

নীচের সংশোধন সহ কেরাসে এমএনআইএসটি সিএনএন উদাহরণ ব্যবহার করে যাচাই করা যাক the

model.compile(loss='binary_crossentropy', optimizer='adam', metrics=['accuracy'])  # WRONG way

model.fit(x_train, y_train,
          batch_size=batch_size,
          epochs=2,  # only 2 epochs, for demonstration purposes
          verbose=1,
          validation_data=(x_test, y_test))

# Keras reported accuracy:
score = model.evaluate(x_test, y_test, verbose=0) 
score[1]
# 0.9975801164627075

# Actual accuracy calculated manually:
import numpy as np
y_pred = model.predict(x_test)
acc = sum([np.argmax(y_test[i])==np.argmax(y_pred[i]) for i in range(10000)])/10000
acc
# 0.98780000000000001

score[1]==acc
# False    

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

from keras.metrics import categorical_accuracy
model.compile(loss='binary_crossentropy', optimizer='adam', metrics=[categorical_accuracy])

এমএনআইএসটি উদাহরণে, উপরে যেমন দেখানো হয়েছে প্রশিক্ষণ, স্কোরিং এবং পরীক্ষার পূর্বাভাস দেওয়ার পরে, দুটি মেট্রিক এখন তাদের মতো হওয়া উচিত:

# Keras reported accuracy:
score = model.evaluate(x_test, y_test, verbose=0) 
score[1]
# 0.98580000000000001

# Actual accuracy calculated manually:
y_pred = model.predict(x_test)
acc = sum([np.argmax(y_test[i])==np.argmax(y_pred[i]) for i in range(10000)])/10000
acc
# 0.98580000000000001

score[1]==acc
# True    

সিস্টেম সেটআপ:

Python version 3.5.3
Tensorflow version 1.2.1
Keras version 2.0.4

আপডেট : আমার পোস্টের পরে, আমি আবিষ্কার করেছি যে এই উত্তরটি ইতিমধ্যে এই সমস্যাটি চিহ্নিত করা হয়েছিল ।


1
loss='categorical_crossentropy', metrics=['categorical_accuracy']মাল্টিক্লাস শ্রেণিবদ্ধকরণের জন্য কিছু ভুল আছে ? এটি আমার
স্বজ্ঞাততা

2
@ নিউস্ট্যাক কেবলমাত্র কোনও ভুল নেই, তবে এটি নামমাত্র সংমিশ্রণ।
মরুভূমি 15

1
আপনি যা বলেছেন তাই অনুসারে যতক্ষণ আমি ক্ষতির = 'বাইনারি_ক্রসনট্রপি' ব্যবহার করি, ততক্ষণ আমি একই পরিমাণে মেট্রিক = 'বাইনারি_অ্যাকিউরেসি' বা মেট্রিক = 'নির্ভুলতা' ব্যবহার করি না
বায়ো কোডার

2
@ বায়ো কোডার হুবহু
মরুভূমি

54

এগুলি সবই নির্ভর করে আপনি যে ধরণের শ্রেণিবিন্যাস সমস্যাটি নিয়ে কাজ করছেন তার উপর। তিনটি প্রধান বিভাগ রয়েছে

  • বাইনারি শ্রেণিবদ্ধকরণ (দুটি লক্ষ্য শ্রেণি),
  • মাল্টি-ক্লাসের শ্রেণিবিন্যাস (দুইটির বেশি একচেটিয়া লক্ষ্যমাত্রা),
  • মাল্টি-লেবেল শ্রেণিবদ্ধকরণ (দুটির চেয়ে বেশি অবিচ্ছিন্ন লক্ষ্যমাত্রা), যাতে একসাথে একাধিক লক্ষ্য শ্রেণি চালু হতে পারে।

প্রথম ক্ষেত্রে, বাইনারি ক্রস-এনট্রপি ব্যবহার করা উচিত এবং লক্ষ্যগুলি এক-হট ভেক্টর হিসাবে এনকোড করা উচিত।

দ্বিতীয় ক্ষেত্রে, বিভাগীয় ক্রস-এনট্রপি ব্যবহার করা উচিত এবং লক্ষ্যগুলি এক-হট ভেক্টর হিসাবে এনকোড করা উচিত।

শেষ ক্ষেত্রে, বাইনারি ক্রস-এনট্রপি ব্যবহার করা উচিত এবং লক্ষ্যগুলি এক-হট ভেক্টর হিসাবে এনকোড করা উচিত। প্রতিটি আউটপুট নিউরন (বা ইউনিট) পৃথক র্যান্ডম বাইনারি ভেরিয়েবল হিসাবে বিবেচিত হয় এবং আউটপুটগুলির সম্পূর্ণ ভেক্টরের ক্ষতি হ'ল একক বাইনারি ভেরিয়েবলের ক্ষতির ফলস্বরূপ। সুতরাং এটি প্রতিটি একক আউটপুট ইউনিটের বাইনারি ক্রস-এনট্রপির পণ্য।

বাইনারি ক্রস-এনট্রপি হিসাবে সংজ্ঞায়িত করা হয়

এখানে চিত্র বর্ণনা লিখুন

এবং বিভাগীয় ক্রস-এনট্রপি হিসাবে সংজ্ঞায়িত করা হয়

এখানে চিত্র বর্ণনা লিখুন

যেখানে cক্লাসের সংখ্যার উপরে সূচক চলছে


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

@ মেটাল 3 ডি: আপনার সমস্যার গঠন কী: মাল্টি-লেবেল বা একক-লেবেল?
Whynote

একক লেবেল, এবং এখন বুঝতে পারছি কেন এটি আরও ভাল কাজ করে :)
ধাতব

আপনি কি নিশ্চিত যে বাইনারি এবং বিভাগীয় ক্রস-এন্ট্রপিজগুলি এই উত্তরের সূত্রগুলির হিসাবে সংজ্ঞায়িত হয়েছে?
এনবিরো

@ এনব্রো, আসলে, cসূচকটি বাইনারি ক্রস-এন্ট্রপি সূত্রে অপ্রয়োজনীয়, এটির দরকার নেই (যেহেতু কেবলমাত্র 2 টি শ্রেণি রয়েছে এবং প্রতিটি শ্রেণীর সম্ভাবনা এম্বেড করা আছে y(x)Otherwise অন্যথায় এই সূত্রগুলি সঠিক হওয়া উচিত, তবে সেই নয় লোকসান লক্ষ্য, ঐ likelihoods আপনি ক্ষতি চান তাহলে আপনাকে গ্রহণ করতে হবে। logএই।
Whynote

40

আমি একটি "ইনভার্টেড" ইস্যুটি পেরিয়ে এসেছি - আমি শ্রেণিবদ্ধ_ক্রোসেন্টরোপি (2 শ্রেণি সহ) এবং বাইনারি_ক্রসসেন্টরোপি সহ দরিদ্রের ভাল ফলাফল পাচ্ছি। দেখে মনে হচ্ছে ভুল অ্যাক্টিভেশন ফাংশন নিয়ে সমস্যা ছিল। সঠিক সেটিংসটি ছিল:

  • এর জন্য binary_crossentropy: সিগময়েড অ্যাক্টিভেশন, স্কেলার লক্ষ্য
  • জন্য categorical_crossentropy: সফটম্যাক্স অ্যাক্টিভেশন, এক-হট এনকোড লক্ষ্য

4
আপনি কি বাইনারি_ক্রসোনট্রপির জন্য স্কেলার লক্ষ্য সম্পর্কে নিশ্চিত? দেখে মনে হচ্ছে আপনার "বহু-হট" এনকোডযুক্ত লক্ষ্য ব্যবহার করা উচিত (উদাঃ [0 1 0 0 1 1])।
দিমিত্রি

5
অবশ্যই। Keras.io/losses/#usage-of-loss-function দেখুন , এতে বলা হয়েছে: "শ্রেণীবদ্ধ_ক্রসেন্ট্রপি ক্ষতি ব্যবহার করার সময়, আপনার লক্ষ্যগুলি শ্রেণীবদ্ধ বিন্যাসে হওয়া উচিত (যেমন আপনার 10 টি শ্রেণি থাকে, প্রতিটি নমুনার জন্য লক্ষ্য 10 হওয়া উচিত) -মাত্রিক ভেক্টর যা অল-জিরো নমুনার শ্রেণির সাথে
সূচকগুলিতে

1
তবে আমরা বাইনারি_ক্রোসেন্টরোপি সম্পর্কে কথা বলছি - শ্রেণিবদ্ধ_ক্রসসেন্টরোপি নয়।
দিমিত্রি

এই উত্তরটি স্ট্যাকওভারফ্লো.com / a / 49175655 / 3924118 এর সাথে অসঙ্গত বলে মনে হচ্ছে , যেখানে লেখক বলেছেন যে লক্ষ্যগুলি এক-হট এনকোড করা উচিত, যখন আপনার উত্তরে আপনি পরামর্শ দেন যে সেগুলি স্কেলার হওয়া উচিত। আপনি এই স্পষ্ট করা উচিত।
এনবিরো

@ আলেকজান্ডারস্বেটকিন, টার্গেটটি সর্বত্র এক-গরম এনকোড করা উচিত, কেবল
শ্রেণিকোণ

28

এটা সত্যিই আকর্ষণীয় কেস। আসলে আপনার সেটআপে নিম্নলিখিত বিবৃতিটি সত্য:

binary_crossentropy = len(class_id_index) * categorical_crossentropy

এর অর্থ হ'ল ধ্রুবক গুণক ফ্যাক্টর পর্যন্ত আপনার ক্ষতির পরিমাণ সমান। প্রশিক্ষণ পর্বের সময় আপনি যে অদ্ভুত আচরণটি পর্যবেক্ষণ করছেন তা নিম্নলিখিত ঘটনাটির উদাহরণ হতে পারে:

  1. শুরুতে সর্বাধিক ঘন ঘন শ্রেণীর লোকসানটি কাটিয়ে ওঠে - সুতরাং নেটওয়ার্ক প্রতিটি উদাহরণের জন্য বেশিরভাগ ক্ষেত্রে এই শ্রেণীর পূর্বাভাস দিতে শিখছে।
  2. এটি সবচেয়ে ঘন ঘন ধাঁচটি শিখার পরে এটি কম ঘন ঘন শ্রেণীর মধ্যে বৈষম্য শুরু করে। তবে আপনি যখন ব্যবহার করছেন adam- প্রশিক্ষণের শুরুতে শিক্ষার হারের চেয়ে অনেক কম মূল্য ছিল (এটি এই অপটিমাইজারের প্রকৃতির কারণে)। এটি প্রশিক্ষণকে ধীর করে দেয় এবং আপনার নেটওয়ার্ককে বাধা দেয় যেমন দরিদ্র স্থানীয়কে সর্বনিম্ন কম রেখে দেওয়া।

এই কারণেই এই ধ্রুবক ফ্যাক্টরটি ক্ষেত্রে সহায়তা করতে পারে binary_crossentropy। বহু যুগের পরে - শিক্ষার হারের মান ক্ষেত্রে এর চেয়ে বেশি categorical_crossentropy। আমি যখন নিম্নলিখিত আচরণ ব্যবহার করে বা / এবং শ্রেণীর ওজন সামঞ্জস্য করি তখন আমি সাধারণত কয়েকবার প্রশিক্ষণ পুনরায় চালু করি (এবং শেখার পর্ব))

class_weight = 1 / class_frequency

প্রশিক্ষণের শুরুতে এবং একটি অপ্টিমাইজেশন প্রক্রিয়াটির আরও একটি অংশে একটি প্রভাবশালী শ্রেণীর ক্ষতির প্রভাবকে ভারসাম্যপূর্ণ করে তুলনামূলকভাবে কম ঘন ঘন শ্রেণীর ক্ষতি হয়।

সম্পাদনা করুন:

প্রকৃতপক্ষে - আমি এটি পরীক্ষা করেছিলাম যদিও গণিতের ক্ষেত্রেও:

binary_crossentropy = len(class_id_index) * categorical_crossentropy

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


আমার উত্তর কি আপনাকে সাহায্য করেছে?
মার্সিন মোয়েজকো

1
এটি একটি খুব প্রশংসনীয় ব্যাখ্যা। তবে আমি নিশ্চিত নই যে এটি আসলেই মূল কারণ। কারণ আমি ক্যাট-এক্স-এনটি-এর পরিবর্তে বাইনারি-এক্স-এনটি প্রয়োগ করার সময় আমার বেশিরভাগ শিক্ষার্থী এই বিদ্বেষপূর্ণ আচরণটি দেখেছি (যা একটি ভুল)। এবং এটি সত্য যখন মাত্র 2 যুগের প্রশিক্ষণ দেওয়া হয়! বিপরীতমুখী প্রিজিয়ারদের সাথে ক্লাস ওয়েট ব্যবহার করা কোনও লাভ হয়নি। শেখার হারের কঠোর সুর হতে পারে তবে ডিফল্ট মানগুলি বিন-এক্স-এনটকে সমর্থন করে বলে মনে হচ্ছে। আমি মনে করি এই প্রশ্নটি আরও তদন্তের দাবিদার ...
xtof54

1
অপেক্ষা করুন, দুঃখিত না, আমি আপনার আপডেটটি পাই না: সফটম্যাক্স সর্বদা আউটপুটগুলিকে 1 এর সমষ্টি করে, তাই আমরা কি তার যত্ন নিই না? এবং কেন এই ক্ষতি প্রশিক্ষণ হবে, যতক্ষণ না আমাদের কাছে কেবলমাত্র একক সোনার শ্রেণি রয়েছে যা উদাহরণস্বরূপ সঠিক?
xtof54

20

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

আমি দেখা গেছে যে উত্তর আসলে খুব সহজ: সঠিকতা Keras পদ্ধতি সঙ্গে নির্ণিত evaluateশুধু সাধারণ ভুল যখন অধিক 2 লেবেল সহ binary_crossentropy ব্যবহার করে। আপনি নিজেই নির্ভুলতার পুনর্নির্মাণের মাধ্যমে এটি পরীক্ষা করতে পারেন (প্রথমে কেরাস পদ্ধতিটিকে "পূর্বাভাস" বলুন এবং তারপরে পূর্বাভাস দিয়ে ফিরে আসা সঠিক উত্তরের সংখ্যা গণনা করুন): আপনি সঠিক নির্ভুলতা পাবেন যা কেরাস "মূল্যায়ন" এর চেয়ে অনেক কম।


1
প্রথম পুনরাবৃত্তির ক্ষেত্রেও আমি একইরকম আচরণ দেখেছি।
ডলবি

10

উদাহরণস্বরূপ বহু-শ্রেণীর সেটিংয়ের নীচে একটি সাধারণ উদাহরণ

ধরুন আপনার 4 টি ক্লাস রয়েছে (একহোট এনকোডড) এবং নীচে কেবলমাত্র একটি পূর্বাভাস

সত্য_লবেল = [0,1,0,0] পূর্বাভাস_লবেল = [0,0,1,0]

শ্রেণীবদ্ধ_ক্রসেসট্রপি ব্যবহার করার সময় নির্ভুলতাটি কেবল 0, আপনি যদি সম্পর্কিত শ্রেণিটি সঠিকভাবে পান তবে এটি কেবল যত্নশীল।

তবে বাইনারি_ক্রসোনট্রপি ব্যবহার করার সময়, যথার্থতাটি সমস্ত শ্রেণীর জন্য গণনা করা হয়, এই পূর্বাভাসের জন্য এটি 50% হবে। এবং চূড়ান্ত ফলাফল উভয় ক্ষেত্রে স্বতন্ত্র যথাযথতার মাধ্যম হবে।

মাল্টি-ক্লাস (ক্লাস পারস্পরিক একচেটিয়া) সমস্যার জন্য কিন্তু মাল্টি-লেবেল সমস্যার জন্য বাইনারি_ক্রস্রসনট্রপির জন্য শ্রেণীবদ্ধ_ক্রোসেন্টরোপি ব্যবহার করার পরামর্শ দেওয়া হয়।


8

এটি একটি বহু-শ্রেণীর সমস্যা হিসাবে, আপনাকে বিভাগ_ক্রসেসট্রপি ব্যবহার করতে হবে, বাইনারি ক্রস এনট্রপি বোগাস ফলাফল আনবে, সম্ভবত সম্ভবত কেবল প্রথম দুটি শ্রেণীর মূল্যায়ন করবে।

ক্লাসের সংখ্যার উপর নির্ভর করে একটি বহু-শ্রেণীর সমস্যার জন্য 50% যথেষ্ট ভাল হতে পারে। আপনার যদি এন ক্লাস থাকে তবে 100 / n হল ন্যূনতম পারফরম্যান্স যা আপনি এলোমেলো ক্লাসের আউটপুট করে পেতে পারেন।


2

ক্ষয়টি ব্যবহার করার সময় categorical_crossentropy, আপনার লক্ষ্যগুলি শ্রেণীবদ্ধ বিন্যাসে হওয়া উচিত (উদাহরণস্বরূপ যদি আপনার 10 টি ক্লাস থাকে তবে প্রতিটি নমুনার লক্ষ্যমাত্রা 10-মাত্রিক ভেক্টর হওয়া উচিত যা সূচক 1 এর বাদে সমস্ত শ্রেণীর সাথে শ্রেণীর সাথে সম্পর্কিত হবে) নমুনা)।


3
কিভাবে এই প্রশ্নের উত্তর দেয়?
মরুভূমি

2

সমীকরণটি একবার দেখুন আপনি দেখতে পাবেন যে বাইনারি ক্রস এনট্রপি কেবলমাত্র সেই লেবেল = 1, পূর্বাভাসিত = 0, কিন্তু লেবেল = 0, পূর্বাভাস = 1 শাস্তি দেয় না।

তবে বিভাগীয় ক্রস এনট্রপি কেবলমাত্র সেই লেবেলগুলিকেই শাস্তি দেয় = 1 তবে পূর্বাভাস = 1. এটি কেন আমরা অনুমান করি যে কেবলমাত্র একটি লেবেল ইতিবাচক আছে।


1

ক্ষতির হিসাবে ব্যবহার করার সময় আপনি আকারের একটি লক্ষ্য অ্যারে (এক্স-মিম, ওয়াই-মিম) পাস করছেন categorical_crossentropycategorical_crossentropyলক্ষ্যবস্তু বাইনারি ম্যাট্রিকেস (1s এবং 0s) আকারের (নমুনা, ক্লাস) হওয়ার প্রত্যাশা করে। যদি আপনার লক্ষ্যগুলি পূর্ণসংখ্যা শ্রেণি হয় তবে আপনি এগুলি দ্বারা প্রত্যাশিত বিন্যাসে রূপান্তর করতে পারেন:

from keras.utils import to_categorical
y_binary = to_categorical(y_int)

বিকল্পভাবে, আপনি sparse_categorical_crossentropyপরিবর্তে ক্ষতির ফাংশনটি ব্যবহার করতে পারেন, এটি পূর্ণসংখ্যার লক্ষ্যগুলি প্রত্যাশা করে।

model.compile(loss='sparse_categorical_crossentropy', optimizer='adam', metrics=['accuracy'])

0

বাইনারি_ক্রসেসট্রপি (y_target, y_predict) বাইনারি শ্রেণিবদ্ধকরণ সমস্যায় প্রয়োগ করার প্রয়োজন নেই। ।

এর সোর্স কোডে binary_crossentropy () , nn.sigmoid_cross_entropy_with_logits(labels=target, logits=output)TensorFlow ফাংশন আসলে ব্যবহার করা হয়েছে। এবং, ডকুমেন্টেশনে এটি বলে যে:

বিযুক্ত শ্রেণিবদ্ধকরণ কার্যগুলিতে সম্ভাব্যতা ত্রুটি পরিমাপ করে যাতে প্রতিটি শ্রেণি স্বতন্ত্র এবং পারস্পরিক একচেটিয়া নয়। উদাহরণস্বরূপ, কেউ একাধিক লেবেল শ্রেণিবদ্ধকরণ করতে পারে যেখানে ছবিতে একই সাথে একটি হাতি এবং একটি কুকুর উভয়ই থাকতে পারে।

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