আমি বিষয় অনুসারে পাঠ্যকে শ্রেণীবদ্ধ করার জন্য একটি সিএনএন প্রশিক্ষণ দেওয়ার চেষ্টা করছি। আমি যখন বাইনারি ক্রস-এন্ট্রপি ব্যবহার করি আমি ক্লাস্টিকাল ক্রস-এনট্রপি সহ ~ 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'])
স্বজ্ঞাতভাবে এটি বোধগম্য হয় যে আমি কেন বিভাগীয় ক্রস-এন্ট্রপি ব্যবহার করতে চাই, কেন বাইনারি সহ ভাল ফলাফল পাচ্ছি এবং শ্রেণিবদ্ধ সহ খারাপ ফলাফল কেন তা আমি বুঝতে পারি না।
categorical_crossentropy
। আপনার যদি দুটি ক্লাস থাকে তবে সেগুলি 0, 1
বাইনারি লেবেল এবং 10, 01
শ্রেণিবদ্ধ লেবেল ফর্ম্যাট হিসাবে উপস্থাপিত হবে।
Dense(1, activation='softmax')
বাইনারি শ্রেণিবদ্ধকরণ জন্য সহজ ভুল। মনে রাখবেন সফটম্যাক্স আউটপুট হ'ল এটির সম্ভাব্য বন্টন। আপনি যদি বাইনারি শ্রেণিবদ্ধকরণের সাথে কেবল একটি আউটপুট নিউরন রাখতে চান তবে বাইনারি ক্রস-এন্ট্রপি সহ সিগময়েড ব্যবহার করুন।
categorical_crossentropy
। এছাড়াও লেবেলগুলিকে বিভাগীয় বিন্যাসে রূপান্তর করা দরকার। এটি করতে দেখুনto_categorical
। শ্রেণিবদ্ধ এবং বাইনারি ক্রসসেন্ট্রোপের সংজ্ঞা এখানেও দেখুন ।