模型的训练和测试--如何加快速度

1.一开始怀疑keras那边没有,调用GPU进行测试

但是只要我们代码里面或者输入的语句有用到 CUDA_VISIBLE_DEVICES = xxx 网络本身就会调用GPU.

2.model.train() 和 model.eval()

https://blog.csdn.net/Z_lbj/article/details/79672888

主要是针对model 在训练时和评价时不同的 Batch Normalization 和 Dropout 方法模式。

https://blog.csdn.net/jinxin521125/article/details/78435899

eval()时,pytorch会自动把BN和DropOut固定住,不会取平均,而是用训练好的值。

不然的话,一旦test的batch_size过小,很容易就会被BN层导致生成图片颜色失真极大。

https://zhuanlan.zhihu.com/p/26893755

model.eval(),让model变成测试模式,对dropout和batch normalization的操作在训练和测试的时候是不一样的

经过测试发现:不带eval()的效果非常差,一开始的mAP只有41%, 而带上的话测试的mAP开始有56%

3.maxpooling和卷积层的公式

# nn.MaxPool2d()
m = nn.MaxPool2d(kernel_size=3, stride=2)
input = torch.randn(20, 16, 50, 32)
output = m(input)
print(output.size())    # (20,16, 24, 15)

m = nn.MaxPool2d(kernel_size=(3, 2), stride=(2, 1))
output = m(input)
print(output.size())    # (10,16,24,31)

假设
输入数据维度为W*W
Filter大小 F×F
步长 S
padding的像素数 P
可以得出

N = (W − F + 2P )/S+1

输出大小为 N×N

你可能感兴趣的:(图像检索,pytorch)