pytorch不';我们不能给出预期的产出

pytorch不';我们不能给出预期的产出,pytorch,Pytorch,首先,利用CNN模型对大量数据进行分类。然后,我尝试从第一步开始对正确分类的数据进行预测,预计准确率为100%。然而,我发现结果是不稳定的,有时99+%,但不是100%。有人知道我的代码有什么问题吗?提前非常感谢,这已经困扰了我好几天~~ 火炬。版本 “0.3.1.post2” 将numpy导入为np 进口火炬 导入torch.nn作为nn 从torch.autograd导入变量 n=2000 data=np.random.randn(n,1,10,10) label=np.random.ran

首先,利用CNN模型对大量数据进行分类。然后,我尝试从第一步开始对正确分类的数据进行预测,预计准确率为100%。然而,我发现结果是不稳定的,有时99+%,但不是100%。有人知道我的代码有什么问题吗?提前非常感谢,这已经困扰了我好几天~~

火炬。版本

“0.3.1.post2”

将numpy导入为np
进口火炬
导入torch.nn作为nn
从torch.autograd导入变量
n=2000
data=np.random.randn(n,1,10,10)
label=np.random.randint(2,size=(n,))
def测试pred(模型、数据测试、标签测试):
数据批次=数据测试
标签\批次=标签\测试
images=torch.autograd.Variable(torch.FloatTensor(数据批处理))
labels=torch.autograd.Variable(torch.FloatTensor(标签与批次))
输出=模型(图像)
_,预测=火炬最大值(输出数据,1)
correct=(np.array(predicted)=labels\u batch.sum()
label_pred=np.数组(预测)
acc=正确/长度(标签测试)
打印(“acc:,acc)
返回acc,标签_pred
类别CNN(nn.模块):
定义初始化(自):
超级(美国有线电视新闻网,赛尔夫)。\uuuuu init\uuuuuuuu()
self.layer1=nn.Sequential(
nn.Conv2d(1,16,内核大小=5,填充=2),
nn.2D(16),
nn.ReLU(),
nn.MaxPool2d(2))
self.layer2=nn.Sequential(
nn.Conv2d(16,32,内核大小=5,填充=2),
nn.2D(32),
nn.ReLU(),
nn.MaxPool2d(2))
self.fc=nn.线性(128,2)
def前进(自身,x):
out=自身第1层(x)
out=自身。第2层(out)
out=out.view(out.size(0),-1)
out=self.fc(out)
返回
cnn=cnn()
[\uu,label\u pred]=测试pred(cnn,数据,label)
打印(“附件:,np.平均值(标签_pred==标签))
#鉴于前一步中正确分类的数据,希望获得100%的准确率
#为什么有时不能给出100%的准确度?
打印(“使用选定的数据大小{}:”.format(数据[label_pred==label].shape))
_,u=test\u pred(cnn,数据[label\u pred==label],label[label\u pred==label])
输出:

acc:0.482

Acc:0.482

使用选定的数据大小(964,1,10,10):


acc:0.997925311203195

似乎您没有将网络设置为评估模式,这可能会导致一些问题,尤其是BatchNorm层。做

cnn = CNN()
cnn.eval()

它应该能工作。

就是这样,我试过了,完美地解决了问题。非常感谢。