Как target [y == l] = label работает над маркировкой набора данных make_blobs в руководстве по Pytorch? - PullRequest
0 голосов
/ 02 апреля 2020

Я изучаю PyTorch с помощью этого блога: [PyTorch Введение в нейронную сеть] (https://medium.com/biaslyai/pytorch-introduction-to-neural-network-feedforward-neural-network-model-e7231cff47cb) Я нашел этот фрагмент кода сбивающим с толку:

from sklearn.datasets import make_blobs
def blob_label(y, label, loc): # assign labels
    target = numpy.copy(y)
    for l in loc:
        target[y == l] = label
    return target
x_train, y_train = make_blobs(n_samples=40, n_features=2, cluster_std=1.5, shuffle=True)
x_train = torch.FloatTensor(x_train)
y_train = torch.FloatTensor(blob_label(y_train, 0, [0]))
y_train = torch.FloatTensor(blob_label(y_train, 1, [1,2,3]))
x_test, y_test = make_blobs(n_samples=10, n_features=2, cluster_std=1.5, shuffle=True)
x_test = torch.FloatTensor(x_test)
y_test = torch.FloatTensor(blob_label(y_test, 0, [0]))
y_test = torch.FloatTensor(blob_label(y_test, 1, [1,2,3]))

как именно target[y == l] = label здесь работает? как эта строка кода присваивает данные 1 и 0? Спасибо!

1 Ответ

0 голосов
/ 02 апреля 2020

Это логические или «маскирующие» индексные массивы, см. do c, чтобы узнать больше

>>> y = torch.arange(9).reshape(3,3)
>>> y
tensor([[0, 1, 2],
        [3, 4, 5],
        [6, 7, 8]])
>>> target = np.copy(y)

, поэтому target[y == l] = label
y == l дают нам логический массив типа ( если l = 0)

>>> y == 0
tensor([[ True, False, False],
        [False, False, False],
        [False, False, False]])

, и мы можем получить доступ и присвоить значение, используя логический массив y == 0

>>> target[y == 0]
array([0], dtype=int64)

>>> target[y == 0] = 999
>>> target
array([[999,   1,   2],
       [  3,   4,   5],
       [  6,   7,   8]], dtype=int64)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...