• 4.5 读取和存储


    读取和存储

    在实际中,我们有时需要把训练好的模型部署到很多不同的设备。在这种情况下,我们可以把内存中训练好的模型参数存储在硬盘上供后续读取使用。

    读写NDArray

    可以直接使用save函数和load函数分别存储和读取NDArray
    创建了NDArray变量x,并将其存在文件名同为x的文件里:

    #导包
    from mxnet import nd
    from mxnet.gluon import nn
    #x=(1,1,1)
    x = nd.ones(3)
    #保存在x文件里
    nd.save('x', x)
    

    将数据从存储的文件读回内存:

    #从x文件里读回内存
    x2 = nd.load('x')
    x2
    

    可以存储一列NDArray并读回内存:

    #y=[0,0,0,0]
    y = nd.zeros(4)
    #将x,y分别存入xy文件中
    nd.save('xy', [x, y])
    #从内存中取出x2,y2
    x2, y2 = nd.load('xy')
    (x2, y2)
    

    甚至可以存储并读取一个从字符串映射到NDArray的字典:

    mydict = {'x': x, 'y': y}
    nd.save('mydict', mydict)
    mydict2 = nd.load('mydict')
    mydict2
    

    读写Gluon模型的参数

    NDArray以外,我们还可以读写Gluon模型的参数。GluonBlock类提供了save_parameters函数和load_parameters函数来读写模型参数.

    #同前面的章节
    class MLP(nn.Block):
        def __init__(self, **kwargs):
            super(MLP, self).__init__(**kwargs)
            self.hidden = nn.Dense(256, activation='relu')
            self.output = nn.Dense(10)
    
        def forward(self, x):
            return self.output(self.hidden(x))
    
    net = MLP()
    net.initialize()
    X = nd.random.uniform(shape=(2, 20))
    Y = net(X)
    

    下面把该模型的参数存成文件,文件名为mlp.params

    #指明文件名
    filename = 'mlp.params'
    #存储参数
    net.save_parameters(filename)
    

    再实例化一次定义好的多层感知机。与随机初始化模型参数不同,我们在这里直接读取保存在文件里的参数。

    #实例化一个MLP
    net2 = MLP()
    #加载保存好的参数
    net2.load_parameters(filename)
    

    因为这两个实例都有同样的模型参数,那么对同一个输入X的计算结果将会是一样的。来验证一下:

    Y2 = net2(X)
    Y2 == Y
    #output:
    [[1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]
     [1. 1. 1. 1. 1. 1. 1. 1. 1. 1.]]
    <NDArray 2x10 @cpu(0)>
    
  • 相关阅读:
    Ubuntu设置文件默认打开方式
    车险与费用计算(仅做参考)
    房贷计算
    PHP敏感词处理
    记一次,接口pending
    layer confirm确认框,多个按钮
    crontab vim 模式
    git指定迁出目录
    mysql树形结构
    Kubeflow实战: 入门介绍与部署实践
  • 原文地址:https://www.cnblogs.com/strategist-614/p/14415625.html
Copyright © 2020-2023  润新知