কেরাস ডকুমেন্টেশন এগুলি আসলে কী তা পরিষ্কার নয়। আমি বুঝতে পারি আমরা এটি ইনপুট বৈশিষ্ট্যের স্থানটিকে আরও ছোটতে সংকুচিত করতে ব্যবহার করতে পারি। তবে কীভাবে এটি নিউরাল ডিজাইনের দৃষ্টিকোণ থেকে করা হয়? এটি কি কোনও অটোয়ানোডার, আরবিএম?
কেরাস ডকুমেন্টেশন এগুলি আসলে কী তা পরিষ্কার নয়। আমি বুঝতে পারি আমরা এটি ইনপুট বৈশিষ্ট্যের স্থানটিকে আরও ছোটতে সংকুচিত করতে ব্যবহার করতে পারি। তবে কীভাবে এটি নিউরাল ডিজাইনের দৃষ্টিকোণ থেকে করা হয়? এটি কি কোনও অটোয়ানোডার, আরবিএম?
উত্তর:
যতদূর আমি জানি, এম্বেডিং স্তরটি একটি সরল ম্যাট্রিক্স গুণ হয় যা শব্দগুলিকে তাদের সম্পর্কিত শব্দ এম্বেডিংগুলিতে রূপান্তর করে।
এম্বেডিং স্তরের ওজনগুলি আকৃতির হয় (শব্দভান্ডার_ আকার, এম্বেডিং_ডিমেন্স)। প্রতিটি প্রশিক্ষণের নমুনার জন্য, এর ইনপুটটি পূর্ণসংখ্যা হয়, যা নির্দিষ্ট শব্দের প্রতিনিধিত্ব করে। পূর্ণসংখ্যাগুলি শব্দভান্ডার আকারের সীমার মধ্যে রয়েছে। এম্বেডিং স্তর প্রতিটি পূর্ণসংখ্যাকে আমি এমবেডিং ওজন ম্যাট্রিক্সের আইথ লাইনে রূপান্তর করে।
এটি ম্যাট্রিক্সের গুণকে দ্রুত করার জন্য, ইনপুট পূর্ণসংখ্যাগুলি পূর্ণসংখ্যার তালিকা হিসাবে সংরক্ষণ করা হয় না তবে ওয়ান-হট ম্যাট্রিক্স হিসাবে ব্যবহৃত হয়। সুতরাং ইনপুট আকারটি (এনবি_ওয়ার্ডস, ভোকাবুলারি_ সাইজ) প্রতি লাইনে একটি শূন্য-মান সহ। আপনি যদি এম্বেডিং ওজন দ্বারা এটি গুণ করেন তবে আপনি আউটপুটটি আকারে পাবেন
(nb_words, vocab_size) x (vocab_size, embedding_dim) = (nb_words, embedding_dim)
সুতরাং একটি সাধারণ ম্যাট্রিক্সের গুণ দ্বারা আপনি একটি নমুনার সমস্ত শব্দকে সংশ্লিষ্ট শব্দ এম্বেডিংগুলিতে রূপান্তর করেন।
Keras
Embedding
লেয়ার কোনো ম্যাট্রিক্স গুণ কিন্তু এটি শুধুমাত্র করণ নয়:
1. (ভোকাবুলারি_ সাইজ) এক্স (এম্বেডিং_ডাইমেনশন) মাত্রার একটি ওজন ম্যাট্রিক্স তৈরি করে
২. এই ওজন ম্যাট্রিক্সকে সূচক করে
কোনও শ্রেণি কী করে তা বোঝার জন্য উত্স কোডটি একবার ব্যবহার করা সর্বদা দরকারী। এই ক্ষেত্রে, আমরা কটাক্ষপাত থাকবে class
এমবেডিং যা বেস স্তর থেকে উত্তরাধিকারী class
নামক লেয়ার ।
(1) - (ভোকাবুলারি_ সাইজ) এক্স (এম্বেডিং_ডাইমেনশন) মাত্রার একটি ওজন ম্যাট্রিক্স তৈরি করা :
এটি এম্বেডিংয়েরbuild
ক্রিয়াকলাপে ঘটছে :
def build(self, input_shape):
self.embeddings = self.add_weight(
shape=(self.input_dim, self.output_dim),
initializer=self.embeddings_initializer,
name='embeddings',
regularizer=self.embeddings_regularizer,
constraint=self.embeddings_constraint,
dtype=self.dtype)
self.built = True
আপনার যদি বেস ক্লাসের স্তরটির দিকে নজর থাকে তবে আপনি দেখতে পাবেন যে add_weight
উপরের ফাংশনটি কেবল প্রশিক্ষণযোগ্য ওজনের একটি ম্যাট্রিক্স তৈরি করে (এই ক্ষেত্রে (শব্দভান্ডার_ আকার) x (এম্বেডিং_ডাইমেনশন) মাত্রাগুলি):
def add_weight(self,
name,
shape,
dtype=None,
initializer=None,
regularizer=None,
trainable=True,
constraint=None):
"""Adds a weight variable to the layer.
# Arguments
name: String, the name for the weight variable.
shape: The shape tuple of the weight.
dtype: The dtype of the weight.
initializer: An Initializer instance (callable).
regularizer: An optional Regularizer instance.
trainable: A boolean, whether the weight should
be trained via backprop or not (assuming
that the layer itself is also trainable).
constraint: An optional Constraint instance.
# Returns
The created weight variable.
"""
initializer = initializers.get(initializer)
if dtype is None:
dtype = K.floatx()
weight = K.variable(initializer(shape),
dtype=dtype,
name=name,
constraint=constraint)
if regularizer is not None:
with K.name_scope('weight_regularizer'):
self.add_loss(regularizer(weight))
if trainable:
self._trainable_weights.append(weight)
else:
self._non_trainable_weights.append(weight)
return weight
(2) - এই ওজন ম্যাট্রিক্স সূচীকরণ
এটি এম্বেডিংয়েরcall
ক্রিয়াকলাপে ঘটছে :
def call(self, inputs):
if K.dtype(inputs) != 'int32':
inputs = K.cast(inputs, 'int32')
out = K.gather(self.embeddings, inputs)
return out
এই ফাংশন আউটপুট ফেরৎ Embedding
স্তর যার K.gather(self.embeddings, inputs)
। Tf.keras.backend.gather ঠিক কী করে তা হ'ল ওয়েট ম্যাট্রিক্সকে self.embeddings
( build
উপরে ফাংশনটি দেখুন ) inputs
যা ধনাত্মক পূর্ণসংখ্যার তালিকা হওয়া উচিত according
উদাহরণস্বরূপ এই তালিকাগুলি পুনরুদ্ধার করা যেতে পারে যদি আপনি আপনার পাঠ্য / শব্দের ইনপুটগুলি কেরাসের ওয়ান_ হট ফাংশনে পাস করেন যা কোনও পাঠ্যকে মাপের শব্দের সূচকগুলির তালিকাতে এনকোড করে (এটি কোনও গরম এনকোডিং নয় - আরও তথ্যের জন্য এই উদাহরণটি দেখুন: https://machinelearningmastery.com/use-word-e এম্বেডিং-layers- ডিপি- বিসর্জন-keras/ )।
সুতরাং, সব। কোনও ম্যাট্রিক্স গুণ নেই।
বিপরীতভাবে, স্তর শুধুমাত্র দরকারী কারণ ঠিক একটি ম্যাট্রিক্স গুণ করণ এড়াতে হয় এবং অত: পর কিছু গণনীয় সম্পদের উপর economizes।Keras
Embedding
অন্যথায়, আপনি ট্রেনযোগ্য ওজন ( (শব্দভাণ্ডার_ আকার) x (এম্বেডিং_ডাইমেনশন) মাত্রাগুলি) এর একটি ম্যাট্রিক্স পেতে কেবল একটি Keras
ঘন স্তর (আপনার ইনপুট ডেটা এনকোড করার পরে) ব্যবহার করতে পারেন এবং তারপরে আউটপুট পেতে কেবল গুণটি করতে পারবেন যা হুবহু হবে স্তর আউটপুট সঙ্গে একই ।Embedding
যে কোনও ক্রিয়াকলাপটি আরও ভালভাবে বোঝার জন্য উত্স কোডটি দেখা ভাল অভ্যাস। এখানে এম্বেডিংয়ের জন্য তাই মূলত এটি একটি প্রশিক্ষণযোগ্য সারণী টেবিল।
কেরাসে Embedding
স্তরটি কোনও সাধারণ ম্যাট্রিক্সের গুণ গুণ নয় , তবে একটি টেবিল স্তর রয়েছে (নীচে কল ফাংশনটি দেখুন বা মূল সংজ্ঞাটি দেখুন )।
def call(self, inputs):
if K.dtype(inputs) != 'int32':
inputs = K.cast(inputs, 'int32')
out = K.gather(self.embeddings, inputs)
return out
এটি কী প্রতিটি একটি পরিচিত পূর্ণসংখ্যা মানচিত্র হয় n
মধ্যে inputs
একটি trainable বৈশিষ্ট্য ভেক্টরকে W[n]
, যার মাত্রা তথাকথিত এমবেডেড বৈশিষ্ট্য দৈর্ঘ্য হয়।
Embedding
স্তর হল প্রকৃতপক্ষে একটি ম্যাট্রিক্স গুণ।
সহজ কথায় (কার্যক্ষমতা দৃষ্টিকোণ থেকে), এটি একটি হট এনকোডার এবং সম্পূর্ণরূপে সংযুক্ত স্তর । স্তর ওজন প্রশিক্ষণযোগ্য।