ইউনিট:
"নিউরন" বা "কোষ" এর পরিমাণ বা স্তরটির ভিতরে যা কিছু আছে।
এটি প্রতিটি স্তরের সম্পত্তি এবং হ্যাঁ, এটি আউটপুট আকারের সাথে সম্পর্কিত (যেমন আমরা পরে দেখব)। আপনার ছবিতে, ইনপুট স্তরটি বাদে, যা অন্যান্য স্তর থেকে ধারণাগতভাবে পৃথক, আপনার কাছে রয়েছে:
- লুকানো স্তর 1: 4 ইউনিট (4 নিউরন)
- লুকানো স্তর 2: 4 ইউনিট
- শেষ স্তর: 1 ইউনিট
আকার
আকারগুলি মডেলের কনফিগারেশনের পরিণতি। আকারগুলি হ'ল টিপলস প্রতিনিধিত্ব করে যা প্রতিটি মাত্রায় একটি অ্যারে বা টেনসরের কতগুলি উপাদান রয়েছে।
উদাহরণস্বরূপ: একটি আকৃতির (30,4,10)
অর্থ 3 টি মাত্রা সহ একটি অ্যারে বা টেনসর, প্রথম মাত্রায় 30 টি উপাদান থাকে, দ্বিতীয়টিতে 4 এবং তৃতীয়তে 10 থাকে, মোট 30 * 4 * 10 = 1200 উপাদান বা সংখ্যা।
ইনপুট আকার
স্তরগুলির মধ্যে প্রবাহিত হ'ল টেনারগুলি are টেনেসরগুলিকে ম্যাট্রিক হিসাবে দেখা যায়, আকার সহ।
কেরাসে, ইনপুট স্তরটি নিজেই একটি স্তর নয়, তবে একটি সেন্সর। এটি আপনি প্রথম লুকানো স্তরে প্রেরণকারী টেনসর। এই টেনসরটির অবশ্যই আপনার প্রশিক্ষণের ডেটার মতোই আকার থাকতে হবে।
উদাহরণ: যদি আপনি আরজিবি মধ্যে 50x50 পিক্সেলের (3 চ্যানেল) 30 ইমেজ উপস্থিত আছে, আপনার ইনপুট ডেটা আকৃতি হয় (30,50,50,3)
। তারপরে আপনার ইনপুট লেয়ার টেনসর, অবশ্যই এই আকৃতিটি থাকা উচিত ("কেরাসের আকারগুলি" বিভাগে বিশদটি দেখুন)।
প্রতিটি ধরণের স্তরটির জন্য নির্দিষ্ট সংখ্যক মাত্রার ইনপুট প্রয়োজন:
Dense
স্তর হিসাবে ইনপুট প্রয়োজন (batch_size, input_size)
- অথবা
(batch_size, optional,...,optional, input_size)
- 2 ডি কনভ্যুশনাল স্তরগুলির ইনপুটগুলি যেমন প্রয়োজন:
- যদি ব্যবহার করা হয়
channels_last
:(batch_size, imageside1, imageside2, channels)
- যদি ব্যবহার করা হয়
channels_first
:(batch_size, channels, imageside1, imageside2)
- 1 ডি কনভোলিউশন এবং পুনরাবৃত্ত স্তরগুলি ব্যবহার করে
(batch_size, sequence_length, features)
এখন, ইনপুট আকারটি কেবলমাত্র আপনাকেই সংজ্ঞায়িত করতে হবে কারণ আপনার মডেল এটি জানতে পারে না। আপনার প্রশিক্ষণ ডেটার উপর ভিত্তি করে শুধুমাত্র আপনি এটি জানেন।
অন্যান্য স্তরগুলি প্রতিটি স্তরের ইউনিট এবং বৈশিষ্ট্যের ভিত্তিতে স্বয়ংক্রিয়ভাবে গণনা করা হয়।
আকার এবং ইউনিটগুলির মধ্যে সম্পর্ক - আউটপুট আকার
ইনপুট আকার দেওয়া, অন্যান্য সমস্ত আকার স্তর স্তর গণনার ফলাফল।
প্রতিটি স্তরের "ইউনিট" আউটপুট আকারটি নির্ধারণ করবে (স্তর দ্বারা উত্পাদিত টেনসারের আকার এবং এটি পরবর্তী স্তরটির ইনপুট হবে)।
প্রতিটি ধরণের স্তর একটি নির্দিষ্ট উপায়ে কাজ করে। ঘন স্তরগুলির "ইউনিট" এর উপর ভিত্তি করে আউটপুট আকার থাকে, কনভোলজিনাল স্তরগুলির "ফিল্টার" এর উপর ভিত্তি করে আউটপুট আকার থাকে। তবে এটি সর্বদা কিছু স্তরের সম্পত্তির উপর ভিত্তি করে। (প্রতিটি স্তর আউটপুট কীসের জন্য ডকুমেন্টেশন দেখুন)
আসুন দেখা যাক "ঘন" স্তরগুলির সাথে কী ঘটে, যা আপনার গ্রাফে প্রদর্শিত প্রকার।
একটি ঘন স্তর একটি আউটপুট আকার আছে (batch_size,units)
। সুতরাং, হ্যাঁ, ইউনিটগুলি, স্তরটির সম্পত্তি, আউটপুট আকারও সংজ্ঞায়িত করে।
- লুকায়িত স্তর 1: 4 ইউনিট, আউটপুট আকৃতি:
(batch_size,4)
।
- লুকায়িত স্তর 2: 4 ইউনিট, আউটপুট আকৃতি:
(batch_size,4)
।
- সর্বশেষ স্তর: 1 ইউনিট, আউটপুট আকৃতি:
(batch_size,1)
।
ওজন
ওজন সম্পূর্ণরূপে ইনপুট এবং আউটপুট আকারের উপর ভিত্তি করে গণনা করা হবে। আবার, প্রতিটি ধরণের স্তর একটি নির্দিষ্ট উপায়ে কাজ করে। তবে ওজনগুলি একটি গাণিতিক ক্রিয়াকলাপ দ্বারা ইনপুট আকারকে আউটপুট আকারে রূপান্তর করতে সক্ষম ম্যাট্রিক্স হবে।
একটি ঘন স্তর মধ্যে, ওজন সমস্ত ইনপুট গুন। এটি ইনপুট প্রতি এক কলাম এবং ইউনিট প্রতি এক সারি সহ একটি ম্যাট্রিক্স, তবে এটি প্রায়শই বেসিক কাজের জন্য গুরুত্বপূর্ণ নয়।
চিত্রটিতে, প্রতিটি তীরটিতে যদি একটি গুণ চিহ্ন থাকে, সমস্ত সংখ্যা একসাথে ওজন ম্যাট্রিক্স গঠন করে।
কেরাসে আকার
এর আগে, আমি 30 টি চিত্র, 50x50 পিক্সেল এবং 3 টি চ্যানেলের উদাহরণ দিয়েছিলাম যার একটি ইনপুট আকার রয়েছে (30,50,50,3)
।
যেহেতু ইনপুট শেপটি কেবলমাত্র আপনাকে নির্ধারণ করতে হবে তাই কেরাস প্রথম স্তরে এটির দাবি করবে demand
তবে এই সংজ্ঞায় কেরাস প্রথম মাত্রা উপেক্ষা করে যা ব্যাচের আকার। আপনার মডেলটি যে কোনও ব্যাচের আকারের সাথে ডিল করতে সক্ষম হবে, সুতরাং আপনি কেবলমাত্র অন্যান্য মাত্রাগুলি নির্ধারণ করুন:
input_shape = (50,50,3)
#regardless of how many images I have, each image has this shape
বৈকল্পিকভাবে, অথবা যখন এটি মডেলের নির্দিষ্ট ধরণের প্রয়োজনীয় যাচ্ছে তুমি কি আকৃতি মাধ্যমে ব্যাচ আকার ধারণকারী পাস করতে পারেন batch_input_shape=(30,50,50,3)
বা batch_shape=(30,50,50,3)
। এটি আপনার প্রশিক্ষণের সম্ভাব্যতাগুলিকে এই অনন্য ব্যাচের আকারের মধ্যে সীমাবদ্ধ করে, তাই এটি যখন সত্যই প্রয়োজন হয় কেবল তখনই ব্যবহার করা উচিত।
যেভাবেই আপনি চয়ন করেন, মডেলটির টেনারগুলির ব্যাচের মাত্রা থাকবে।
সুতরাং, এমনকি যদি আপনি ব্যবহার করেছেন input_shape=(50,50,3)
, কেরারা যখন আপনাকে বার্তা প্রেরণ করে বা যখন আপনি মডেলটির সারাংশ প্রিন্ট করেন, এটি প্রদর্শিত হবে (None,50,50,3)
।
প্রথম মাত্রা হ'ল ব্যাচের আকার, এটি None
কারণ প্রশিক্ষণের জন্য আপনি কতগুলি উদাহরণ দেন তার উপর নির্ভর করে এটি পৃথক হতে পারে। (আপনি যদি ব্যাচের আকারটি স্পষ্টভাবে সংজ্ঞায়িত করেন তবে আপনার সংখ্যার সংখ্যার পরিবর্তে উপস্থিত হবে None
)
এছাড়াও, উন্নত কাজগুলিতে, আপনি যখন সরাসরি টেনারগুলিতে সরাসরি পরিচালনা করেন (ল্যাম্বদা স্তরগুলির মধ্যে বা ক্ষতির ফাংশনে, উদাহরণস্বরূপ), তখন ব্যাচের আকারের মাত্রা থাকবে।
- সুতরাং, ইনপুট আকারটি সংজ্ঞায়িত করার সময় আপনি ব্যাচের আকারটিকে উপেক্ষা করবেন:
input_shape=(50,50,3)
- সরাসরি টেনসরগুলিতে অপারেশন করার সময়, আকৃতিটি আবার হবে
(30,50,50,3)
- কেরাস যখন আপনাকে একটি বার্তা প্রেরণ করে তখন আকারটি
(None,50,50,3)
বা (30,50,50,3)
এটি আপনাকে কী ধরণের বার্তা প্রেরণ করে তার উপর নির্ভর করে।
অস্পষ্ট
এবং শেষ পর্যন্ত, কি dim
?
যদি আপনার ইনপুট আকারের একটি মাত্র মাত্রা থাকে তবে আপনাকে এটিকে একটি টিউপল হিসাবে দেওয়ার দরকার নেই, আপনি input_dim
একটি স্কেলার নম্বর হিসাবে দেন।
সুতরাং, আপনার মডেলটিতে, যেখানে আপনার ইনপুট স্তরটিতে 3 টি উপাদান রয়েছে, আপনি এই দুটির কোনও ব্যবহার করতে পারেন:
input_shape=(3,)
- আপনার যখন মাত্র একটি মাত্রা থাকবে তখন কমাটি প্রয়োজনীয়
input_dim = 3
কিন্তু সরাসরি টেনারগুলির সাথে কাজ করার সময়, প্রায়শই dim
কোনও টেনসর কতটি মাত্রা রয়েছে তা উল্লেখ করবে। উদাহরণস্বরূপ আকৃতির (25,10909) টেন্সরের 2 মাত্রা রয়েছে।
কেরাসে আপনার চিত্রের সংজ্ঞা দিচ্ছেন
কেরাসের এটি করার দুটি উপায় রয়েছে, Sequential
মডেল বা ক্রিয়ামূলক API Model
। আমি সিক্যুয়াল মডেলটি ব্যবহার করতে পছন্দ করি না, পরে আপনাকে এটি যাইহোক ভুলে যেতে হবে কারণ আপনি শাখাগুলি সহ মডেলগুলি চাইবেন।
PS: এখানে আমি অন্যান্য বিষয় যেমন অ্যাক্টিভেশন ফাংশন উপেক্ষা করেছি।
সিক্যুয়াল মডেল সহ :
from keras.models import Sequential
from keras.layers import *
model = Sequential()
#start from the first hidden layer, since the input is not actually a layer
#but inform the shape of the input, with 3 elements.
model.add(Dense(units=4,input_shape=(3,))) #hidden layer 1 with input
#further layers:
model.add(Dense(units=4)) #hidden layer 2
model.add(Dense(units=1)) #output layer
কার্যকরী এপিআই মডেল সহ :
from keras.models import Model
from keras.layers import *
#Start defining the input tensor:
inpTensor = Input((3,))
#create the layers and pass them the input tensor to get the output tensor:
hidden1Out = Dense(units=4)(inpTensor)
hidden2Out = Dense(units=4)(hidden1Out)
finalOut = Dense(units=1)(hidden2Out)
#define the model's start and end points
model = Model(inpTensor,finalOut)
টেনারদের আকার
মনে রাখবেন স্তরগুলি সংজ্ঞায়িত করার সময় আপনি ব্যাচের আকারগুলি উপেক্ষা করবেন:
- inpTensor:
(None,3)
- hidden1Out:
(None,4)
- hidden2Out:
(None,4)
- finalOut:
(None,1)
input_shape=
পরামিতি সম্পর্কে একটি প্রশ্ন রয়ে গেছে: আর্গুমেন্টের প্রথম মানটি কোন মাত্রায় বোঝায়? আমি এর মতো জিনিস দেখতে পাচ্ছিinput_shape=(728, )
, তাই আমার মনে প্রথম যুক্তিটি কলামগুলি (স্থির) এবং দ্বিতীয়টি সারিগুলিকে বোঝায় (আলাদা হতে পারে)। তবে কীভাবে পাইথনের সারি-প্রধান অ্যারেটির সাথে এটি বসে?