TensorFlow.org-এ দেখুন | Google Colab-এ চালান | GitHub-এ উৎস দেখুন | নোটবুক ডাউনলোড করুন |
ওভারভিউ
এই নোটবুকটি প্রদর্শন করবে কিভাবে TensorFlow Addons-এ TripletSemiHardLoss ফাংশন ব্যবহার করতে হয়।
সম্পদ:
- ফেসনেট: ফেস রিকগনিশন এবং ক্লাস্টারিংয়ের জন্য একটি ইউনিফাইড এমবেডিং
- অলিভার মইনড্রটের ব্লগ অ্যালগরিদমকে বিশদভাবে বর্ণনা করার জন্য একটি চমৎকার কাজ করে
ট্রিপলেটলস
FaceNet পেপারে প্রথম প্রবর্তিত হিসাবে, TripletLoss হল একটি লস ফাংশন যা একটি নিউরাল নেটওয়ার্ককে একই শ্রেণীর বৈশিষ্ট্যগুলি ঘনিষ্ঠভাবে এম্বেড করার জন্য প্রশিক্ষণ দেয় যখন বিভিন্ন শ্রেণীর এমবেডিংয়ের মধ্যে দূরত্ব সর্বাধিক করে। এটি করার জন্য একটি নেতিবাচক এবং একটি ইতিবাচক নমুনার সাথে একটি নোঙ্গর নির্বাচন করা হয়।
ক্ষতি ফাংশন একটি ইউক্লিডীয় দূরত্ব ফাংশন হিসাবে বর্ণনা করা হয়:
যেখানে A হল আমাদের অ্যাঙ্কর ইনপুট, P হল ইতিবাচক নমুনা ইনপুট, N হল নেতিবাচক নমুনা ইনপুট, এবং আলফা হল কিছু মার্জিন যা আপনি নির্দিষ্ট করতে ব্যবহার করেন যখন একটি ট্রিপলেট খুব "সহজ" হয়ে যায় এবং আপনি আর এটি থেকে ওজন সামঞ্জস্য করতে চান না .
সেমিহার্ড অনলাইন লার্নিং
কাগজে যেমন দেখানো হয়েছে, "সেমি-হার্ড" নামে পরিচিত ট্রিপলেট থেকে সেরা ফলাফল পাওয়া যায়। এগুলিকে ট্রিপলেট হিসাবে সংজ্ঞায়িত করা হয় যেখানে নেতিবাচকটি ইতিবাচকের চেয়ে অ্যাঙ্কর থেকে দূরে থাকে, তবে এখনও একটি ইতিবাচক ক্ষতি তৈরি করে। এই ট্রিপলেটগুলিকে দক্ষতার সাথে খুঁজে পেতে আপনি অনলাইন শেখার ব্যবহার করেন এবং প্রতিটি ব্যাচে শুধুমাত্র সেমি-হার্ড উদাহরণ থেকে প্রশিক্ষণ নেন।
সেটআপ
pip install -q -U tensorflow-addons
import io
import numpy as np
import tensorflow as tf
import tensorflow_addons as tfa
import tensorflow_datasets as tfds
ডেটা প্রস্তুত করুন
def _normalize_img(img, label):
img = tf.cast(img, tf.float32) / 255.
return (img, label)
train_dataset, test_dataset = tfds.load(name="mnist", split=['train', 'test'], as_supervised=True)
# Build your input pipelines
train_dataset = train_dataset.shuffle(1024).batch(32)
train_dataset = train_dataset.map(_normalize_img)
test_dataset = test_dataset.batch(32)
test_dataset = test_dataset.map(_normalize_img)
Downloading and preparing dataset 11.06 MiB (download: 11.06 MiB, generated: 21.00 MiB, total: 32.06 MiB) to /home/kbuilder/tensorflow_datasets/mnist/3.0.1... Dataset mnist downloaded and prepared to /home/kbuilder/tensorflow_datasets/mnist/3.0.1. Subsequent calls will reuse this data.
মডেল তৈরি করুন
model = tf.keras.Sequential([
tf.keras.layers.Conv2D(filters=64, kernel_size=2, padding='same', activation='relu', input_shape=(28,28,1)),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Conv2D(filters=32, kernel_size=2, padding='same', activation='relu'),
tf.keras.layers.MaxPooling2D(pool_size=2),
tf.keras.layers.Dropout(0.3),
tf.keras.layers.Flatten(),
tf.keras.layers.Dense(256, activation=None), # No activation on final dense layer
tf.keras.layers.Lambda(lambda x: tf.math.l2_normalize(x, axis=1)) # L2 normalize embeddings
])
ট্রেন এবং মূল্যায়ন
# Compile the model
model.compile(
optimizer=tf.keras.optimizers.Adam(0.001),
loss=tfa.losses.TripletSemiHardLoss())
# Train the network
history = model.fit(
train_dataset,
epochs=5)
Epoch 1/5 1875/1875 [==============================] - 21s 5ms/step - loss: 0.6983 Epoch 2/5 1875/1875 [==============================] - 8s 4ms/step - loss: 0.4723 Epoch 3/5 1875/1875 [==============================] - 8s 4ms/step - loss: 0.4298 Epoch 4/5 1875/1875 [==============================] - 8s 4ms/step - loss: 0.4139 Epoch 5/5 1875/1875 [==============================] - 8s 4ms/step - loss: 0.3938
# Evaluate the network
results = model.predict(test_dataset)
# Save test embeddings for visualization in projector
np.savetxt("vecs.tsv", results, delimiter='\t')
out_m = io.open('meta.tsv', 'w', encoding='utf-8')
for img, labels in tfds.as_numpy(test_dataset):
[out_m.write(str(x) + "\n") for x in labels]
out_m.close()
try:
from google.colab import files
files.download('vecs.tsv')
files.download('meta.tsv')
except:
pass
এম্বেডিং প্রজেক্টর
ভেক্টর এবং মেটাডেটা ফাইল লোড এবং এখানে ভিজ্যুয়ালাইজ করা যেতে পারে: https://projector.tensorflow.org/
UMAP এর সাথে ভিজ্যুয়ালাইজ করা হলে আপনি আমাদের এমবেড করা পরীক্ষার ডেটার ফলাফল দেখতে পারেন: