冻结模型的推断/预测:通过图形激活后获得值

时间:2019-05-09 19:59:46

标签: tensorflow tf.keras

我加载了一个简单的冻结张量流模型(在Keras中冻结),然后尝试将其用于预测。我首先在python(下面的代码)中执行此操作,然后使用C和libtensorflow(并获得相同的结果)。我发现的示例将logits(激活前)作为最终输出,而不是激活后的类标签。有没有办法通过图形本身获取标签?

我知道我可以在logit上操作Sigmoid / softmax运算符,但这不是我想要的。 (我正在移植代码以使用libtensorflow C api,并且希望让图形进行数学运算。)

我的理解是,会话将图形运行到操作/张量,并在该操作之前停止。激活后是否可以进行操作?

Keras型号:

model = Sequential()
model.add(Dense(100, activation='relu', input_shape=(21,)))
model.add(Dense(1, activation='sigmoid'))

Tensorflow代码可加载冻结的模型并进行预测:

from tensorflow.python.platform import gfile
with tf.Session() as sess:
    with gfile.FastGFile('slopemodel/slopemodel.pb', 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        sess.graph.as_default()
        g_in = tf.import_graph_def(graph_def)
    tensor_output = sess.graph.get_tensor_by_name('import/dense_2/Sigmoid:0')
    tensor_input = sess.graph.get_tensor_by_name('import/dense_1_input:0')
    predictions = sess.run(tensor_output, {tensor_input:sample})
    print(predictions)

图中重要节点的截断列表:

['import/dense_1_input',
 'import/dense_1/kernel',
 'import/dense_1/kernel/read',
 'import/dense_1/bias',
 'import/dense_1/bias/read',
 'import/dense_1/MatMul',
 'import/dense_1/BiasAdd',
 'import/dense_1/Relu',
 'import/dense_2/kernel',
 'import/dense_2/kernel/read',
 'import/dense_2/bias',
 'import/dense_2/bias/read',
 'import/dense_2/MatMul',
 'import/dense_2/BiasAdd',
 'import/dense_2/Sigmoid',
 'import/Adam/iterations',
  .
  .
  .]

1 个答案:

答案 0 :(得分:0)

是的,您只需要将tensor_output更改为您想要的那个即可。请注意,您不会收到标签本身,而是一站式的向量,您需要从中自行找到相应的标签。