我正在使用张量流图像分类来构建程序。我从github得到了tensorflow,而我所知道的就是如何运行classify_image.py!
我想要做的是选择以简单的方式训练模型。例如,模型知道“钥匙”,但我想为“HouseKeys”训练它,它有一个奇特的钥匙扣或什么的。是否有某种脚本可以用来说“拍摄这20张图像并学习HouseKeys”,这样模型可以将“键”与“HouseKeys”区分开来?
原谅我的nooblines,并提前感谢你!
编辑:显然,模型保持对之前所知的所有其他类别的了解是非常重要的,因为只能识别“HouseKeys”绝对没用。
答案 0 :(得分: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中的一个热记。
通过这样的方式,您可以学习例如"键"," HouseKeys"和#34; CarKeys"但你将无法添加" OfficeKeys"例如。
因此,首先要确保您的网络可以了解所需的最大标签数量。
它不必一次全部学习。这将我们带到第2点:
看看here。这是Tensorflow Saver类的文档。这将允许您保存和加载模型。
对于您的问题,这转化为在2类数据集上训练模型,保存它,生成3类数据集,加载先前保存的模型并训练新数据集。它将与你保存的模型具有相同的"知识" (权重),但它会开始调整它们以适应第三类。
但是为此,您需要确保网络可以从一开始就处理3个类。
希望这有帮助!