我尝试使用 tf.estimator.train_and_evaluate() 方法从检查点重新训练 TF 对象检测 API 模型,该模型已经具有 .config 文件,用于训练管道,例如在 models/research/object_detection/model_main.py 中。它每 N 步或每 N 秒保存一次检查点。
但我只想保存一个最好的模型,比如在 Keras 中。有没有办法用 TF 对象检测 API 模型来做到这一点?也许是 tf.Estimator.train 的一些选项/回调或将检测 API 与 Keras 一起使用的某种方式?
python machine-learning computer-vision tensorflow object-detection-api
我在 Ubuntu 18.04 中使用了tensorflow-gpu 1.13.1,并在 Nvidia GeForce RTX 2070 上使用了 CUDA 10.0(驱动程序版本:415.27)。
下面的代码用于管理张量流内存使用情况。我有大约 8Gb GPU 内存,因此 TensorFlow 不得分配超过 1Gb 的 GPU 内存。但是,当我使用命令查看内存使用情况时nvidia-smi,我发现它使用了 ~1.5 Gb,尽管我使用 GPUOptions 限制了内存数量。
memory_config = tf.ConfigProto(gpu_options=tf.GPUOptions(per_process_gpu_memory_fraction=0.12))
memory_config.gpu_options.allow_growth = False
with tf.Session(graph=graph, config=memory_config) as sess:
output_dict = sess.run(tensor_dict,
feed_dict={image_tensor: np.expand_dims(image, 0)})
Run Code Online (Sandbox Code Playgroud)
为什么会这样?我如何才能避免这种情况或至少计算每个会话的内存需求?我需要对每个进程进行严格的限制,因为我有几个具有不同会话的并行实例,所以我需要确保不会出现资源竞争
顺便说一句,我尝试将 memory_config.gpu_options.allow_growth 设置为 False,但它没有任何影响。Tensorflow 仍然以相同的方式分配内存,独立于此标志值。而且看起来也很奇怪