PyTorch-RuntimeError:具有多个值的Tensor的布尔值不明确

时间:2019-01-14 20:43:06

标签: python tkinter pytorch

我在MNIST数据集上训练了GAN,我试图制作一个非常简单的UI,该UI带有一个用于生成和显示新图像的按钮。当我按下按钮时,我调用了生成器,并将新的潜在向量传递给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 :(得分:1)

我想我有问题。

Variable是在手电筒和tkinter中保留的名称。如果您正在做from ... import *,则可能会从tkinter获得Variable。由于错误是来自this line的,因此代码中的Variable来自tkinter。但是,由于您使用的内部带有Tensor进行调用,因此我猜您希望使用deprecated version of torch's Variable

只需删除Variable中的create_noise就可以了。

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