Halaman ini diterjemahkan oleh Cloud Translation API.
Switch to English

Memvisualisasikan Data menggunakan Proyektor Penyematan dalam TensorBoard

Lihat di TensorFlow.org Jalankan di Google Colab Lihat sumber di GitHub

Gambaran

Dengan menggunakan TensorBoard Embedding Projector , Anda dapat secara grafis mewakili pernikahan dimensi tinggi. Ini bisa membantu dalam memvisualisasikan, memeriksa, dan memahami lapisan penyematan Anda.

Cuplikan layar proyektor penyemat

Dalam tutorial ini, Anda akan belajar bagaimana memvisualisasikan jenis lapisan terlatih ini.

Mempersiapkan

Untuk tutorial ini, kita akan menggunakan TensorBoard untuk memvisualisasikan lapisan penyematan yang dihasilkan untuk mengklasifikasikan data ulasan film.

 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

 

Data IMDB

Kami akan menggunakan dataset 25.000 film ulasan dari IMDB, dilabeli oleh sentimen (positif / negatif). Ulasan telah diproses sebelumnya, dan setiap ulasan dikodekan sebagai urutan indeks kata (integer). Untuk kenyamanan, kata-kata diindeks oleh frekuensi keseluruhan dalam dataset, sehingga misalnya integer "3" mengkodekan kata ke-3 paling sering dalam data. Ini memungkinkan operasi penyaringan cepat seperti: "hanya mempertimbangkan 10.000 kata paling umum teratas, tetapi menghilangkan 20 kata paling umum teratas".

Sebagai konvensi, "0" tidak berarti kata tertentu, tetapi digunakan untuk menyandikan kata yang tidak dikenal. Nanti di tutorial, kita akan menghapus baris ini dari visualisasi.

 (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))

 

Lapisan Embedding Keras

Lapisan Embedding Keras dapat digunakan untuk melatih embedding untuk setiap kata dalam kamus Anda. Setiap kata (atau sub-kata dalam kasus ini) akan dikaitkan dengan vektor 16-dimensi (atau penyematan) yang akan dilatih oleh model.

Lihat tutorial ini untuk mempelajari lebih lanjut tentang embeddings kata.

 # 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

Menyimpan data untuk TensorBoard

TensorBoard membaca tensor dan metadata dari proyek tensorflow Anda dari log di direktori log_dir ditentukan. Untuk tutorial ini, kita akan menggunakan /logs/imdb-example/ .

Untuk memvisualisasikan data ini, kami akan menyimpan pos pemeriksaan ke direktori itu, bersama dengan metadata untuk memahami lapisan mana yang akan divisualisasikan.

 # 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/
 

Analisis

Proyektor TensorBoard adalah alat yang hebat untuk menganalisis data Anda dan melihat nilai embedding satu sama lain. Dasbor memungkinkan mencari istilah tertentu, dan menyoroti kata-kata yang ada di dekatnya di ruang penyematan. Dari contoh ini kita dapat melihat bahwa Wes Anderson dan Alfred Hitchcock keduanya istilah yang agak netral, tetapi mereka dirujuk dalam konteks yang berbeda.

Hitchcock lebih dekat dikaitkan dengan kata-kata seperti nightmare , yang kemungkinan berkaitan dengan karyanya dalam film horor. Sementara Anderson lebih dekat dengan kata heart , mencerminkan gayanya yang mengharukan.