Bu sayfa, Cloud Translation API ile çevrilmiştir.
Switch to English

TensorBoard'daki Gömme Projektörünü Kullanarak Verileri Görselleştirme

TensorFlow.org üzerinde görüntüle Google Colab'da yayınla Kaynağı GitHub'da görüntüle

genel bakış

TensorBoard Gömme Projektörünü kullanarak, yüksek boyutlu düğünleri grafik olarak temsil edebilirsiniz. Bu, katıştırma katmanlarınızı görselleştirme, inceleme ve anlamada yardımcı olabilir.

Gömme projektörün ekran görüntüsü

Bu öğreticide, bu tür eğitilmiş katmanı nasıl görselleştireceğinizi öğreneceksiniz.

Kurmak

Bu eğitimde, film inceleme verilerini sınıflandırmak için oluşturulan bir yerleştirme katmanını görselleştirmek için TensorBoard'u kullanacağız.

 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 Verileri

Duygu (pozitif / negatif) ile etiketlenmiş IMDB'den 25.000 film incelemesinden oluşan bir veri kümesi kullanacağız. İncelemeler önceden işlenmiştir ve her inceleme bir dizi sözcük dizini (tamsayılar) olarak kodlanmıştır. Kolaylık olması açısından, sözcükler veri kümesindeki toplam frekansa göre endekslenir, böylece örneğin "3" tamsayı verilerdeki en sık 3. kelimeyi kodlar. Bu, hızlı filtreleme işlemlerine izin verir: "yalnızca en sık kullanılan 10.000 kelimeyi göz önünde bulundurun, ancak en yaygın 20 kelimeyi kaldırın".

Kural olarak, "0" belirli bir kelimeyi temsil etmez, bunun yerine bilinmeyen bir kelimeyi kodlamak için kullanılır. Eğitimin ilerleyen bölümlerinde bu satırı görselleştirmeden kaldıracağız.

 (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 Gömme Katmanı

Bir Keras Gömme Katmanı , volcabulary'nizdeki her sözcük için bir gömme eğitmek için kullanılabilir. Her kelime (veya bu durumda alt kelime), model tarafından eğitilecek 16 boyutlu bir vektörle (veya gömme) ilişkilendirilecektir.

Kelime düğünleri hakkında daha fazla bilgi edinmek için bu eğiticiye bakın.

 # 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 için veri kaydetme

TensorBoard, tensorflow projelerinizdeki tensörleri ve meta verileri belirtilen log_dir dizinindeki günlüklerden okur. Bu eğitim için /logs/imdb-example/ kullanacağız.

Bu verileri görselleştirmek için, hangi katmanı görselleştireceğinizi anlamak için meta verilerle birlikte bu dizine bir kontrol noktası kaydedeceğiz.

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

analiz

TensorBoard Projektör, verilerinizi analiz etmek ve birbirlerine göre gömme değerlerini görmek için harika bir araçtır. Gösterge tablosu belirli terimleri aramaya izin verir ve gömme alanında yakınlarda bulunan kelimeleri vurgular. Bu örnekten, Wes Anderson ve Alfred Hitchcock'un her ikisi de oldukça tarafsız terimler olduğunu, ancak farklı bağlamlarda atıfta bulunduklarını görebiliriz.

Hitchcock, muhtemelen korku filmlerindeki çalışmalarıyla ilgili olan nightmare gibi kelimelere daha yakındır. Anderson, heart ısınması stilini yansıtan heart kelimesine daha yakınken.