অ্যাক্টিভেশন ফাংশনগুলি সত্যিই কৃত্রিম নিউরোল নেটওয়ার্কের জন্য সত্যিই গুরুত্বপূর্ণ এবং ইনপুট এবং প্রতিক্রিয়া পরিবর্তনশীলের মধ্যে জটিল এবং অ-রৈখিক জটিল কার্যকরী ম্যাপিং সম্পর্কে কিছু জানার জন্য। এটি আমাদের নেটওয়ার্কের অ-রৈখিক বৈশিষ্ট্য প্রবর্তন করে । তাদের প্রধান উদ্দেশ্য একটি এ-এনএন একটি আউটপুট সংকেত একটি নোড একটি ইনপুট সংকেত রূপান্তর করা হয়। যে আউটপুট সংকেত এখন স্ট্যাকের পরবর্তী স্তর একটি ইনপুট হিসাবে ব্যবহার করা হয়।
আমরা জনপ্রিয় গভীর শিক্ষা অবকাঠামো, মত জনপ্রিয় অ্যাক্টিভেশন ফাংশন একটি বিশাল তালিকা থেকে নির্বাচন করতে পারবেন ReLU , সিগমা , TANH , এবং অনেক অন্যদের। তবে, আপনার মডেলের জন্য বিশেষভাবে কাস্টমাইজড আর্ট মডেলটি তৈরি করার জন্য, আপনাকে একটি কাস্টম অ্যাক্টিভেশন ফাংশন ব্যবহার করতে হবে, যা আপনি ব্যবহার করছেন এমন ডিপ লার্নিং ফ্রেমওয়ার্কে অনুপস্থিত।
Tensorflow একটি দুর্দান্ত সরঞ্জাম যা বাস্তবায়ন বাস্তবায়নের মাধ্যমে গভীর শিক্ষার সাথে কাজ করে এবং অনেকগুলি ক্রিয়াকলাপ রয়েছে যা আপনি সহজেই জটিল জটিল সমস্যার জন্য কাজ করতে পারেন যেমন কম্পিউটার ভিশন, প্রাকৃতিক ভাষা প্রক্রিয়াকরণ, বক্তৃতা স্বীকৃতি, মেশিন অনুবাদ ইত্যাদি। এই পোস্টে, আমি রিলু 6 এবং ল্যাকি রেলে অ্যাক্টিভেশন ফাংশনটির সমন্বয় শুরু করছি, যা টেন্সরফ্লো লাইব্রেরিতে প্রাক-প্রয়োগ করা ফাংশন হিসাবে উপলব্ধ নয়। অ্যাক্টিভেশন ফাংশন হিসাবে সংজ্ঞায়িত করা হয়:

