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

未完待續…

發佈了53 篇原創文章 · 獲贊 88 · 訪問量 33萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章