Tensorflow:用更多的数据继续训练一个图(.pb)



我是Tensorflow的新手,遵循了这个简单的花朵图像分类器指南https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/#0.因此,现在我有了一个图形文件"retrained_graph.pb"和一个文本文件"retained_labels.txt",我想继续训练该模型,以区分更多的花(和其他对象),并使用旧花类别中的更多图像进行训练。如何在不重新训练整个最后一层的情况下继续训练模型。再说一次,我对Python和Tensorflow非常陌生,所以如果我说错了什么,请纠正我。

首先,这是一个初学者的答案,所以我会尽可能清楚地包括我所做的一切。这种图像分类的解决方案被称为迁移学习,它采用经过训练的模型,然后只对其最后一层进行重新训练,这不仅比构建自己的模型花费更少的时间,而且保持了高精度。(请记住,在训练之前,这个过程会将您的图像分辨率降低到300x300或更低,所以如果您想使用高分辨率图像,我建议您使用Tensorflow和initiation V3预训练模型阅读此Train高清图像)。

我使用Tensorflow图像分类再训练的例子(因为Tensorflow for poets脚本不会为你保存检查点,检查点对进一步的训练很重要),完成教程后,你会有几个文件、检查点和图形,保存在/tmp文件夹中(请确保将它们复制到其他位置,因为当您的计算机关闭时,tmp将被删除;要导航到/tmp文件夹,请键入终端"open/tmp"):https://www.tensorflow.org/hub/tutorials/image_retraining.

以下是对检查点文件的解释:https://stackoverflow.com/a/45033500/10917154.

过了一段时间,我发现你不能继续用新图像训练图:在tensorflow中保存模型。

但是,你必须用检查点保存你的进度(脚本已经为你做了),然后加载检查点以继续你的训练,在脚本retrain.py中更改保存检查点的目录并执行以下操作:https://github.com/tensorflow/hub/issues/37#issuecomment-384237524.

遗憾的是,我还没有找到一种方法来为我训练的模型添加更多的类,只能用旧的类训练更多的数据。

在本教程的这一部分中,您还将看到有两个变量,分别称为"input_layer"one_answers"output_lyer",要了解您的模型输入/输出层,请运行以下命令:Tensorflow中图形中的张量名称列表,第一行和最后一行应为模型的输入/输出图层。

我采取了另一个步骤,将图形转换为tflite,以便在移动设备上使用。要转换它,你必须冻结你的图(图->frozen_graph->tflite)如何将重新训练的模型转换为tflite格式?,幸运的是,教程中的脚本已经为我们冻结了图形。所以现在我们只需要转换它(您可以将.tflite更改为.lite,反之亦然)。

$ tflite_convert 
--output_file=/.../output_graph.tflite 
--graph_def_file=/.../output_graph.pb 
--input_arrays=Placeholder 
--output_arrays=final_result 
--output_format=TFLITE 
--inference_type=FLOAT 
--inference_input_type=FLOAT

对于其他一些图形,它会要求我们提供输入形状,我们可以在命令中再添加1行(224224是训练模型的图像的分辨率,将其分别更改为您的模型;3是RGB):

--input_shape=1,224,224,3

获得tflite后,您可以将其添加到Tensorflow示例中并运行它:https://github.com/tensorflow/tensorflow/tree/master/tensorflow/lite/examples/ios/camera

最新更新