我加载了一个简单的冻结张量流模型(在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',
.
.
.]
答案 0 :(得分:0)
是的,您只需要将tensor_output
更改为您想要的那个即可。请注意,您不会收到标签本身,而是一站式的向量,您需要从中自行找到相应的标签。