gpt4 book ai didi

python - 在单独的线程中从 Tensorflow 模型返回层激活和权重

转载 作者:太空宇宙 更新时间:2023-11-04 04:35:49 29 4
gpt4 key购买 nike

我正在尝试从在一个线程中加载的 tensorflow 模型(全局 mModel)检索输出(使用 keras.models.model_from_jsonload_weights) 并在网络服务器上的另一个中运行(使用 predict)。我还如何提供隐藏层和网络权重的输出?

在通过创建如下模型来预测中间层模型的一些尝试中,我收到了一个错误,包括“张量不是该图的元素”。

for modelLayer in mModel.layers:
if not modelLayer.output == mModel.input:
intermediateModel = keras.models.Model(inputs=mModel.input, outputs=modelLayer.output)
layerActivations = intermediateModel.predict(np.array([inputs]))[0]

尝试使用源线程中生成的 session 获取权重时 (mSess)

mModel.layers[1].weights[0].eval(session=mSess)

我得到错误:

FailedPreconditionError (see above for traceback): Error while reading resource variable dense/kernel from Container: localhost. This could mean that the variable was uninitialized. Not found: Container localhost does not exist. (Could not find resource: localhost/dense/kernel)

[[Node: dense/kernel/Read/ReadVariableOp = ReadVariableOpdtype=DT_FLOAT, _device="/job:localhost/replica:0/task:0/device:CPU:0"]]

尝试使用新 session 和适当的图表返回层权重

sess = tf.Session(graph=mModel.output.graph)
sess.run(tf.global_variables_initializer())
mModel.layers[1].weights[0].eval(session=sess)

我得到错误:

ValueError: Fetch argument cannot be interpreted as a Tensor. (Operation name: "init" op: "NoOp" is not an element of this graph.)

最佳答案

错误“tensor is not an element of this graph”可以通过在模型中使用与张量关联的图来解决。

with mModel.output.graph.as_default():
for modelLayer in mModel.layers:
if not modelLayer.output == mModel.input:
intermediateModel = keras.models.Model(inputs=mModel.input, outputs=modelLayer.output)
layerActivations = intermediateModel.predict(np.array([inputs]))[0]

编辑:更新解决方案

虽然下面的原始解决方案解决了所报告的问题,但使用...eval(sess) 为权重提供的值是初始化值,而不是学习值或预测 使用。可能有一种方法可以使用 eval 来获得正确的结果,但我不知道。我找到的替代解决方案是在模型或层上使用 get_weights(),如:

mModel.get_weights()
mModel.layers[1].get_weights()

原解

解决权重的问题是使用正确的图形和使用权重的初始化器而不是全局初始化器初始化 session 的组合。

sess = tf.Session(graph=mModel.output.graph)
weights = modelLayer.weights[0]
sess.run(weights.initializer)
weightsValues = weights.eval(session=sess)

这些解决方案跨线程工作。

关于python - 在单独的线程中从 Tensorflow 模型返回层激活和权重,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51753328/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com