স্পার্স_সোফটম্যাক্স_ক্রস_এন্ট্রপি_বিহীন_লগিটস এবং সফটম্যাক্স_ক্রস_এন্ট্রপী_ওথ_লগিটের মধ্যে পার্থক্য কী?


111

আমি সম্প্রতি জুড়ে এসেছিল tf.nn.sparse_softmax_cross_entropy_with_logits এবং আমি চিন্তা করতে পারে না কি পার্থক্য সাথে তুলনা করা হয় tf.nn.softmax_cross_entropy_with_logits

শুধু পার্থক্য প্রশিক্ষণ ভেক্টর এটা কি yহতে হবে এক-গরম এনকোডেড যখন ব্যবহার sparse_softmax_cross_entropy_with_logits?

এপিআই পড়ছি, আমি তুলনায় অন্য কোনও পার্থক্য খুঁজে পাইনি softmax_cross_entropy_with_logits। তবে কেন আমাদের তখন অতিরিক্ত ফাংশন দরকার?

এটি যদি এক-হট এনকোডড প্রশিক্ষণ ডেটা / ভেক্টরগুলির সাথে সরবরাহ করা হয় তবে softmax_cross_entropy_with_logitsএকই ফলাফলগুলি তৈরি করা উচিত নয় sparse_softmax_cross_entropy_with_logits?


1
আমি উভয় ব্যবহার করা যেতে পারে যদি তাদের পারফরম্যান্স একটি তুলনা দেখতে আগ্রহী (যেমন একচেটিয়া চিত্র লেবেল সহ); আমি আশা করি বিচ্ছুর সংস্করণটি আরও দক্ষ হবে, কমপক্ষে স্মৃতি ভিত্তিক।
ইইবো ইয়াং

1
আরও দেখুন এই প্রশ্নের , যা আলোচনা করা হয়েছে সব ক্রস এনট্রপি ফাংশন tensorflow মধ্যে (পালাক্রমে আউট তাদের প্রচুর আছে)।
ম্যাক্সিম

উত্তর:


175

দুটি ভিন্ন ফাংশন থাকা একটি সুবিধা , কারণ তারা একই ফলাফল দেয়।

পার্থক্যটি সহজ:

  • কারণ sparse_softmax_cross_entropy_with_logits, লেবেলে অবশ্যই [batch_size] আকৃতি এবং dtype int32 বা int64 থাকতে হবে। প্রতিটি লেবেল একটি পরিসীমা মধ্যে অন্তর্ভুক্ত [0, num_classes-1]
  • কারণ softmax_cross_entropy_with_logits, লেবেলগুলিতে অবশ্যই [batch_size, num_class] আকার এবং dtype float32 বা float64 থাকতে হবে।

লেবেলসমূহ ব্যবহৃত softmax_cross_entropy_with_logitsহয় এক গরম সংস্করণ ব্যবহার করা লেবেলের sparse_softmax_cross_entropy_with_logits

আরেকটি ছোট পার্থক্য এটি সঙ্গে sparse_softmax_cross_entropy_with_logits0 এই লেবেলে ক্ষতি হওয়ার জন্য আপনি লেবেল হিসাবে -1 দিতে পারেন ।


15
-1 সঠিক? ডকুমেন্টেশন যেমন পড়ে: "লেবেলে প্রতিটি প্রবেশ অবশ্যই [0, num_class) তে একটি সূচক হতে হবে Other এই অপটিটি সিপিইউতে চালিত হওয়ার সাথে সাথে অন্যান্য মানগুলি ব্যতিক্রম বাড়াতে পারে এবং জিপিইউতে সম্পর্কিত ক্ষতি এবং গ্রেডিয়েন্ট সারিগুলির জন্য এনএএন ফিরিয়ে দেয়" "
ব্যবহারকারী 1761806

1
[0, নাম_ক্ল্যাশস) = [0, num_class-1]
কার্তিক সি

24

আমি গ্রহণযোগ্য উত্তরে কেবল 2 টি জিনিস যুক্ত করতে চাই যা আপনি টিএফ ডকুমেন্টেশনেও পেতে পারেন।

প্রথম:

tf.nn.softmax_cross_entropy_with_logits

দ্রষ্টব্য: ক্লাসগুলি পারস্পরিক একচেটিয়া থাকলেও তাদের সম্ভাবনা থাকা দরকার না। যা প্রয়োজন তা হ'ল লেবেলের প্রতিটি সারি একটি বৈধ সম্ভাব্যতা বন্টন। যদি সেগুলি না হয় তবে গ্রেডিয়েন্টের গণনাটি ভুল হবে।

দ্বিতীয়ত:

tf.nn.sparse_softmax_cross_entropy_with_logits

দ্রষ্টব্য: এই ক্রিয়াকলাপের জন্য, প্রদত্ত লেবেলের সম্ভাব্যতাটিকে একচেটিয়া বিবেচনা করা হয়। এটি হ'ল নরম শ্রেণীর অনুমতি নেই এবং লেবেল ভেক্টরকে প্রতিটি শ্রেণির লগিজের জন্য প্রতিটি শ্রেণির জন্য প্রতিটি শ্রেণির জন্য নির্দিষ্ট শ্রেণীর একটি নির্দিষ্ট সূচক সরবরাহ করতে হবে।


4
ক্লাসগুলি পারস্পরিক একচেটিয়া না হলে আমাদের কী ব্যবহার করা উচিত। মানে আমরা যদি একাধিক শ্রেণিবদ্ধ লেবেল একত্রিত করছি?
হায়রো

আমিও এটি পড়েছি। সুতরাং এর অর্থ হ'ল আমরা ক্লাসের সম্ভাবনাটিকে ওয়ানহোট ভেক্টর হিসাবে গ্রহণ না করে ক্রস এনট্রপিতে প্রয়োগ করি।
শমনে সিরীবর্ধন

@ হাইরো - আপনি কি বোঝাতে চেয়েছেন যে আপনি একটি গরম এনকোডিং করতে অক্ষম? আমার মনে হয় আপনাকে অন্যরকম মডেলটি দেখতে হবে। এটি এমন কিছু উল্লেখ করেছে যেমন "4 বাইনারি লজিস্টিক রিগ্রেশন শ্রেণিবদ্ধকারীগুলি তৈরি করা আরও উপযুক্ত হবে" প্রথমে আপনি ক্লাসগুলি পৃথক করতে পারবেন তা নিশ্চিত করার জন্য।
অ্যাশলে

21

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

আপনি নিম্নলিখিত প্রোগ্রামটি চালিয়ে এটি যাচাই করতে পারেন:

import tensorflow as tf
from random import randint

dims = 8
pos  = randint(0, dims - 1)

logits = tf.random_uniform([dims], maxval=3, dtype=tf.float32)
labels = tf.one_hot(pos, dims)

res1 = tf.nn.softmax_cross_entropy_with_logits(       logits=logits, labels=labels)
res2 = tf.nn.sparse_softmax_cross_entropy_with_logits(logits=logits, labels=tf.constant(pos))

with tf.Session() as sess:
    a, b = sess.run([res1, res2])
    print a, b
    print a == b

এখানে আমি logitsদৈর্ঘ্যের এলোমেলো ভেক্টর তৈরি করেছি dimsএবং এক-হট এনকোডেড লেবেল তৈরি করি (যেখানে উপাদানটি pos1 হয় এবং অন্যরা 0 হয়)।

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

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