সিএনএন আর্কিটেকচার রিগ্রেশন?


32

আমি একটি রিগ্রেশন সমস্যা নিয়ে কাজ করছি যেখানে ইনপুটটি একটি চিত্র এবং লেবেলটি 80 এবং 350 এর মধ্যে একটি অবিচ্ছিন্ন মান। ছবিগুলি প্রতিক্রিয়া হওয়ার পরে কিছু রাসায়নিকের are যে রঙটি বেরিয়ে আসে তা অন্য রাসায়নিকের ঘনত্বকে বোঝায় যা ছেড়ে গেছে এবং সেই মডেলের আউটপুট - সেই রাসায়নিকের ঘনত্ব। চিত্রগুলি ঘোরানো, উল্টানো, মিরর করা যেতে পারে এবং প্রত্যাশিত আউটপুটটি এখনও একই রকম হওয়া উচিত। এই ধরণের বিশ্লেষণটি বাস্তব ল্যাবগুলিতে করা হয় (খুব বিশেষ মেশিনগুলি রঙ বিশ্লেষণ ব্যবহার করে রাসায়নিকগুলির ঘনত্বকে আউটপুট দেয় ঠিক যেমন আমি এই মডেলটি করতে প্রশিক্ষণ দিচ্ছি)।

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

ডেটাসেটটি এরকম দেখাচ্ছে:

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

ডেটাসেটে প্রায় 5,000 250x250 টি নমুনা রয়েছে, যা আমি x৪x৪৪ এ পরিবর্তন করেছি যাতে প্রশিক্ষণ সহজ হয় easier একবার আমি একটি প্রতিশ্রুতিবদ্ধ আর্কিটেকচারটি খুঁজে পেয়েছি, আমি আরও বড় রেজোলিউশন ইমেজ নিয়ে পরীক্ষা করব।

এখনও অবধি, আমার সেরা মডেলগুলির প্রায় 0.3 এর প্রশিক্ষণ এবং বৈধতা উভয় সেটগুলিতে একটি গড় স্কোয়ার ত্রুটি রয়েছে, যা আমার ব্যবহারের ক্ষেত্রে গ্রহণযোগ্য নয়।

আমার সেরা মডেলটি এখনও অবধি এমন দেখাচ্ছে:

// pseudo code
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=32, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=64, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = conv2d(x, filters=128, kernel=[3,3])->batch_norm()->relu()
x = maxpool(x, size=[2,2], stride=[2,2])

x = dropout()->conv2d(x, filters=128, kernel=[1, 1])->batch_norm()->relu()
x = dropout()->conv2d(x, filters=32, kernel=[1, 1])->batch_norm()->relu()

y = dense(x, units=1)

// loss = mean_squared_error(y, labels)

প্রশ্ন

একটি চিত্র ইনপুট থেকে রিগ্রেশন আউটপুট জন্য উপযুক্ত স্থাপত্য কি?

সম্পাদন করা

আমি আমার ব্যাখ্যাটি পুনরায় চাপিয়ে দিয়েছি এবং নির্ভুলতার উল্লেখগুলি মুছে ফেলেছি।

সম্পাদনা 2

আমি আমার প্রশ্নের পুনর্গঠন করেছি তাই আশা করি এটি পরিষ্কার হয়ে গেছে আমি কী করছি


4
নির্ভুলতা এমন কোনও পরিমাপ নয় যা প্রত্যক্ষ সমস্যার ক্ষেত্রে সরাসরি প্রয়োগ করা যেতে পারে। আপনি যখন আপনার নির্ভুলতা 30% বলেছেন তখন আপনার অর্থ কী? যথার্থতা কেবলমাত্র শ্রেণিবিন্যাসের ক্ষেত্রে প্রযোজ্য, রিগ্রেশন নয়।
নিউক্লিয়ার ওয়াং

1
"সময়ের 30% সঠিকভাবে ভবিষ্যদ্বাণী করা" বলতে কী বোঝ ? আপনি কি সত্যিই রিগ্রেশন করছেন?
ফায়ারব্যাগ

1
আপনি কেন এই সমস্যাটিকে রিগ্রেশন বলছেন? আপনি কি লেবেলে শ্রেণিবদ্ধ হওয়ার চেষ্টা করছেন না? লেবেলগুলি কি কার্ডিনাল?
আকসকল

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

1
y[80,350]θy

উত্তর:


42

সবার আগে সাধারণ পরামর্শ: আপনি যে বিষয়ে পরিচিত নন সে বিষয়ে পরীক্ষা-নিরীক্ষা শুরু করার আগে সাহিত্য অনুসন্ধান করুন। আপনি নিজেকে অনেক সময় বাঁচাতে পারবেন।

