Несовпадение значений после присвоения значений тензору по индексуPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Несовпадение значений после присвоения значений тензору по индексу

Сообщение Anonymous »

Я пишу обучающий код PyTorch, который создает класс алгоритма. Есть шаг, на котором необходимо присвоить некоторые значения внутреннему тензору. Однако даже если код состоит всего из двух строк, ошибка есть. Я обнаружил, что значения присвоенного тензора отличаются от значения присваивания.
Вот код класса:

Код: Выделить всё

class PRODEN(Algorithm):
"""
PRODEN
Reference: Progressive identification of true labels for partial-label learning, ICML 2020.
"""

def __init__(self, input_shape, train_givenY, hparams):
super(PRODEN, self).__init__(input_shape, train_givenY, hparams)
self.featurizer = networks.Featurizer(input_shape, self.hparams)
self.classifier = networks.Classifier(
self.featurizer.n_outputs,
self.num_classes)

self.network = nn.Sequential(self.featurizer, self.classifier)
self.optimizer = torch.optim.Adam(
self.network.parameters(),
lr=self.hparams["lr"],
weight_decay=self.hparams['weight_decay']
)
train_givenY = torch.from_numpy(train_givenY)
tempY = train_givenY.sum(dim=1).unsqueeze(1).repeat(1, train_givenY.shape[1])
label_confidence = train_givenY.float()/tempY
self.label_confidence = label_confidence

def update(self, minibatches):
_, x, strong_x, partial_y, _, index = minibatches
loss = self.rc_loss(self.predict(x), index)
self.optimizer.zero_grad()
loss.backward()
self.optimizer.step()
self.confidence_update(x, partial_y, index)
return {'loss': loss.item()}

def rc_loss(self, outputs, index):
device = "cuda" if index.is_cuda else "cpu"
self.label_confidence = self.label_confidence.to(device)
logsm_outputs = F.log_softmax(outputs, dim=1)
#print(self.label_confidence.is_cuda)
final_outputs = logsm_outputs * self.label_confidence[index, :]
average_loss = - ((final_outputs).sum(dim=1)).mean()
return average_loss

def predict(self, x):
return self.network(x)

def confidence_update(self, batchX, batchY, batch_index):
with torch.no_grad():
batch_outputs = self.predict(batchX)
temp_un_conf = F.softmax(batch_outputs, dim=1)
'''the problematic codes begin'''
self.label_confidence[batch_index, :] = temp_un_conf * batchY # un_confidence stores the weight of each example
'''the problematic codes ends'''
base_value = self.label_confidence.sum(dim=1).unsqueeze(1).repeat(1, self.label_confidence.shape[1])
self.label_confidence = self.label_confidence / base_value
Проблема в trust_update . Я считаю, что ценность

Код: Выделить всё

self.label_confidence[batch_index, :]
отличается от

Код: Выделить всё

temp_un_conf * batchY
после этого задания

Код: Выделить всё

self.label_confidence[batch_index, :] = temp_un_conf * batchY
только для нескольких примеров, но одинаково для большинства примеров. Например, для размера пакета 1024 на первой итерации имеется около 4 примеров, и это становится потом крупнее. Меня очень расстраивает эта проблема, и я пробовал многое:
  • Проблема касается только CIFAR10, но не существует для других наборов данных.
  • Тип данных для всех тензоров — Float32.
  • Все тензоры находятся на графическом процессоре.
Что не так с моим кодом?

Подробнее здесь: https://stackoverflow.com/questions/789 ... r-by-index
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • ModX Revolution: сортировка по индексу меню папки, затем индексу меню элемента
    Anonymous » » в форуме Php
    0 Ответы
    54 Просмотры
    Последнее сообщение Anonymous
  • Несовпадение контрольных сумм между клиентом CPP и Cloudflare Worker
    Anonymous » » в форуме C++
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Несовпадение при печати/сохранении в PDF
    Anonymous » » в форуме CSS
    0 Ответы
    8 Просмотры
    Последнее сообщение Anonymous
  • Несовпадение и неточное наведение боковой панели
    Anonymous » » в форуме CSS
    0 Ответы
    12 Просмотры
    Последнее сообщение Anonymous
  • Несовпадение в двумерной функции CUDA-FFTShift
    Anonymous » » в форуме Python
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»