Trang này được dịch bởi Cloud Translation API.
Switch to English

Hình dung dữ liệu bằng cách sử dụng máy chiếu Nhúng trong TensorBoard

Xem trên TensorFlow.org Chạy trong Google Colab Xem nguồn trên GitHub

Tổng quat

Sử dụng TensorBoard Nhúng chiếu, bạn có thể đại diện đồ họa embeddings chiều cao. Điều này có thể hữu ích trong việc hình dung, kiểm tra và tìm hiểu các lớp nhúng của bạn.

Ảnh chụp màn hình của máy chiếu nhúng

Trong hướng dẫn này, bạn sẽ học cách hình dung kiểu này lớp đào tạo.

Thiết lập

Đối với hướng dẫn này, chúng tôi sẽ sử dụng TensorBoard để hình dung một lớp nhúng tạo để phân loại dữ liệu xét phim.

 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 dữ liệu

Chúng tôi sẽ sử dụng một tập dữ liệu của 25.000 đánh giá phim từ IMDB, dán nhãn bằng tình cảm (tích cực / tiêu cực). Nhận xét đã được xử lý trước, và mỗi lần xem xét được mã hóa như là một chuỗi các chỉ số từ (số nguyên). Để thuận tiện, từ được lập chỉ mục bởi tần số tổng thể trong tập dữ liệu, do đó ví dụ các số nguyên "3" mã hóa thứ 3 từ thường gặp nhất trong các dữ liệu. Điều này cho phép cho các hoạt động lọc nhanh chóng như: "chỉ xem xét phía trên 10.000 từ phổ biến nhất, nhưng loại bỏ top 20 từ phổ biến nhất".

Như một quy ước, "0" không đại diện cho một từ cụ thể, nhưng thay vì được sử dụng để mã hóa từ lạ. Sau đó trong hướng dẫn này, chúng tôi sẽ loại bỏ hàng này từ trực quan.

 (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 Nhúng lớp

Một lớp Keras Nhúng thể được sử dụng để đào tạo một nhúng cho mỗi từ trong volcabulary của bạn. Mỗi từ (hoặc sub-word trong trường hợp này) sẽ được liên kết với một vector 16 chiều (hoặc nhúng) sẽ được đào tạo bởi các mô hình.

Xem hướng dẫn này để tìm hiểu thêm về embeddings từ.

 # 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

Lưu dữ liệu cho TensorBoard

TensorBoard đọc tensors và siêu dữ liệu từ các dự án tensorflow của bạn từ các bản ghi trong định log_dir thư mục. Đối với hướng dẫn này, chúng tôi sẽ sử dụng /logs/imdb-example/ .

Để hiển thị dữ liệu này, chúng tôi sẽ tiết kiệm một trạm kiểm soát vào thư mục đó, cùng với siêu dữ liệu để hiểu được các lớp để hình dung.

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

nghiên cứu

Các TensorBoard chiếu là một công cụ tuyệt vời cho việc phân tích dữ liệu của bạn và nhìn thấy giá trị nhúng tương đối với nhau. Các bảng điều khiển cho phép tìm kiếm điều kiện cụ thể, và điểm nổi bật từ mà nằm ở gần đó trong không gian nhúng. Từ ví dụ này chúng ta có thể thấy rằng Wes Anderson và Alfred Hitchcock là cả về khá trung lập, nhưng họ được tham chiếu trong ngữ cảnh khác nhau.

Hitchcock là chặt chẽ hơn liên quan đến những từ như nightmare , mà nhiều khả năng liên quan đến công việc của mình trong phim kinh dị. Trong khi Anderson là gần gũi hơn với các từ heart , phản ánh phong cách ấm áp của mình.