এই ক্ষেত্রে, বিদ্যমান কাগজপত্রগুলি খুঁজছেন আপনি এটি লক্ষ্য করতে পারেন

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

    আমরা অনুবাদগুলি ব্যবহার করি (চিত্রের প্রস্থের 5% অবধি), পরিসীমাটিতে উজ্জ্বলতা সমন্বয় [−0.2, 0.2], γ ∈ [−0.5, 0.1] এর সাথে গামা অ্যাডজাস্টমেন্ট এবং পরিসরের মানক বিচ্যুতি নিয়ে গাউস পিক্সেল শব্দ [0 , 0.02]।

    k এই ধরণের পরীক্ষাগুলির জন্য ভাঁজ ক্রস-বৈধতা ব্যবহার করা উচিত, এবং আপনি যদি আপনার সেটআপটি সংজ্ঞায়িত না করেন, তবে পরীক্ষার সেটটির দিকে তাকাবেন না, যদি আপনি চান পরীক্ষার সেট ক্ষতি লোকের প্রতিনিধি হতে চান সাধারণীকরণ ত্রুটি

    yxα=atan2(y,x) । নিউরাল নেটওয়ার্কটি ইমেজনেটেও পূর্বনির্ধারিত ছিল (এটিকে ট্রান্সফার লার্নিং বলা হয়)>11%[180°,90°],[90°,0°],[0°,90°][90°,180°][45°,45°]

    2.6%

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

তারপরে, বাস্তবের ০.০ এর চেয়ে আরও ভাল কী করছে? আমাদের প্রথমে ০.৩ গড় ক্ষতি বলতে কী বোঝাতে হবে তা অবশ্যই আমাদের প্রথমে বুঝতে হবে। আপনি কি বলতে চাইছেন যে আরএমএসই ত্রুটি 0.3,

1Ni=1N(h(xi)yi)2

NN<5000h(xi)xiyiyi[80,350]0.12%

এছাড়াও, কেবল আপনার নেটওয়ার্কে প্যারামিটারের সংখ্যা গণনা করার চেষ্টা করুন: আমি তাড়াহুড়ো করছি এবং আমি বোকামি ভুল করছি, তাই summaryআপনি যে ফ্রেমওয়ার্কটি ব্যবহার করছেন তা থেকে কোনও ফাংশন দিয়ে আমার গণনাগুলি ডাবল পরীক্ষা করে দেখুন। তবে মোটামুটিভাবে আমি বলব আপনার আছে

