如何解决Pytorch 自动编码器打印精度位置参数错误
我得到了这个自动编码器
class AE(nn.Module):
def __init__(self,**kwargs):
super(AE,self).__init__()
self.encoder_hidden_layer = nn.Linear(
in_features=kwargs["input_shape"],out_features=128
)
self.encoder_output_layer = nn.Linear(
in_features=128,out_features=128
)
self.decoder_hidden_layer = nn.Linear(
in_features=128,out_features=128
)
self.decoder_output_layer = nn.Linear(
in_features=128,out_features=kwargs["input_shape"]
)
def forward(self,features):
activation = self.encoder_hidden_layer(features)
activation = torch.relu(activation)
code = self.encoder_output_layer(activation)
code = torch.sigmoid(code)
activation = self.decoder_hidden_layer(code)
activation = torch.relu(activation)
activation = self.decoder_output_layer(activation)
reconstructed = torch.sigmoid(activation)
return reconstructed
我正在尝试构建一个准确度计算器
with torch.no_grad():
for batch_features in test_loader:
batch_features = batch_features[0]
test_examples = batch_features.view(-1,784)
reconstruction = model(test_examples)
images,labels = data[0].to(device),data[1].to(device)
print(labels)
outputs_auto = AE(images.to(device))
_,predicted_auto = torch.max(outputs_auto.data,1)
total += labels.size(0)
correct += (predicted_auto == labels).sum().item()
break
print('Accuracy of the network on the 10000 test images: %d %%' % (
100 * correct / total))
但它显示了这种类型的错误。我曾尝试对代码进行一些修改,但失败了。我是自动编码器的新手
---> 21 outputs_auto = AE(images.to(device))
22 _,1)
23 total += labels.size(0)
TypeError: __init__() takes 1 positional argument but 2 were given
我只想以百分比形式打印准确度。如果您需要更多代码,请要求编辑此问题
解决方法
调用 outputs_auto = AE(images.to(device))
时,您正在调用 AE
的 __init__
函数。而您应该做的是调用模块的转发功能(即__call__
)。因此,您应该首先初始化您的自动编码器,然后使用所需的输入调用它。您还需要根据 input_shape
模块的实现提供 AE
。例如你可以这样做:
autoencoder = AE(input_shape=100).to(device)
这是让您开始使用虚拟数据进行测试循环和精度测量:
test_set = TensorDataset(torch.rand(16,28,28),torch.rand(16,1))
test_loader = DataLoader(test_set)
correct = 0
with torch.no_grad():
for data in test_loader:
images,labels = data[0].to(device),data[1].to(device)
images = images.reshape(images.shape[0],-1)
outputs_auto = autoencoder(images)
predicted_class = torch.argmax(outputs_auto)
correct += (predicted_class == labels).sum().item()
print('Accuracy of the network %.1f%%' % (100*correct/len(test_loader)))
用相关的数据加载器替换 test_loader
。还要将 input_shape
更改为正确的大小。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。