numpy库使用

在深度学习和各种运算中会经常使用numpy库,这里记录自己在学习过程中经常使用的函数和示例。

官方文档下载页面: https://docs.scipy.org/doc/

文件下载链接

作者CSDN分享连接: https://download.csdn.net/download/u010472607/10418032

文件存取

在深度学习的学习过程中,看到过很多时候,需要将网络保存为非框架默认格式,虽然不同框架都提供了快捷的模型序列化方法保存模型参数到特定格式, 如tensorflowckpt格式, PyTorchpt格式, 因为这样做保存的训练结果很难直接迁移到新的框架下 或者 新的模型中 方便使用.

save函数

numpy格式的变量直接存储为*.npy格式, 一个限制是: 只能在文件中保存一个变量.

示例:

>>> import numpy as np
>>> x = np.random.rand(2,4)
>>> x
array([[ 0.03118105,  0.15653145,  0.3858033 ,  0.92774142],
       [ 0.39441842,  0.10563577,  0.4003588 ,  0.39920514]])
np.save('x.npy', x)

这样就完成了变量的本地保存,可以在当前执行路径下看到x.npy文件. 当然, 如果我们在给定文件名的时候不给出扩展名,则函数会自动帮我们添加. 还需要注意的是, 这种方式保存的文件是二进制的,无法直接打开查看.

load函数

将使用np.save()方法保存的文件通过np.load()方法加载, 可以得到保存的np.ndarray变量

示例:

>>> import numpy as np
>>> x = np.load('x.npy')
>>> x
array([[ 0.03118105,  0.15653145,  0.3858033 ,  0.92774142],
       [ 0.39441842,  0.10563577,  0.4003588 ,  0.39920514]])

此时就得到了我们上一步保存的x变量.

save, load 在模型保存时的应用

通过上面的介绍, 我们已经了解到, 使用 np.save()方法保存变量到文件只能保存一个变量, 所以我们使用一个字典变量将模型各层参数进行保存, 最后在使用np.save()方法保存.

在使用np.load()方法进行加载时, 如果变量里只包含一个元素(item), 即 (1x1x…x1), 那么就可以通过ndarray.item()方法将其转换为一个标量(scalar)

一个示例:

>>> import numpy as np
>>> x = {'conv_1': np.random.rand(3,3), 'fc_1': np.random.rand(32)}
>>> x
{'conv_1': array([[ 0.05540144,  0.46888816,  0.76508324],
        [ 0.09527619,  0.03357439,  0.76838422],
        [ 0.6086968 ,  0.16039761,  0.78455757]]),
 'fc_1': array([ 0.68438637,  0.54501269,  0.48208714,  0.67772137,  0.85089517,
         0.60036447,  0.15253074,  0.74487022,  0.04308577,  0.57887682,
         0.43993034,  0.92150712,  0.07067633,  0.9204343 ,  0.93995161,
         0.37799341,  0.62816175,  0.26181036,  0.39731716,  0.79923516,
         0.47060778,  0.39672584,  0.93192817,  0.67885068,  0.47151288,
         0.93326192,  0.9359753 ,  0.47459049,  0.89973424,  0.36861164,
         0.37622372,  0.54349513])}
>>> np.save('t-net.npy', x)

>>> y = np.load('t-net.npy')
>>> y # 此时为 numpy.ndarray 类型, size=(1,)
array({'fc_1': array([ 0.68438637,  0.54501269,  0.48208714,  0.67772137,  0.85089517,
        0.60036447,  0.15253074,  0.74487022,  0.04308577,  0.57887682,
        0.43993034,  0.92150712,  0.07067633,  0.9204343 ,  0.93995161,
        0.37799341,  0.62816175,  0.26181036,  0.39731716,  0.79923516,
        0.47060778,  0.39672584,  0.93192817,  0.67885068,  0.47151288,
        0.93326192,  0.9359753 ,  0.47459049,  0.89973424,  0.36861164,
        0.37622372,  0.54349513]), 'conv_1': array([[ 0.05540144,  0.46888816,  0.76508324],
       [ 0.09527619,  0.03357439,  0.76838422],
       [ 0.6086968 ,  0.16039761,  0.78455757]])}, dtype=object)

>>> y.item() # 此时的返回值类型为 Python的标准 dict字典 类型
{'conv_1': array([[ 0.05540144,  0.46888816,  0.76508324],
        [ 0.09527619,  0.03357439,  0.76838422],
        [ 0.6086968 ,  0.16039761,  0.78455757]]),
 'fc_1': array([ 0.68438637,  0.54501269,  0.48208714,  0.67772137,  0.85089517,
         0.60036447,  0.15253074,  0.74487022,  0.04308577,  0.57887682,
         0.43993034,  0.92150712,  0.07067633,  0.9204343 ,  0.93995161,
         0.37799341,  0.62816175,  0.26181036,  0.39731716,  0.79923516,
         0.47060778,  0.39672584,  0.93192817,  0.67885068,  0.47151288,
         0.93326192,  0.9359753 ,  0.47459049,  0.89973424,  0.36861164,
         0.37622372,  0.54349513])}

>>> # y = np.load('t-net.npy').item() # 注: 内部变量size 乘积必须为1, 即只有一个item

未完待续…

猜你喜欢

转载自blog.csdn.net/u010472607/article/details/78853243