9×(3×32+2×32×32+32×64+2×64×64+64×128+2×128×128)+128×128+128×32+32×32×32=533344

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

  • সমস্ত ইনপুটগুলিকে স্বাভাবিক করুন (উদাহরণস্বরূপ, -1 এবং 1 এর মধ্যে প্রতিটি পিক্সেলের আরজিবি তীব্রতা পুনরুদ্ধার করুন, বা মানককরণ ব্যবহার করুন) এবং সমস্ত আউটপুট। আপনার যদি কনভার্জেশন সংক্রান্ত সমস্যা থাকে তবে এটি বিশেষত সহায়তা করবে।
  • y
  • ডেটা বর্ধন: যেহেতু আপনি বলেছিলেন যে উল্টানো, একটি নির্বিচারে কোণ দ্বারা ঘোরানো বা আপনার চিত্রগুলিকে আয়নাঙ্কণের ফলে একই ফলাফল পাওয়া উচিত, তাই আপনি আপনার ডেটা সেটের আকার বাড়াতে পারবেন অনেক । মনে রাখবেন যে বড় ডেটাসেটের সাথে প্রশিক্ষণ সেটে ত্রুটিটি উঠে যাবে: আমরা এখানে যা খুঁজছি তা প্রশিক্ষণ সেট ক্ষতি এবং পরীক্ষার সেট ক্ষতি হ্রাসের মধ্যে একটি ছোট ব্যবধান। এছাড়াও, যদি প্রশিক্ষণের সেট ক্ষতি অনেক বেড়ে যায়, তবে এটি সুসংবাদ হতে পারে: এর অর্থ হ'ল আপনি ওভারফিটিংয়ের ঝুঁকি ছাড়াই এই বৃহত প্রশিক্ষণের সেটটিতে একটি গভীর নেটওয়ার্ক প্রশিক্ষণ দিতে পারেন। আরও স্তর যুক্ত করার চেষ্টা করুন এবং দেখুন এখন আপনি যদি একটি ছোট প্রশিক্ষণ সেট এবং পরীক্ষার সেট ক্ষতি পান। অবশেষে, আপনি উপরে উল্লিখিত অন্যান্য ডেটা বৃদ্ধির কৌশলগুলিও চেষ্টা করে দেখতে পারেন, যদি তারা আপনার আবেদনের প্রসঙ্গে বিবেচনা করে থাকে।
  • y[80,97],[97,124][0,27]
  • একটি মেশিনের পরিবর্তে একটি আধুনিক আর্কিটেকচার (ইনসেপশন বা রেসনেট) ব্যবহার করার চেষ্টা করুন। রেজিননেটের ভিজিজি-নেট থেকে আসলে কম পরামিতি রয়েছে। অবশ্যই, আপনি এখানে ছোট রেসনেটগুলি ব্যবহার করতে চান - আমি মনে করি না যে ResNet-101 কোনও 5000 চিত্রের ডেটা সেটটিতে সহায়তা করতে পারে। আপনি ডেটা সেট অনেক বৃদ্ধি করতে পারেন, যদিও ....
  • যেহেতু আপনার আউটপুটটি আবর্তনের পক্ষে অবিচ্ছিন্ন, তাই অন্য একটি দুর্দান্ত ধারণাটি ব্যবহার করা হবে পক্ষে অবিচ্ছিন্ন হ'ল গ্রুপ সমতুল্য সিএনএন , যার আউটপুট (যখন শ্রেণিবদ্ধ হিসাবে ব্যবহৃত হয়) বিবর্তন ঘূর্ণন, বা স্টিরিবেল সিএনএন ব্যবহার করতে পারেযার আউটপুট অবিচ্ছিন্ন ঘূর্ণনের পক্ষে অবিচ্ছিন্ন। অদম্য সম্পত্তি আপনাকে খুব কম ডেটা বৃদ্ধির সাথে ভাল ফলাফল পাওয়ার অনুমতি দেয়, বা আদর্শভাবে মোটেও কিছুই হয় না (এটি ঘূর্ণন সম্পর্কিত কীসের জন্য: অবশ্যই আপনার এখনও অন্য ধরণের দা দরকার)। গ্রুপ সমতুল্য সিএনএন বাস্তবায়নের দিক থেকে স্টিরিবেল সিএনএন এর চেয়ে বেশি পরিপক্ক, তাই আমি প্রথমে গ্রুপ সিএনএন চেষ্টা করব try শ্রেণিবদ্ধকরণ অংশের জন্য জি-সিএনএন ব্যবহার করে আপনি শ্রেণিবদ্ধকরণ-তারপরে-রিগ্রেশন চেষ্টা করতে পারেন, বা আপনি খাঁটি রিগ্রেশন পদ্ধতির সাথে পরীক্ষা করতে পারেন। সেই অনুযায়ী উপরের স্তরটি পরিবর্তন করতে ভুলবেন না।
  • ব্যাচের আকারের সাথে পরীক্ষা করুন (হ্যাঁ, হ্যাঁ, আমি জানি হাইপারপ্যারামিটার-হ্যাকিং শীতল নয়, তবে এটি সীমাবদ্ধ সময় ফ্রেমে এবং নিখরচায় আমি সবচেয়ে ভাল আসতে পারি :-)
  • শেষ অবধি, এমন কিছু আর্কিটেকচার রয়েছে যা বিশেষত ছোট ডেটা সেটগুলির সাথে সঠিক ভবিষ্যদ্বাণী করতে তৈরি করা হয়েছিল। তাদের মধ্যে বেশিরভাগই রঞ্জিত কনভোলিউশন ব্যবহার করেছেন : একটি বিখ্যাত উদাহরণ হ'ল মিশ্র-স্কেল ঘন কনভ্যুশনাল নিউরাল নেটওয়ার্ক । বাস্তবায়ন তুচ্ছ নয়, যদিও।

3
বিস্তারিত উত্তরের জন্য আপনাকে ধন্যবাদ। আমি ইতিমধ্যে উল্লেখযোগ্য ডেটা বর্ধন করছিলাম। ইনসেপশন মডেলটির বেশ কয়েকটি রূপের চেষ্টা করেছেন (যেখানে কোনও পরিবর্তনের অর্থ ফিল্টারগুলির সংখ্যা পুরো মডেল জুড়ে সমানভাবে মাপা হয়)। অবিশ্বাস্য উন্নতি দেখেছি। এখনও যেতে একটি উপায় আছে। আমি আপনার পরামর্শ কয়েক চেষ্টা করব। আবার ধন্যবাদ.
রডরিগো-সিলভিরা

@ রদ্রিগো-সিলভির আপনাকে স্বাগতম, আমাকে কীভাবে তা জানাতে দিন। আপনার ফলাফল পাওয়ার পরে আমরা চ্যাটে কথা বলতে পারি।
ডেল্টাআইভি

1
দুর্দান্ত উত্তর, আরও প্রাপ্য ^
গিলি

1

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