更新Pytorch模型中的权重和偏差时如何防止内存使用量增长

法布里斯·奥赞纳

我正在尝试构建VGG16模型以使用Pytorch进行ONNX导出。我想用自己的权重和偏见来强制模型。但是在此过程中,我的计算机很快耗尽了内存。

这是我想要的方法(这只是一个测试,在真实版本中,我读取了一组文件中的权重和偏差),此示例仅将所有值强制为0.5

# Create empty VGG16 model (random weights)
from torchvision import models
from torchsummary import summary

vgg16 = models.vgg16()
# la structure est : vgg16.__dict__
summary(vgg16, (3, 224, 224))

#  convolutive layers
for layer in vgg16.features:
    print()
    print(layer)
    if (hasattr(layer,'weight')):
        dim = layer.weight.shape
        print(dim)
        print(str(dim[0]*(dim[1]*dim[2]*dim[3]+1))+' params')

        # Remplacement des poids et biais
        for i in range (dim[0]):
            layer.bias[i] = 0.5
            for j in range (dim[1]):
                for k in range (dim[2]):
                    for l in range (dim[3]):
                        layer.weight[i][j][k][l] = 0.5

# Dense layers
for layer in vgg16.classifier:
    print()
    print(layer)
    if (hasattr(layer,'weight')):
        dim = layer.weight.shape
        print(str(dim)+' --> '+str(dim[0]*(dim[1]+1))+' params')
        for i in range(dim[0]):
            layer.bias[i] = 0.5
            for j in range(dim[1]):
                layer.weight[i][j] = 0.5

当我查看计算机的内存使用情况时,它在第一个密集层处理期间会线性增长并饱和16GB RAM。然后python崩溃了...

有没有其他更好的方法可以做到这一点,请记住我要在以后进行nnx导出模型?谢谢你的帮助。

爱伦坡

内存增长是由于需要为每个权重和偏差更改调整梯度而引起的。尝试在更新之前.requires_grad属性设置为,False并在更新之后将其还原。例:

for layer in vgg16.features:
    print()
    print(layer)
    if (hasattr(layer,'weight')):
        
        # supress .requires_grad
        layer.bias.requires_grad = False
        layer.weight.requires_grad = False
        
        dim = layer.weight.shape
        print(dim)
        print(str(dim[0]*(dim[1]*dim[2]*dim[3]+1))+' params')

        # Remplacement des poids et biais
        for i in range (dim[0]):
            layer.bias[i] = 0.5
            for j in range (dim[1]):
                for k in range (dim[2]):
                    for l in range (dim[3]):
                        layer.weight[i][j][k][l] = 0.5
        
        # restore .requires_grad
        layer.bias.requires_grad = True
        layer.weight.requires_grad = True

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何防止权重和偏差保存最佳模型参数

在循环中使用Keras时如何防止内存使用量激增

Java Process的常驻内存使用量(RSS)不断增长

运行Nightwatch时如何增加内存使用量

在recyclerview中滚动时,内存使用量增加

加载大图像作为移动背景视图时,如何减少Swift中的内存使用量?

如何减少此代码中的内存使用量?

如何减少R中for循环中的内存使用量

如何减少PhotoKit的内存使用量?

如何减少ClamAV的内存使用量?

如何减少魔杖的内存使用量?

Java中的内存使用量突发

减少Java中的内存使用量

当我将 ets 表转换为 Erlang 中的列表时,如何减少进程的内存使用量?

后续“在 PyTorch 中默认情况下如何初始化层权重和偏差?”

权重和偏差扫描无法使用pytorch lightning导入模块

如何从ONNX模型中读取各个层的权重和偏差值?

在TensorFlow中修改已恢复的CNN模型的权重和偏差

用于多处理的内存使用量稳步增长.Pool.imap_unordered

Java内存使用量持续增长,直到OutOfMemory异常

PHP内存使用量在每个循环中都在不断增长

在写入已安装目录中的文件时,docker容器会不断增加内存使用量

在异步函数中迭代Promises时,内存使用量显着增加

运行类似软件时内存使用量更少?

创建Java线程时的内存使用量

减少广播和总和的内存使用量

限制Chrome无头CPU和内存使用量

梯度在神经网络权重和偏差更新中的应用

如何减少iOS应用程序中的内存使用量