Я преобразую предварительно обученную модель TensorFlow в файл .pb
с кодом Python, как показано ниже
import tensorflow as tf
from argparse import ArgumentParser
def main():
parser = ArgumentParser()
parser.add_argument('--checkpoint', type=str,
dest='checkpoint',
help='dir or .ckpt file to load checkpoint from',
metavar='CHECKPOINT', required=True)
parser.add_argument('--model', type=str,
dest='model',
help='.meta for your model',
metavar='MODEL', required=True)
parser.add_argument('--out-path', type=str,
dest='out_path',
help='model output directory',
metavar='MODEL_OUT', required=True)
opts = parser.parse_args()
tf.reset_default_graph()
saver = tf.train.import_meta_graph(opts.model)
#builder = tf.saved_model.builder.SavedModelBuilder(opts.out_path)
with tf.Session(config=tf.ConfigProto(allow_soft_placement=True, log_device_placement=True)) as sess:
# Restore variables from disk.
saver.restore(sess, opts.checkpoint)
print("Model restored.")
#builder.add_meta_graph_and_variables(sess,['tfckpt2pb'],strip_default_attrs=False)
#builder.save()
constant_graph = tf.graph_util.convert_variables_to_constants(sess, sess.graph_def, ['Tower_0/parsing_fc/BiasAdd','Tower_0/parsing_rf_fc/BiasAdd','Tower_0/edge_rf_fc/BiasAdd'])
with tf.gfile.FastGFile(opts.out_path, mode='wb') as f:
f.write(constant_graph.SerializeToString())
print("pb Model saved.")
if __name__ == '__main__':
main()
И импортирую модель .pb
с кодом Java, как показано ниже
//import model
byte[] graphBytes = IOUtils.toByteArray(new FileInputStream(MODEL_PATH));
graph.importGraphDef(graphBytes);
//create session
try(Session session = new Session(graph)){
ConfigProto config = ConfigProto.newBuilder()
.setGpuOptions(GPUOptions.newBuilder().setAllowGrowth(true))
.build();
//get the output
Tensor<?> output = session.runner()
.setOptions(config.toByteArray())
.feed("Tower_0/strided_slice", imageTensor)
.fetch("Tower_0/parsing_fc/BiasAdd").run().get(0);
System.out.println(output);
}
Тогда ошибка, как показано ниже
// вот сообщения об ошибках 2020-04-06 12: 13: 50.269556: I tenorflow / core / platform / cpu_feature_guard. cc: 142] Ваш ЦП поддерживает инструкции, которые этот двоичный файл TensorFlow не был скомпилирован для использования: AVX2 AVX512F FMA 2020-04-06 12: 13: 50.281419: I tenorflow / core / platform / profile_utils / cpu_utils. cc: 94] Частота ЦП: 2600000000 Гц 2020-04-06 12: 13: 50.288167: I tenorflow / compiler / xla / service / service. cc: 168] Служба XLA 0x7f968ded1db0, инициализированная для хоста платформы (это не гарантирует, что XLA будет использоваться). Устройства: 2020-04-06 12: 13: 50.288206: I tenorflow / compiler / xla / service / service. cc: 176] Устройство StreamExecutor (0): Хост, Версия по умолчанию java .lang.IllegalArgumentException: Невозможно назначить устройство для операции Tower_0 / strided_slice: {{узел Tower_0 / strided_slice}} было явно назначено для / device: GPU: 0, но доступны следующие устройства: [/ job: localhost / replica: 0 / task: 0 / device: CPU: 0, / job: localhost / replica: 0 / task: 0 / device: XLA_CPU: 0]. Убедитесь, что в спецификации устройства указано действительное устройство. Запрошенное устройство выглядит как графический процессор, но CUDA не включен. [[Tower_0 / strided_slice]] в org.tensorflow.Session.run (собственный метод) в org.tensorflow.Session.access $ 100 (Session. java: 48) в org.tensorflow.Session $ Runner.runHelper (Session. java: 326) at org.tensorflow.Session $ Runner.run (Session. java: 276)
Моя конфигурация pom
//here are maven configuration
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>tensorflow</artifactId>
<version>1.15.0</version>
</dependency>
<dependency>
<groupId>org.tensorflow</groupId>
<artifactId>libtensorflow_jni_gpu</artifactId>
<version>1.15.0</version>
</dependency>
Я не знаю, почему произошла эта ошибка, и я не могу решить проблему.