【问题标题】:Retrain tensorflow model for additional categories为其他类别重新训练 tensorflow 模型
【发布时间】:2017-04-14 04:36:35
【问题描述】:

我正在使用 tensorflow 图像分类构建一个程序。我从github得到了tensorflow,我知道的差不多就是classify_image.py怎么运行!

我想要做的是选择以简单的方式训练模型。例如,该模型知道“钥匙”,但我想训练它用于具有花哨钥匙扣或其他东西的“HouseKeys”。是否有某种脚本可以用来说“拍摄这 20 张图像并学习 HouseKeys”,以便模型可以区分“keys”和“HouseKeys”?

请原谅我的菜鸟,提前谢谢你!

编辑:显然,模型保留它之前知道的所有其他类别的知识非常重要,因为只能识别“HouseKeys”是绝对没用的。

【问题讨论】:

    标签: tensorflow


    【解决方案1】:

    你可以这样做。但是,它可能需要一些调整。

    我不确切知道您所指的脚本,但我假设您至少有两个 python 文件。一个是实际的神经网络,另一个负责训练和评估。

    您需要做的第一件事是确保神经网络能够处理新类。寻找这样的东西:

    input_y = tf.placeholder(tf.float32, [None, classes], name="input_y") 
    

    很多时候,如果您看到名称中包含 x(例如input_x)的张量,它们指的是数据,即训练输入。

    名称中包含 y 的张量,如上面的示例,通常指的是标签。

    上面的代码说input_y 是一个张量(暂时认为是数组),类型为float32,长度可变(None 来自[None, classes]),但每个元素的维度为classes

    如果 classes 是 3,input_y 可能如下所示:

    [[0, 0, 1], [1, 0, 0], [0, 1, 0]]
    

    同样,它可能看起来像这样:

    [[0, 0, 1], [1, 0, 0], [0, 1, 0], [0, 1, 0], [0, 0, 1]]
    

    虽然长度可以变化,但我们必须始终将大小为 3 的元素作为元素 (classes) 至于含义,例如[0, 0, 1] 表示这是第 2 类的标签,因为我们在索引 2 处有 1(查找一个热门符号)。

    关键是,具有这种输入的神经网络最多可以学习 3 个类别。张量 x 的每个输入都关联了张量 y 的标签,而 y 的标签可以是 0、1 或 2 合一热门符号。

    有了这样的东西,你可以学习例如“keys”、“HouseKeys”和“CarKeys”,但你将无法添加“OfficeKeys”。

    因此,第一步是确保您的网络可以学习到您想要的最大标签数。

    不必一次全部学习。这将我们带到第 2 点:

    看看here。这是 Tensorflow Saver 类的文档。这将允许您保存和加载模型。

    对于您的问题,这转化为在 2 类数据集上训练模型、保存它、生成 3 类数据集、加载先前保存的模型并在新数据集上进行训练。它将与您保存的模型具有相同的“知识”(权重),但它会开始调整它们以适应第三类。

    但为此,您需要确保网络从一开始就可以处理 3 个类。

    希望这会有所帮助!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多