load_model() 함수를 사용하면, h5 또는 hdf5로 저장된 모델 구조, 가중치를 한꺼번에 불러올 수 있습니다.

model = load_model('your saved model path')

그런데 만약 모델에 커스텀 객체가 포함되어 있다면, 커스텀 객체를 명시해주지 않는 경우 다음과 같은 에러가 발생할 수 있습니다.

이를 알아보기 전에, 케라스에서 커스텀 객체를 선언하는 방법은 다음과 같습니다.

커스텀 객체 선언

def Mish(x):
    return x * K.tanh(K.softplus(x))

get_custom_objects().update({'mish': Mish})

Mish Activation 함수를 커스텀 객체로 선언하고 사용한 모델을 load_model() 함수를 사용하여 불러올 때, 커스텀 객체를 명시해주지 않으면(인자로 전달하지 않으면) 다음과 같은 에러를 만날 수 있습니다.

ex) Mish Activation 함수를 커스텀 객체로 선언하고 사용한 모델일 경우

ValueError: Unknown activation function:Mish

모델에선 Mish Activation 함수를 사용하여 구조가 형성되어 있는데, 로드시 이에 대한 정보를 넘겨주지 않았기 때문에 발생합니다. 따라서, 이를 해결하기 위해 다음과 같이 인자로 전달해주면 쉽게 해결할 수 있습니다.

 

커스텀 객체를 포함한 모델 로드

model = load_model('./model/saved_model.hdf5', custom_objects={'Mish':Mish}

'Mish'는 커스텀 객체 선언 시 사용한 객체의 이름이고, Mish는 해당 객체를 넘겨주는 것입니다.