ترجمت واجهة Cloud Translation API‏ هذه الصفحة.
Switch to English

تصور البيانات باستخدام جهاز العرض المضمّن في TensorBoard

عرض على TensorFlow.org تشغيل في Google Colab عرض المصدر على جيثب

نظرة عامة

باستخدام جهاز العرض TensorBoard Embedding ، يمكنك تمثيل رسومات عالية الأبعاد بشكل رسومي. يمكن أن يكون ذلك مفيدًا في تصور طبقات التضمين وفحصها وفهمها.

لقطة شاشة لجهاز العرض المضمّن

في هذا البرنامج التعليمي ، سوف تتعلم كيف تصور هذا النوع من الطبقة المدربة.

اقامة

في هذا البرنامج التعليمي ، سنستخدم TensorBoard لتصور طبقة التضمين التي تم إنشاؤها لتصنيف بيانات مراجعة الفيلم.

 try:
  # %tensorflow_version only exists in Colab.
  %tensorflow_version 2.x
except Exception:
  pass

%load_ext tensorboard
 
 import os
import tensorflow as tf
import tensorflow_datasets as tfds
from tensorboard.plugins import projector

 

بيانات IMDB

سنستخدم مجموعة بيانات من 25000 مراجعة أفلام من IMDB ، مصنفة حسب المشاعر (إيجابية / سلبية). تمت معالجة المراجعات مسبقًا ، ويتم تشفير كل مراجعة كتسلسل من فهارس الكلمات (أعداد صحيحة). من أجل الراحة ، يتم فهرسة الكلمات من خلال التردد الكلي في مجموعة البيانات ، بحيث على سبيل المثال فإن الرقم الصحيح "3" يشفر ثالث أكثر الكلمات تكرارًا في البيانات. يسمح هذا بعمليات تصفية سريعة مثل: "لا تفكر إلا في الكلمات العشرة الأوائل الأكثر شيوعًا ، ولكن استبعد أهم 20 كلمة شائعة".

كمصطلح ، "0" لا تعني كلمة معينة ، ولكن بدلاً من ذلك تستخدم لترميز أي كلمة غير معروفة. في وقت لاحق من البرنامج التعليمي ، سنقوم بإزالة هذا الصف من التصور.

 (train_data, test_data), info = tfds.load(
    "imdb_reviews/subwords8k",
    split=(tfds.Split.TRAIN, tfds.Split.TEST),
    with_info=True,
    as_supervised=True,
)
encoder = info.features["text"].encoder

# shuffle and pad the data.
train_batches = train_data.shuffle(1000).padded_batch(
    10, padded_shapes=((None,), ())
)
test_batches = test_data.shuffle(1000).padded_batch(
    10, padded_shapes=((None,), ())
)
train_batch, train_labels = next(iter(train_batches))

 

طبقة تضمين Keras

يمكن استخدام طبقة Keras Embedding لتدريب تضمين لكل كلمة في قائمة الكلمات الخاصة بك. سيتم ربط كل كلمة (أو كلمة فرعية في هذه الحالة) بمتجه 16-الأبعاد (أو التضمين) الذي سيتم تدريبه بواسطة النموذج.

انظر هذا البرنامج التعليمي لمعرفة المزيد حول تضمين الكلمات.

 # Create an embedding layer
embedding_dim = 16
embedding = tf.keras.layers.Embedding(encoder.vocab_size, embedding_dim)
# Train this embedding as part of a keras model
model = tf.keras.Sequential(
    [
        embedding, # The embedding layer should be the first layer in a model.
        tf.keras.layers.GlobalAveragePooling1D(),
        tf.keras.layers.Dense(16, activation="relu"),
        tf.keras.layers.Dense(1),
    ]
)

# Compile model
model.compile(
    optimizer="adam",
    loss=tf.keras.losses.BinaryCrossentropy(from_logits=True),
    metrics=["accuracy"],
)

# Train model
history = model.fit(
    train_batches, epochs=1, validation_data=test_batches, validation_steps=20
)
 
2500/2500 [==============================] - 13s 5ms/step - loss: 0.5330 - accuracy: 0.6769 - val_loss: 0.4043 - val_accuracy: 0.7800

حفظ البيانات على TensorBoard

يقرأ TensorBoard الموتر والبيانات الوصفية من مشروعات tensorflow الخاصة بك من السجلات الموجودة في دليل log_dir المحدد. في هذا البرنامج التعليمي ، /logs/imdb-example/ .

لتصور هذه البيانات ، سنحفظ نقطة تحقق في هذا الدليل ، جنبًا إلى جنب مع البيانات الوصفية لفهم الطبقة التي يجب تصورها.

 # Set up a logs directory, so Tensorboard knows where to look for files
log_dir='/logs/imdb-example/'
if not os.path.exists(log_dir):
    os.makedirs(log_dir)

# Save Labels separately on a line-by-line manner.
with open(os.path.join(log_dir, 'metadata.tsv'), "w") as f:
  for subwords in encoder.subwords:
    f.write("{}\n".format(subwords))
  # Fill in the rest of the labels with "unknown"
  for unknown in range(1, encoder.vocab_size - len(encoder.subwords)):
    f.write("unknown #{}\n".format(unknown))


# Save the weights we want to analyse as a variable. Note that the first
# value represents any unknown word, which is not in the metadata, so
# we will remove that value.
weights = tf.Variable(model.layers[0].get_weights()[0][1:])
# Create a checkpoint from embedding, the filename and key are
# name of the tensor.
checkpoint = tf.train.Checkpoint(embedding=weights)
checkpoint.save(os.path.join(log_dir, "embedding.ckpt"))

# Set up config
config = projector.ProjectorConfig()
embedding = config.embeddings.add()
# The name of the tensor will be suffixed by `/.ATTRIBUTES/VARIABLE_VALUE`
embedding.tensor_name = "embedding/.ATTRIBUTES/VARIABLE_VALUE"
embedding.metadata_path = 'metadata.tsv'
projector.visualize_embeddings(log_dir, config)
 
 %tensorboard --logdir /logs/imdb-example/
 

تحليل

يعد TensorBoard Projector أداة رائعة لتحليل بياناتك ورؤية قيم التضمين المتعلقة ببعضها البعض. تسمح لوحة التحكم بالبحث عن مصطلحات محددة ، وتسلط الضوء على الكلمات القريبة في مساحة التضمين. من هذا المثال يمكننا أن نرى أن Wes Anderson و Alfred Hitchcock مصطلحان محايدان إلى حد ما ، ولكن يتم الرجوع إليهما في سياقات مختلفة.

يرتبط هيتشكوك ارتباطًا وثيقًا بكلمات مثل nightmare ، الذي يرتبط على الأرجح بعمله في أفلام الرعب. في حين أن أندرسون أقرب إلى كلمة heart ، مما يعكس أسلوبه الحميم.