PyTorch - RuntimeError: значение bool для Tensor с более чем одним значением является неоднозначным - PullRequest
0 голосов
/ 14 января 2019

Я обучил GAN на наборе данных MNIST, и я пытаюсь создать очень простой пользовательский интерфейс, который имеет кнопку для генерации и отображения новых изображений. Когда я нажимаю кнопку, я звоню генератору, передаю новый скрытый вектор методу forward и продолжаю получать это сообщение об ошибке.

def update_picture():
    print('press')
    _, img = netG.forward(create_noise(1))
    img = img.detach().cpu().numpy()[0][0]
    img = ((img - img.min()) * (1 / img.max() - img.min()) * 255)
    photo = ImageTk.PhotoImage(image=Image.fromarray(img))
    label = Label(image=photo).grid(row=0, column=0)


tk = Tk()

photo = ImageTk.PhotoImage(image=Image.fromarray(img))
label = Label(image=photo).grid(row=0, column=0)

create = Button(text="update", command=update_picture).grid(row=1, column=0)

tk.mainloop()

И когда я нажимаю кнопку для создания нового изображения, я получаю эту ошибку:

Traceback (most recent call last):
  File "C:\Users\daman\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 1705, in __call__
return self.func(*args)
  File "C:/Users/daman/PycharmProjects/untitled4/DCGAN_MNIST.py", line 243, in update_picture
_, img = netG.forward(create_noise(1))
  File "C:/Users/daman/PycharmProjects/untitled4/DCGAN_MNIST.py", line 104, in create_noise
return Variable(torch.zeros(b, feature_space, 1, 1).normal_(0, 1))
  File "C:\Users\daman\AppData\Local\Programs\Python\Python37\lib\tkinter\__init__.py", line 315, in __init__
if not master:
RuntimeError: bool value of Tensor with more than one value is ambiguous

Ошибка восходит к моей функции создания шума:

def create_noise(b):
    return Variable(torch.zeros(b, feature_space, 1, 1).normal_(0, 1))

Есть идеи, почему это происходит и что на самом деле означает эта ошибка? Я могу опубликовать больше кода, если это необходимо.

1 Ответ

0 голосов
/ 15 января 2019

Я думаю, у меня проблема.

Variable - это имя, зарезервированное для torch и tkinter. Если вы делаете from ... import *, вы можете получить Variable от tkinter. Поскольку ошибка исходит от этой строки , Variable в вашем коде от tkinter. Однако, поскольку вы называете его с Tensor внутри, я предполагаю, что вы хотели устаревшую версию факела Variable.

Простое удаление Variable в create_noise должно сделать всю работу.

def create_noise(b):
    return torch.zeros(b, feature_space, 1, 1).normal_(0, 1)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...