Как получить доступ к функциям активации из сохраненной модели .h5 без импорта тензорного потока? - PullRequest
0 голосов
/ 03 мая 2020

Сохранена ли функция активации для каждого слоя в файле .h5, созданном model.save ()? Или это уже «запечено» с весами?

Я пишу AWS лямбда-функцию для генерации предсказаний временных рядов из моделей множественной регрессии каждые пять минут. К сожалению, TensorFlow является слишком большой библиотекой для загрузки в функцию AWS Lambda, поэтому я пишу свой собственный код Python, чтобы загрузить сохраненный файл модели .h5 и сгенерировать прогнозы на основе весов и входных данных. Вот где я сейчас нахожусь:

def generate_predictions(model_path, df):
    model_info = h5py.File(model_path, 'r')
    model_weights = model_info['model_weights']
    # Initialize predictions matrix with preprocessed inputs
    predictions = preprocessing.scale(df[inputs])
    layer_list = list(model_weights.keys())
    for layer in layer_list:
        weights = model_weights[layer][layer]['kernel:0'][:]
        bias = model_weights[layer][layer]['bias:0'][:]
        predictions = predictions.dot(weights)
        predictions += bias
        # How to retrieve activation function for layer?
        # predictions = activation_function(predictions)

    return predictions

Я понимаю, что, возможно, мне понадобится какой-нибудь оператор case / switch для обработки различных функций активации.

Ответы [ 2 ]

1 голос
/ 04 мая 2020

Если вы сохраните полную модель с помощью model.save, вы сможете получить доступ к каждому слою и его функции активации.

from tensorflow.keras.models import load_model
model = load_model('model.h5')

for l in model.layers:
  try:
    print(l.activation)
  except: # some layers don't have any activation
    pass
<function tanh at 0x7fa513b4a8c8>
<function softmax at 0x7fa513b4a510>

Здесь, например, softmax используется в последнем слое .

Если вы не хотите импортировать тензор потока, вы также можете прочитать из h5py.

import h5py
import json

model_info = h5py.File('model.h5', 'r')

model_config = json.loads(model_info.attrs.get('model_config').decode('utf-8'))

for k in model_config['config']['layers']:
  if 'activation' in k['config']:
      print(f"{k['class_name']}: {k['config']['activation']}")
LSTM: tanh
Dense: softmax

Здесь последний слой - это плотный слой с активацией softmax.

0 голосов
/ 05 мая 2020

Конфигурация модели доступна через атрибут «model_config» в верхней группе, который, кажется, содержит полную конфигурацию модели JSON, созданную model.to_ json ().

import json
import h5py
model_info = h5py.File('model.h5', 'r')
model_config_json = json.loads(model_info.attrs['model_config'])
...