मेरा केरस मॉडल पृष्ठभूमि को पहचानना क्यों सीखता है?


9

मैं प्रेसेबल मॉडल (जो कि डेटासेट पर भी प्रशिक्षित किया गया था) का उपयोग करके पास्कल वीओसी २०१ पर देयरपलाव ३ + के इस केर कार्यान्वयन को प्रशिक्षित करने का प्रयास कर रहा हूं ।

मुझे सटीकता के साथ अजीब परिणाम मिले, जल्दी से 1.0 में परिवर्तित:

5/5 [==============================] - 182s 36s/step - loss: 26864.4418 - acc: 0.7669 - val_loss: 19385.8555 - val_acc: 0.4818
Epoch 2/3
5/5 [==============================] - 77s 15s/step - loss: 42117.3555 - acc: 0.9815 - val_loss: 69088.5469 - val_acc: 0.9948
Epoch 3/3
5/5 [==============================] - 78s 16s/step - loss: 45300.6992 - acc: 1.0000 - val_loss: 44569.9414 - val_acc: 1.0000

मॉडल का परीक्षण भी 100% सटीकता देता है।

मैंने प्रशिक्षण से पहले और बाद में यादृच्छिक छवियों के एक ही सेट पर भविष्यवाणियों को साजिश करने का फैसला किया, और पाया कि मॉडल को यह कहने के लिए प्रोत्साहित किया जाता है कि सब कुछ सिर्फ पृष्ठभूमि है (यह पास्कल वीओसी २०१ में प्रथम श्रेणी है)।

यहाँ छवि विवरण दर्ज करें

यहाँ छवि विवरण दर्ज करें

मैं गहरी सीखने के लिए काफी नया हूं और यह पता लगाने में मदद की आवश्यकता होगी कि यह कहां से आ सकता है।

मैंने सोचा कि शायद यह मेरा नुकसान कार्य हो सकता है, जिसे मैंने इस रूप में परिभाषित किया है:

def image_categorical_cross_entropy(y_true, y_pred):
    """
    :param y_true: tensor of shape (batch_size, height, width) representing the ground truth.
    :param y_pred: tensor of shape (batch_size, height, width) representing the prediction.
    :return: The mean cross-entropy on softmaxed tensors.
    """
    return tf.reduce_mean(tf.nn.softmax_cross_entropy_with_logits_v2(logits=y_pred, labels=y_true))

मैं इस बात पर थोड़ा अनिश्चित हूं कि मेरे टेंसरों का सही आकार है या नहीं। मैं .tfrecordफ़ाइलों को लोड करने के लिए TF के डेटासेट API का उपयोग कर रहा हूं , और मेरा एनोटेशन टेंसर आकार का है (batch_size, height, width)। क्या (batch_size, height, width, 21)जरूरत होगी? मॉडल के अंदर से अन्य त्रुटियां तब होती हैं जब मैं एनोटेशन इमेज को एक टेंसर में अलग करने की कोशिश करता हूं जिसमें 21 छवियां होती हैं (प्रत्येक वर्ग के लिए एक):

tensorflow.python.framework.errors_impl.InvalidArgumentError: Incompatible shapes: [12,512,512,21] vs. [12,512,512]
         [[Node: metrics/acc/Equal = Equal[T=DT_INT64, _device="/job:localhost/replica:0/task:0/device:GPU:0"](metrics/acc/ArgMax, metrics/acc/ArgMax_1)]]
         [[Node: training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1/_13277 = _Recv[client_terminated=false, recv_device="/job:localhost/replica:0/task:0/device:GPU:1", send_device="/job:localhost/replica:0/task:0/device:CPU:0", send_device_incarnation=1, tensor_name="edge_62151_training/Adam/gradients/bilinear_upsampling_2_1/concat_grad/Slice_1", tensor_type=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:GPU:1"]()]]

आपके सहयोग के लिए धन्यवाद!


5
यहाँ पर विचार करने के लिए कुछ वस्तुओं को छोड़ दें, मैं लगभग नहीं जानता कि कहाँ से शुरू करें (1) क्या आप प्रशिक्षण के लिए 5 का नमूना आकार उपयोग कर रहे हैं ??? (२) क्या, यदि कोई हो, पूर्व प्रसंस्करण आप अपनी छवियों के लिए कर रहे हैं? मुझे लगता है कि इसका उत्तर निहित है और (3) आपको अपने मॉडल पर बहुत अधिक जानकारी प्रदान करनी होगी। आपके पास कितने लेबल के नमूने हैं? कितनी संभव श्रेणियां? क्या आपके पास एक संतुलित प्रशिक्षण सेट है? (4) 1.0 की आपकी सटीकता का मूल रूप से कोई मतलब नहीं है क्योंकि आपका नुकसान सुपर-हाई और बढ़ती है। जैसे-जैसे आपकी सटीकता में सुधार होता है वैसे-वैसे आपका नुकसान कम होता जाना चाहिए ।
15

(1) मैं 12 आकार के बैचों का उपयोग कर रहा हूं लेकिन यह मेरे विचार से अप्रासंगिक है। मैंने केवल 5 चरणों के 3 छोटे युग यहां दिखाए क्योंकि यह बस कितनी जल्दी परिवर्तित होता है। (२) मेरी प्रीप्रोसेसिंग में प्रत्येक छवि और उससे जुड़े एनोटेशन के लिए कुछ वृद्धि और पुनरावर्तन (संभवतः क्रॉपिंग) से 512x512 होते हैं। (३) पास्कल वीओसी २०१२ में लगभग ११,५०० लेबल की छवियां हैं। इस डेटासेट पर अधिकांश कागजात +५% + mIOU तक पहुँच गए हैं, मुझे लगता है कि यह संतुलित होगा। इस डेटासेट में 20 अलग-अलग श्रेणियां हैं, जिनमें से एक पृष्ठभूमि या «अस्पष्ट» के लिए है, कुल 21 के लिए।
मैट

मैं उत्सुक हूं। क्या आपको अपने मॉडल के परिणामों का कारण मिला?
Mark.F

3
यदि आपने अपना कोड साझा किया, तो गलती का पता लगाना संभव होगा।
Dmytro Prylipko

1
तथ्य यह है कि एक पूर्व-प्रशिक्षित मॉडल 3 युगों के भीतर 100% सटीकता प्राप्त करने का एक तरीका ढूंढता है, समान डेटा का उपयोग मूल रूप से किया गया था, मुझे लगता है कि बग यह है कि आपके प्रशिक्षण लेबल गलत हैं, शायद उस लेबल पर सभी सेट होते हैं जो मेल खाती है पृष्ठभूमि के लिए। किसी भी मामले में, इस मुद्दे पर एक नज़र डालें , जहां लोग मॉडल को ठीक करने के लिए अपनी समस्याओं और समाधानों पर चर्चा करते हैं। मॉडल आवश्यक रूप से टूटा नहीं है, और टेंसरफ़्लो में बैटमॉर्म बग को संबोधित किया जा सकता है।
n1k31t4

जवाबों:


1

आपका मॉडल ओवरफिट हो रहा है। प्रत्येक युग में केवल 5 चित्र हैं। मॉडल प्रत्येक छवि के लिए उत्तर "याद" कर रहा है।

ओवरफिटिंग की संभावना को कम करने के लिए, छवियों की संख्या में वृद्धि करें। प्रत्येक श्रेणी की वस्तु के लिए कई हज़ार उदाहरण चित्र होने चाहिए।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.