1问题描述
本人在做神经网络模型时,不理解激活函数relu中的参数inplace的作用。
self.layer1 = nn.Sequential(
nn.Conv2d(1, 16, kernel_size=3),#16, 26, 26
nn.BatchNorm2d(16),
nn.ReLU(inplace=True)
)
2,先说结论
inplace = false,就相当于另外开辟内存进行计算,
inplace = true, 就相当于在原内存计算,
作用显而易见,节省内存。
3,理解
参照其他作者描述,inplace=false,就相当于a = a + 1;而inplace = True,就相当于a += 1;下面大概解释一下
观察地址,不难发现a的地址没变,c的地址发生了变化,此时又因为b和d分别指向初试a和c的内存,所以b的值等于更新后a的值,而d的值等于c原来的值。也因为d一直在指向c原来的地址,故c原来地址释放不掉。此时a,b共占内存2两块,cd共占内存3块,所以inplace=true的作用为减少内存占用。