টেন্সরফ্লো এবং কেরাসের শক্তিটি হল, যদিও এটি ফাংশনের বিভাজনকে গণনা করার একটি প্রবণতা রয়েছে, তবে যদি আপনার কোন অ্যাক্টিভেশন ফাংশন থাকে যা ইনপুট সীমার উপর পরিবর্তিত হয়। এই বাস্তবায়ন ছবি মধ্যে আসে যেখানে। আসুন আমাদের কোড এ বাস্তবায়ন শুরু করি।
Import the required Libraries.
from __future__ import absolute_import, division, print_function import sys import tensorflow as tf import numpy as np from tensorflow.python.framework import opstf.logging.set_verbosity(tf.logging.INFO)
Define the activation function as a normal python function.
def leaky_relu_6(x):if x >=0.0 and x <= 6.0: return x*1.0 elif x > 6.0: return 6.0 else: return 0.2 * x
Vectorize the python function.
np_leaky_relu_6= np.vectorize(leaky_relu_6)
কেন ফাংশন ভেক্টরাইজিং?
একটি ভেক্টরাইজড ফাংশন ইনপুট হিসাবে বস্তুর একটি নিস্তেজ ক্রম বা নুপি অ্যারে নেয় এবং আউটপুট হিসাবে numpy অ্যারের একটি একক বা tuple প্রদান করে। একটি ফাংশন ভেক্টরাইজিং আমাদের বাস্তবায়ন সাধারণীকরণের জন্য কোন ইনপুট আকৃতি এবং আকার মোকাবেলা করতে সাহায্য করে। ভেক্টরাইজডের আউটপুট এর ডাটা টাইপ ফাংশনকে ইনপুটের প্রথম উপাদান দিয়ে কল করে নির্ধারিত হয়।
এখন আমাদের সক্রিয়করণ ফাংশন এর ডেরিভেটিভ সংজ্ঞায়িত করা যাক যাতে এটি ব্যাকপ্রোপাগেশনের সময় ব্যবহার করা যেতে পারে।
used during backpropagation.
def d_leaky_relu_6(x):
if x >=0.0 and x < 6.0:
return 1.0
elif x > 6.0:
return 0.0
else:
return 0.2
np_d_leaky_relu_6 = np.vectorize(d_leaky_relu_6)
গ্রেডিয়েন্ট ফাংশন: একটি গ্রেডিয়েন্ট একটি ভেক্টর । তার উপাদান একটি ফাংশন আংশিক ডেরিভেটিভ গঠিত এবং ফাংশন বৃদ্ধি সর্বোচ্চ হার দিক নির্দেশ করে। সুতরাং উদাহরণস্বরূপ, যদি আপনার ফাংশন f (x1, ... xn) থাকে, তবে তার গ্রেডিয়েন্টে এন আংশিক ডেরিভেটিভস থাকবে এবং ভেক্টর ক্ষেত্রটি উপস্থাপন করবে।
def relu_grad(op, grad):
x = op.inputs[0]n_gr = tf_d_leaky_relu_6(x) #defining the gradient.
return grad * n_gr
op সমস্ত পাস ভেরিয়েবল রয়েছে; ধীরে ধীরে - ব্যাকপ্রোপাগেশন থেকে প্রবাহিত গ্রেডিয়েন্ট।
def py_func(func, inp, Tout, stateful=True, name=None, grad=None):# Need to generate a unique name to avoid duplicates:
rnd_name = 'PyFuncGrad' + str(np.random.randint(0, 1E+2))tf.RegisterGradient(rnd_name)(grad)
g = tf.get_default_graph()
with g.gradient_override_map({"PyFunc": rnd_name}):
return tf.py_func(func, inp, Tout, stateful=stateful, name=name)
tf.register গ্রেডিয়েন্ট আপনাকে গ্রেডিয়েন্টকে ওভাররাইড করতে দেয়।
gradient_override_map ( op_type_map ) যেখানে op_type_map একটি অভিধান ({"PyFunc": rnd_name}) বিকল্প অপারেটিং টাইপ স্ট্রিংগুলিতে অপারেটিং টাইপ স্ট্রিংগুলি।
Gradient_override_map, প্রেক্ষাপট ব্যবস্থাপকটি "রেন_নাম" ফাংশন (আমাদের ক্ষেত্রে PyFuncGrad) ম্যাপিংয়ের জন্য "পয়ফুকেসি" ফাংশনের গ্রেডিয়েন্টকে প্রসঙ্গের সুযোগের মধ্যে ব্যবহার করতে ব্যবহৃত হয়।
tf.py_func()
অপারেটর আপনি একটি TensorFlow গ্রাফ মাঝখানে নির্বিচারে পাইথন কোড রান করতে সক্ষম করে। এটি বিশেষভাবে সুবিধাজনক নুপ্পি অপারেটরগুলিকে মোড়ানো করার জন্য বিশেষত সুবিধাজনক, যার জন্য কোন সমতুল্য তলফ্লো অপারেটর (এখনো) নেই। যোগ tf.py_func()
হচ্ছে sess.run()
গ্রাফ ভিতরে কল ব্যবহার করার জন্য একটি বিকল্প । এখানেtf.py_func সম্পর্কে আরও জানুন ।
এটিকে একত্রিত করা: এখন আমাদের সব টুকরা আছে, আমরা তাদের একত্রিত করতে পারি:
np_leaky_relu_6_32 = lambda x: np_leaky_relu_6(x).astype(np.float32)def tf_leaky_relu_6(x,name=None):
with tf.name_scope(name, "leaky_relu_6", [x]) as name:y = py_func(np_leaky_relu_6_32, #forward pass function
[x],
[tf.float32],
name=name,
grad= relu_grad) #the function that overrides gradient
y[0].set_shape(x.get_shape()) #when using with the code, it is used to specify the rank of the input.
return y[0]np_d_leaky_relu_6_32 = lambda x: np_d_leaky_relu_6(x).astype(np.float32)def tf_d_leaky_relu_6(x,name=None):
with tf.name_scope(name, "d_leaky_relu_6", [x]) as name:
y = tf.py_func(np_d_leaky_relu_6_32,
[x],
[tf.float32],
name=name,
stateful=False)
return y[0]
সিএনএন মডেল:
def cnn_model_fn(features, labels, mode):
"""Model function for CNN."""
# Input Layer
input_layer = tf.reshape(features["x"], [-1, 28, 28, 1])
#conv1_act = tf.placeholder(tf.float32, [4,])# Convolutional Layer #1
conv1 = tf.layers.conv2d(
inputs=input_layer,
filters=32,
kernel_size=[5, 5],
padding="same",
activation=tf.nn.relu)#conv1_act = tf_leaky_relu_6(conv1)pool1 = tf.layers.max_pooling2d(inputs=conv1, pool_size=[2, 2], strides=2)# Convolutional Layer #2 and Pooling Layer #2
conv2 = tf.layers.conv2d(
inputs=pool1,
filters=64,
kernel_size=[5, 5],
padding="same") #to try other activation function replcae relu6 by leaky_relu or relu
conv2_act = tf_leaky_relu_6(conv2)
pool2 = tf.layers.max_pooling2d(inputs=conv2_act, pool_size=[2, 2], strides=2)# Dense Layer
pool2_flat = tf.reshape(pool2, [-1, 7 * 7 * 64])
dense = tf.layers.dense(inputs=pool2_flat, units=1024, activation=tf.nn.relu6) #to try other activation function replcae relu6 by leaky_relu or relu
dropout = tf.layers.dropout(
inputs=dense, rate=0.4, training=mode == tf.estimator.ModeKeys.TRAIN)# Logits Layer
logits = tf.layers.dense(inputs=dropout, units=10)predictions = {
# Generate predictions (for PREDICT and EVAL mode)
"classes": tf.argmax(input=logits, axis=1),
# Add `softmax_tensor` to the graph. It is used for PREDICT and by the
# `logging_hook`.
"probabilities": tf.nn.softmax(logits, name="softmax_tensor")
}if mode == tf.estimator.ModeKeys.PREDICT:
return tf.estimator.EstimatorSpec(mode=mode, predictions=predictions)# Calculate Loss (for both TRAIN and EVAL modes)
loss = tf.losses.sparse_softmax_cross_entropy(labels=labels, logits=logits)# Configure the Training Op (for TRAIN mode)
if mode == tf.estimator.ModeKeys.TRAIN:
optimizer = tf.train.GradientDescentOptimizer(learning_rate=0.001)
train_op = optimizer.minimize(
loss=loss,
global_step=tf.train.get_global_step())
return tf.estimator.EstimatorSpec(mode=mode, loss=loss, train_op=train_op)# Add evaluation metrics (for EVAL mode)
eval_metric_ops = {
"accuracy": tf.metrics.accuracy(
labels=labels, predictions=predictions["classes"])
}
return tf.estimator.EstimatorSpec(
mode=mode, loss=loss, eval_metric_ops=eval_metric_ops)
লোড প্রশিক্ষণ এবং eval তথ্য
((train_data, train_labels), (eval_data, eval_labels)) = tf.keras.datasets.mnist.load_data () train_data = train_data / np.float32 (255) train_labels = train_labels.astype (np.int32) # প্রয়োজনীয় eval_data = eval_data / np.float32 (255) eval_labels = eval_labels.astype (np.int32) # প্রয়োজন নেই
# Estimator তৈরি করুন
mnist_classifier = tf.estimator.Estimator(
model_fn=cnn_model_fn)# Set up logging for predictions
tensors_to_log = {"probabilities": "softmax_tensor"}logging_hook = tf.train.LoggingTensorHook(
tensors=tensors_to_log, every_n_iter=50)# Train the model
train_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": train_data},
y=train_labels,
batch_size=100,
num_epochs=None,
shuffle=True)
# train one step and display the probabilties
#mnist_classifier.train(input_fn=train_input_fn, steps=1,hooks=[logging_hook])mnist_classifier.train(input_fn=train_input_fn, steps=1000)#Evaluate Inputeval_input_fn = tf.estimator.inputs.numpy_input_fn(
x={"x": eval_data},
y=eval_labels,
num_epochs=1,
shuffle=False)eval_results = mnist_classifier.evaluate(input_fn=eval_input_fn)
print(eval_results)
প্রস্তাবিত অ্যাক্টিভেশন ফাংশনটি রেলে অস্তিত্বের সংস্করণগুলির চেয়ে ভাল নাও হতে পারে। আপনার সিস্টেমে কোড চালানোর চেষ্টা করুন। মন্তব্য আপনার প্রশ্ন এবং পরামর্শ পোস্ট করুন। আমি আপনার প্রশ্নের উত্তর খুশি হবে। এই টিউটোরিয়াল থেকে সমস্ত কোড GitHub এ উপলব্ধ । জন্য প্রয়োগ কাস্টম অ্যাক্টিভেশন ফাংশন অন্যান্য উদাহরণ PyTorch এবং Keras ।
0 comments:
Post a Comment