本頁面由 Cloud Translation API 翻譯而成。
Switch to English

使用嵌入投影機在TensorBoard可視化數據

查看上TensorFlow.org 在谷歌Colab運行 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資料

我們將使用來自IMDB 25000電影評論的數據集,由情感標記(正極/負極)。評論已經預處理,每次審查被編碼為字索引(整數)的序列。為了方便起見,字由總頻率在數據集中索引,以使得例如整數“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埋層

一個Keras埋層可用於訓練嵌入在你的volcabulary每個單詞。每個字(在本例或子字)將與將由模型被訓練的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投影機是分析你的數據,看到相互嵌入值一大利器。儀表板允許搜索特定的術語和突出的話,那是在附近的嵌入空間。從這個例子我們可以看出,韋斯·安德森希區柯克都比較中性的術語,但它們在不同的上下文中引用。

希區柯克更接近關聯類的字眼nightmare這可能涉及到他的工作在恐怖電影。雖然安德森更接近字heart ,反映了他的感人風格。