Вывод / прогноз из замороженной модели: получить значение после активации через график - PullRequest
0 голосов
/ 09 мая 2019

У меня есть простая замороженная модель тензорного потока (замороженная в Керасе), которую я загружаю и затем пытаюсь использовать для прогнозирования.Я делаю это сначала в Python (код ниже), а затем использую C и libtensorflow (и получаю те же результаты).Примеры, которые я нашел, предоставляют логиты (до активации) в качестве конечного результата, а не метку класса после активации.Есть ли способ получить метку через сам график?

Я понимаю, что могу управлять операторами 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 голосов
/ 09 мая 2019

Да, вам просто нужно изменить tensor_output на тот, который вы хотите получить. Обратите внимание, что вы получите не сами ярлыки, а один горячий вектор, из которого вам нужно будет найти соответствующий ярлык самостоятельно.

...