Skip to content Skip to sidebar Skip to footer

How To Read Keras Model Weights Without A Model

A keras model can be saved in two files. One file is with a model architecture. And the other one is with model weights, weights are saved by the method model.save_weights(). Then

Solution 1:

The data format is h5 so you can directly use the h5py library to inspect and load the weights. From the quickstart guide:

import h5py
f = h5py.File('weights.h5', 'r')
print(list(f.keys()))
# will get a list of layer names which you can use as index
d = f['dense']['dense_1']['kernel:0']
# <HDF5 dataset "kernel:0": shape (128, 1), type "<f4">
d.shape == (128, 1)
d[0] == array([-0.14390108], dtype=float32)
# etc.

The file contains properties including weights of layers and you can explore in detail what is stored and how. If you would like a visual version there is h5pyViewer as well.

Solution 2:

Ref: https://github.com/keras-team/keras/issues/91 Code Snippet for your ask below

from __future__ import print_function

import h5py

defprint_structure(weight_file_path):
    """
    Prints out the structure of HDF5 file.

    Args:
      weight_file_path (str) : Path to the file to analyze
    """
    f = h5py.File(weight_file_path)
    try:
        iflen(f.attrs.items()):
            print("{} contains: ".format(weight_file_path))
            print("Root attributes:")

        print("  f.attrs.items(): ")
        for key, value in f.attrs.items():           
            print("  {}: {}".format(key, value))

        iflen(f.items())==0:
            print("  Terminate # len(f.items())==0: ")
            returnprint("  layer, g in f.items():")
        for layer, g in f.items():            
            print("  {}".format(layer))
            print("    g.attrs.items(): Attributes:")
            for key, value in g.attrs.items():
                print("      {}: {}".format(key, value))

            print("    Dataset:")
            for p_name in g.keys():
                param = g[p_name]
                subkeys = param.keys()
                print("    Dataset: param.keys():")
                for k_name in param.keys():
                    print("      {}/{}: {}".format(p_name, k_name, param.get(k_name)[:]))
    finally:
        f.close()
print_structure('weights.h5.keras')

Solution 3:

You need to create a Keras Model, then you can load your architecture and afterwards the model weights

See the code below,

model = keras.models.Sequential()          # create a Keras Model
model.load_weights('my_model_weights.h5')  # load model weights

More information in the Keras docs

Post a Comment for "How To Read Keras Model Weights Without A Model"