केरस - अनुकूलित परत
केरस हमारी स्वनिर्धारित परत बनाने की अनुमति देता है। एक बार एक नई परत बन जाने के बाद, इसका उपयोग बिना किसी प्रतिबंध के किसी भी मॉडल में किया जा सकता है। आइए इस अध्याय में नई परत बनाने का तरीका जानें।
केरस एक आधार प्रदान करता है layerक्लास, लेयर जो कि हमारी खुद की कस्टमाइज्ड लेयर बनाने के लिए सब-क्लास की जा सकती है। आइए हम एक सरल परत बनाते हैं जो सामान्य वितरण के आधार पर वजन का पता लगाएगा और फिर प्रशिक्षण के दौरान इनपुट के उत्पाद और उसके वजन का योग खोजने की मूल गणना करेगा।
चरण 1: आवश्यक मॉड्यूल आयात करें
सबसे पहले, हम आवश्यक मॉड्यूल आयात करते हैं -
from keras import backend as K
from keras.layers import Layer
यहाँ,
backend का उपयोग करने के लिए उपयोग किया जाता है dot समारोह।
Layer आधार वर्ग है और हम अपनी परत बनाने के लिए इसे उप-वर्गीकृत करेंगे
चरण 2: एक परत वर्ग को परिभाषित करें
आइए हम एक नया वर्ग बनाएं, MyCustomLayer उप-वर्ग द्वारा Layer class -
class MyCustomLayer(Layer):
...
चरण 3: परत वर्ग को प्रारंभ करें
हमें नीचे निर्दिष्ट के रूप में हमारे नए वर्ग इनिशियलाइज़ करते हैं -
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyCustomLayer, self).__init__(**kwargs)
यहाँ,
Line 2 आउटपुट आयाम सेट करता है।
Line 3 आधार या सुपर परत कहते हैं init समारोह।
चरण 4: निर्माण विधि को लागू करें
buildमुख्य विधि है और इसका एकमात्र उद्देश्य परत का ठीक से निर्माण करना है। यह परत के अंदरूनी कामकाज से संबंधित कुछ भी कर सकता है। कस्टम कार्यक्षमता हो जाने के बाद, हम बेस क्लास को कॉल कर सकते हैंbuildसमारोह। हमारा रिवाजbuild फ़ंक्शन निम्नानुसार है -
def build(self, input_shape):
self.kernel = self.add_weight(name = 'kernel',
shape = (input_shape[1], self.output_dim),
initializer = 'normal', trainable = True)
super(MyCustomLayer, self).build(input_shape)
यहाँ,
Line 1 परिभाषित करता है build एक तर्क के साथ विधि, input_shape। इनपुट डेटा के आकार को input_shape द्वारा संदर्भित किया जाता है।
Line 2इनपुट आकार के अनुरूप भार बनाता है और इसे कर्नेल में सेट करता है। यह परत की हमारी कस्टम कार्यक्षमता है। यह 'सामान्य' इनिशियलाइज़र का उपयोग करके वजन बनाता है।
Line 6 बेस क्लास, build तरीका।
चरण 5: कॉल विधि लागू करें
call विधि प्रशिक्षण प्रक्रिया के दौरान परत का सटीक काम करती है।
हमारा रिवाज call विधि इस प्रकार है
def call(self, input_data):
return K.dot(input_data, self.kernel)
यहाँ,
Line 1 परिभाषित करता है call एक तर्क के साथ विधि, input_data। input_data हमारी परत के लिए इनपुट डेटा है।
Line 2 इनपुट डेटा का डॉट उत्पाद लौटाएँ, input_data और हमारी परत की कर्नेल, self.kernel
चरण 6: कंप्यूट कम्प्यूट / विधि लागू करें
def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)
यहाँ,
Line 1 को परिभाषित करता है compute_output_shape एक तर्क के साथ विधि input_shape
Line 2 परत को आरंभ करते समय इनपुट डेटा और आउटपुट आयाम के आकार का उपयोग करके आउटपुट आकार की गणना करता है।
कार्यान्वित कर रहा है build, call तथा compute_output_shapeएक स्वनिर्धारित परत बनाने को पूरा करता है। अंतिम और पूर्ण कोड निम्नानुसार है
from keras import backend as K from keras.layers import Layer
class MyCustomLayer(Layer):
def __init__(self, output_dim, **kwargs):
self.output_dim = output_dim
super(MyCustomLayer, self).__init__(**kwargs)
def build(self, input_shape): self.kernel =
self.add_weight(name = 'kernel',
shape = (input_shape[1], self.output_dim),
initializer = 'normal', trainable = True)
super(MyCustomLayer, self).build(input_shape) #
Be sure to call this at the end
def call(self, input_data): return K.dot(input_data, self.kernel)
def compute_output_shape(self, input_shape): return (input_shape[0], self.output_dim)
हमारी अनुकूलित परत का उपयोग करना
हमें नीचे निर्दिष्ट के रूप में हमारी अनुकूलित परत का उपयोग कर एक सरल मॉडल बनाने के लिए -
from keras.models import Sequential
from keras.layers import Dense
model = Sequential()
model.add(MyCustomLayer(32, input_shape = (16,)))
model.add(Dense(8, activation = 'softmax')) model.summary()
यहाँ,
हमारी MyCustomLayer 32 इकाइयों का उपयोग कर मॉडल में जोड़ा जाता है और (16,) इनपुट आकार के रूप में
एप्लिकेशन चलाने से नीचे के रूप में मॉडल सारांश मुद्रित होगा -
Model: "sequential_1"
_________________________________________________________________
Layer (type) Output Shape Param
#================================================================
my_custom_layer_1 (MyCustomL (None, 32) 512
_________________________________________________________________
dense_1 (Dense) (None, 8) 264
=================================================================
Total params: 776
Trainable params: 776
Non-trainable params: 0
_________________________________________________________________