1. 程式人生 > 程式設計 >使用Keras 實現檢視model weights .h5 檔案的內容

使用Keras 實現檢視model weights .h5 檔案的內容

Keras的模型是用hdf5儲存的,如果想要檢視模型,keras提供了get_weights的函式可以檢視:

for layer in model.layers: weights = layer.get_weights() # list of numpy array

而通過hdf5模組也可以讀取:hdf5的資料結構主要是File - Group - Dataset三級,具體操作API可以看官方文件。weights的tensor儲存在Dataset的value中,而每一集都會有attrs儲存各網路層的屬性:

import h5py
 
def print_keras_wegiths(weight_file_path):
  f = h5py.File(weight_file_path) # 讀取weights h5檔案返回File類
  try:
    if len(f.attrs.items()):
      print("{} contains: ".format(weight_file_path))
      print("Root attributes:")
    for key,value in f.attrs.items():
      print(" {}: {}".format(key,value)) # 輸出儲存在File類中的attrs資訊,一般是各層的名稱
 
    for layer,g in f.items(): # 讀取各層的名稱以及包含層資訊的Group類
      print(" {}".format(layer))
      print("  Attributes:")
      for key,value in g.attrs.items(): # 輸出儲存在Group類中的attrs資訊,一般是各層的weights和bias及他們的名稱
        print("   {}: {}".format(key,value)) 
 
      print("  Dataset:")
      for name,d in g.items(): # 讀取各層儲存具體資訊的Dataset類
        print("   {}: {}".format(name,d.value.shape)) # 輸出儲存在Dataset中的層名稱和權重,也可以列印dataset的attrs,但是keras中是空的
        print("   {}: {}".format(name. d.value))
  finally:
    f.close()

而如果想修改某個值,則需要通過新建File類,然後用create_group,create_dataset函式將資訊重新寫入,具體操作可以檢視這篇文章

補充知識:keras load model 並儲存特定層 (pop) 的權重save new_model

有時候我們儲存模型(save model),會儲存整個模型輸入到輸出的權重,如果,我們不想儲存後幾層的引數,儲存成新的模型。

import keras
from keras.models import Model,load_model
from keras.layers import Input,Dense
from keras.optimizers import RMSprop
import numpy as np

建立原始模型並儲存權重

inputs = Input((1,))
dense_1 = Dense(10,activation='relu')(inputs)
dense_2 = Dense(10,activation='relu')(dense_1)
dense_3 = Dense(10,activation='relu')(dense_2)
outputs = Dense(10)(dense_3)

model = Model(inputs=inputs,outputs=outputs)
model.compile(optimizer=RMSprop(),loss='mse')
model.save('test.h5')

載入模型並對模型進行調整

loaded_model = load_model('test.h5')
loaded_model.layers.pop()
loaded_model.layers.pop()

此處去掉了最後兩層--dense_3,dense_2。

建立新的model並載入修改後的模型

new_model = Model(inputs=inputs,outputs=dense_1)
new_model.compile(optimizer=RMSprop(),loss='mse')
new_model.set_weights(loaded_model.get_weights())

new_model.summary()
new_model.save('test_complete.h5')

以上這篇使用Keras 實現檢視model weights .h5 檔案的內容就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。