我在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))
有任何想法为什么会发生这种错误以及该错误实际上意味着什么?如果需要,我可以发布更多代码。
答案 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)