52. 一些Q&A

Q1: 如果要提高泛化性,就有可能增加数据?调参的意思是不是最大了?

A1:增加数据确实是提高泛化性最简单也是最有效的方法,但是增加数据不是指差不多的数据,而是对数据的质量有要求。例如,做猫狗的图片识别时,要增加猫的照片,不是单纯地增加一个角度的重复照片,而是比如背景不同,光照不同,角度不同等等。

当有很多数据时,调参就不再是一件最重要的事情。过度调参有可能只fit到当前的情景,但在实际业务中,可能会增加很多数据,可能不够fit了。

Q2: resnet18比alexnet的模型文件要小很多,但是好像是resnet的运算量要比alexnet大,这是为什么?

A2:AlexNet模型文件很大是因为全连接层,后面几个很大的全连接很大。而卷积层虽然参数更少,但是实际上计算量比全连接层更大。

在深度学习中,模型大小和计算复杂度不能直接换算的,不成正相关。

Q3: 用torch做梯度下降,根据书上描述的w -= lr * w.grad 不会报错,但是如果写成 w = w - lr * w.grad 就会报错,两个都是在torch.nograd下执行的,出现梯度的参数变成false,为什么?

A3: 如果写成w = w - lr * w.grad的话,w - lr * w.grad 得到的一个新的tensor,再把新的tensor给 w,因此两个w是不一样的tensor,下一次算梯度的时候,等号左边的w没有grad(因为是在torch.nograd下执行),就没办法算下去,如果要继续计算,需要torch.grad。而w -= lr * w.grad 就是一个w在不断地做运算。

Q4: pytorch的data loader 有哪些常用的加速方法?

A4: 开多进程。

Q5: Xavier 初始化 和 BN 可以一起用么,效果会更好吗?

A5: 可以一起用。

Q6: GoogleNet中的Inception 如果使用resnet的跳转连接,是否有意义?

A6: 有的,GoogleNet V3就使用了。

你可能感兴趣的:(深度学习,深度学习,python)