Python 如何在不导入tensorflow的情况下从保存的Model.h5访问激活功能?

Python 如何在不导入tensorflow的情况下从保存的Model.h5访问激活功能?,python,tensorflow,keras,h5py,Python,Tensorflow,Keras,H5py,每个层的激活函数是否存储在由model.save()生成的.h5文件中?或者它已经“烘焙”到重量了 我正在编写一个AWS Lambda函数,每五分钟从多元回归模型生成一次时间序列预测。不幸的是,TensorFlow库太大,无法加载到AWS Lambda函数中,因此我正在编写自己的Python代码来加载保存的.h5模型文件,并根据权重和输入数据生成预测。到目前为止,我的情况如下: def generate_predictions(model_path, df): model_info =

每个层的激活函数是否存储在由model.save()生成的.h5文件中?或者它已经“烘焙”到重量了

我正在编写一个AWS Lambda函数,每五分钟从多元回归模型生成一次时间序列预测。不幸的是,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语句来处理各种激活功能。

如果使用
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

在这里,最后一层是具有softmax激活的密集层。

可以通过顶部组中名为“model_config”的属性访问模型配置,该属性似乎包含model.to_JSON()生成的完整模型配置JSON


激活功能的性质是什么?据我所知,
h5py
只能保存/加载numpy数组(或等效数组)
.h5
文件用于数据,而不是代码<代码>h5py
文件包含组和数据集。数据集作为数组加载。每个级别也可以有属性,通常是较小的数组或字符串。如果你不能通过
键找到它,它就不在那里。@hpaulj-激活函数是对层的输出执行的操作,例如线性、relu、tanh、softmax等。我本以为它们会存储为属性,但它们似乎不在那里。激活函数必须存储在某个地方,否则您将无法在加载的模型上调用model.predict()。如果没有示例文件,我真的帮不了您。如果有固定数量的函数,那么它们很可能按名称或代码存储。看起来配置也可以存储为
JSON
。函数可能不是以任何二进制或可执行形式存储的;只需要足够的信息来重新创建模型。@hpaulj-如果它们是按名称或代码存储的,那就好了,我只需要知道它们是什么。模型配置可以存储为JSON,但权重不包括在该格式中。TF似乎能够从.h5文件中访问配置数据,但我不确定如何访问。您能否评论一下,是否可以在不导入TensorFlow的情况下直接从.h5文件中访问至少激活函数的名称?技术上是的,但h5存储二进制数据,如果不加载tensorflow,几乎不可能解码所有的模型细节。这不一定是真的,在我在问题中分享的代码中,我能够有效地访问每一层的偏差和内核。用内核做点积并添加偏差很简单,但是在.h5文件中查找激活函数时遇到了问题。
<function tanh at 0x7fa513b4a8c8>
<function softmax at 0x7fa513b4a510>
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
import json
import h5py
model_info = h5py.File('model.h5', 'r')
model_config_json = json.loads(model_info.attrs['model_config'])