如何同时训练两个不同数据集的单个模型?

时间:2019-04-29 08:26:11

标签: machine-learning keras deep-learning computer-vision image-recognition

我目前正在研究一个模型,在该模型中我必须预测一些材料,例如梯子,螺母,螺栓,鼠标,瓶子等。我为此编写了一种算法,该算法到目前为止还可以正常工作,我在本地计算机上可用,并且我有足够的培训数据来进行培训和测试。截至目前,我总共可以预测26种图像类别,所有图像类别都是材料类型。

现在,这很好,但是我想要一种情况,如果图像不属于上述图像类,我希望它返回类似的内容,它会指定这不是素材而是另一张图片共。

为此,我正在考虑使用一组不同的图像(例如Imagenet)对模型进行双重训练,其中仅通过查看任何非实质性图像,它就会返回类似“这不是实质性的图像”的信息。 / p>

因此,基本上,同一模型将在两个不同的数据集上训练,一个数据集是我的材料数据集,另一个是除材料以外的任何东西,例如Imagenet中的图像。

我的问题是我该如何处理?还是我什至需要这样做?否则,我只写一个简单的if-else,然后将任何未被识别为实质的内容放入非物质类型?

1 个答案:

答案 0 :(得分:3)

您可以合并两个数据集并将不属于所述26个类的数据集标记为特殊的第27类。每当您的模型预测出该类时,您就知道它不属于数据集。例如:

import {Subscription} from 'rxjs/Subscription';

private onDataChanged: Subscription;

ngOnInit() {
    this.onUsersListChanged = 
       this.sharedService.onUsersListChanged.subscribe(data => {
         cosnole.log(data) // access to shared data :)
    })
}

public ngOnInit() {
    // Do not forget to unsubscribe the subscription
    this.onDataChanged.unsubscribe();
}

然后,您可以使用带有标签2的其他数据集的图像,并像往常一样在训练周期中进行训练。确保平衡数据集,因为按比例没有太多特殊的非本数据集标签,因此您的模型不会过度拟合,只是预测一切都不来自原始数据集。