דף זה תורגם על ידי Cloud Translation API.
Switch to English

הדמיה של נתונים באמצעות מקרן ההטבעה ב- TensorBoard

צפה ב- TensorFlow.org הפעל בגוגל קולאב צפה במקור ב- GitHub

סקירה כללית

באמצעות מקרן ההטמעה של TensorBoard , תוכלו לייצג גרפאות הטמעה גבוהה. זה יכול להיות מועיל בהדמיה, בחינה והבנת שכבות ההטבעה שלך.

צילום מסך של מקרן ההטבעה

במדריך זה תלמד כיצד לדמיין שכבה מאומנת מסוג זה.

להכין

לצורך הדרכה זו נשתמש ב- 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

נשתמש במערך נתונים של 25,000 ביקורות על סרטים מ- IMDB, שתויג על ידי סנטימנט (חיובי / שלילי). ביקורות עובדו מראש וכל ביקורת מקודדת כרצף של אינדקסי מילים (מספרים שלמים). מטעמי נוחות, מילים מתווספות לפי התדירות הכוללת במערך הנתונים, כך למשל המספר השלם "3" מקודד את המילה השלישית בתדירות הגבוהה ביותר בנתונים. זה מאפשר פעולות סינון מהירות כגון: "שקול רק את 10,000 המילים הנפוצות ביותר, אך חסל את 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 Embedding Layer

ניתן להשתמש בשכבת הטמעה של Keras לאימון הטבעה לכל מילה באוצר שלך. כל מילה (או מילת משנה במקרה זה) תשויך לווקטור 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 קורא טנסורים ומטא נתונים מפרוייקטים של זרימת tensor שלך log_dir בספריית 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 הוא כלי נהדר לניתוח הנתונים שלך ולראות ערכי הטבעה ביחס זה לזה. לוח המחוונים מאפשר חיפוש אחר מונחים ספציפיים, ומדגיש מילים שנמצאות בקרבת מקום במרחב ההטבעה. מדוגמא זו אנו יכולים לראות כי ווס אנדרסון ואלפרד היצ'קוק הם שניהם מונחים ניטרליים למדי, אך כי הם מתייחסים בהקשרים שונים.

היצ'קוק קשור קרוב יותר למילים כמו nightmare , אשר ככל הנראה מתייחס לעבודה שלו בסרטי אימה. ואילו אנדרסון קרוב יותר למילה heart , ומשקף את סגנונו מחמם הלב.