Search code examples
pythonmachine-learningkerasdeep-learning

keras.models.load_model("") gives error on h5f.open()


When using keras.models.load it throws an error on h5f.open(name, flags, fapl=fapl) and says OSError: Unable to open file (file signature not found).

DNNModel file code

import random
import numpy as np
import tensorflow as tf
from keras.layers import Dense, Dropout
from keras.models import Sequential
from keras.regularizers import l1, l2
from keras.optimizers import Adam

def set_seeds(seed = 100):
    random.seed(seed)
    np.random.seed(seed)
    tf.random.set_seed(seed)
    
def cw(df):
    c0, c1 = np.bincount(df["dir"])
    w0 = (1/c0) * (len(df)) / 2
    w1 = (1/c1) * (len(df)) / 2
    return {0:w0, 1:w1}

optimizer = Adam(lr = 0.0001)

def create_model(hl = 2, hu = 100, dropout = False, rate = 0.3, regularize = False,
                 reg = l1(0.0005), optimizer = optimizer, input_dim = None):
    if not regularize:
        reg = None
    model = Sequential()
    model.add(Dense(hu, input_dim = input_dim, activity_regularizer = reg ,activation = "relu"))
    if dropout: 
        model.add(Dropout(rate, seed = 100))
    for layer in range(hl):
        model.add(Dense(hu, activation = "relu", activity_regularizer = reg))
        if dropout:
            model.add(Dropout(rate, seed = 100))
    model.add(Dense(1, activation = "sigmoid"))
    model.compile(loss = "binary_crossentropy", optimizer = optimizer, metrics = ["accuracy"])
    return model

Loading Model and Parameters

# Loading the model
import keras
model = keras.models.load_model("C:/Users/Hussein Ali/Desktop/d/DNNModel.py")

error:

---------------------------------------------------------------------------
OSError                                   Traceback (most recent call last)
Cell In[1], line 3
      1 # Loading the model
      2 import keras
----> 3 model = keras.models.load_model("C:/Users/Hussein Ali/Desktop/d/DNNModel.py")

File C:\anaconda\lib\site-packages\keras\utils\traceback_utils.py:70, in filter_traceback.<locals>.error_handler(*args, **kwargs)
     67     filtered_tb = _process_traceback_frames(e.__traceback__)
     68     # To get the full stack trace, call:
     69     # `tf.debugging.disable_traceback_filtering()`
---> 70     raise e.with_traceback(filtered_tb) from None
     71 finally:
     72     del filtered_tb

File C:\anaconda\lib\site-packages\h5py\_hl\files.py:533, in File.__init__(self, name, mode, driver, libver, userblock_size, swmr, rdcc_nslots, rdcc_nbytes, rdcc_w0, track_order, fs_strategy, fs_persist, fs_threshold, fs_page_size, page_buf_size, min_meta_keep, min_raw_keep, locking, alignment_threshold, alignment_interval, **kwds)
    525     fapl = make_fapl(driver, libver, rdcc_nslots, rdcc_nbytes, rdcc_w0,
    526                      locking, page_buf_size, min_meta_keep, min_raw_keep,
    527                      alignment_threshold=alignment_threshold,
    528                      alignment_interval=alignment_interval,
    529                      **kwds)
    530     fcpl = make_fcpl(track_order=track_order, fs_strategy=fs_strategy,
    531                      fs_persist=fs_persist, fs_threshold=fs_threshold,
    532                      fs_page_size=fs_page_size)
--> 533     fid = make_fid(name, mode, userblock_size, fapl, fcpl, swmr=swmr)
    535 if isinstance(libver, tuple):
    536     self._libver = libver

File C:\anaconda\lib\site-packages\h5py\_hl\files.py:226, in make_fid(name, mode, userblock_size, fapl, fcpl, swmr)
    224     if swmr and swmr_support:
    225         flags |= h5f.ACC_SWMR_READ
--> 226     fid = h5f.open(name, flags, fapl=fapl)
    227 elif mode == 'r+':
    228     fid = h5f.open(name, h5f.ACC_RDWR, fapl=fapl)

File h5py\_objects.pyx:54, in h5py._objects.with_phil.wrapper()

File h5py\_objects.pyx:55, in h5py._objects.with_phil.wrapper()

File h5py\h5f.pyx:106, in h5py.h5f.open()

OSError: Unable to open file (file signature not found)

Solution

  • model can means few different elements.

    • python code in variable model
    • model's weights saved in file H5

    And you are confusing these concepts.


    If you want to load code from DNNModel.py then use standard import

    import DNNModel
    
    model = DNNModel.create_model()
    

    but this gives fresh model without pretrained weights in model, and it needs long time to train it.

    So we use file H5 to keep pretrained weights from model,
    and later we load it again to create model with pretrained weights,
    and we don't have to waste time to train it again.

    models.save_model('my_model.h5')   # save pretrained model in file
    
    model = keras.models.load_model('my_model.h5')  # load pretrained model from file