machine-learning - 使用迁移学习的单类数据集的图像分类
问题描述
我只有大约 1000 张计算机图像。我需要训练一个可以识别图像是计算机还是非计算机的模型。我没有非计算机的数据集,因为它可能是任何东西。
我想最好的方法是应用迁移学习。我正在尝试在预训练的 VGG19 模型上训练数据。但是,我仍然不知道如何在没有任何非计算机图像的情况下仅使用计算机图像来训练模型。
总的来说,我是 ML 新手,如果问题不重要,我很抱歉。
解决方案
没办法,对不起。您将需要大量(至少其他 1000 张图像)非计算机图像。您可以从任何地方获取它们,它们“变化”越多,您的模型就可以更好地提取计算机的特征。
想象一下,作为一个受过训练的婴儿,他总是在某事面前说“是”,下次你看到某事时,无论你面前是什么,你都会说“是”……
对于机器学习模型也是如此,您需要正例和负例,否则您的模型将通过始终预测“是”来获得 100% 的准确度。
如果您想以数学/几何方式查看它,您可以将每个样本(在您的情况下为图像)视为特征空间中的一个点:想象为您拥有的每个属性绘制一个轴(x,y,z 等等),图像将是该空间中的一个点。
为简单起见,让我们考虑一个二维空间,这意味着每个图像可以用 2 个属性来描述(图像不是这种情况,通常特征很多,但为简单起见,想象 feature_1 = 颜色数,feature_2 = 角度数),在这个例子中,我们可以简单地在笛卡尔图中画一个点,每个图像一个点:
分类器的目标是画一条线,更好地将红点与蓝点分开,这意味着将正样本与负样本分开。
如果您只给模型提供正样本(这就是您要做的),您将拥有 100% 准确率的无限模型!因为你可以在任何你想要的地方放一条线,唯一的要求是不要“剪切”你的数据集。
鉴于我假设您是初学者,我只会告诉您该做什么,而不是如何做,因为这需要数年时间;)
1)收集数据——正如我告诉你的,即使是负面的例子,至少还有其他 1000 个样本
2)将数据拆分为训练/测试 - 一个好的拆分可能是训练集中样本的 2/3 和测试集中的 1/3。[记住] 保持最终类分布的一致性,即如果你有 50%-50% 的类“计算机”-“非计算机”,你应该保持训练集和测试集的百分比
3) 训练模型 - 查看此链接以获取指导示例,它使用 MNIST 数据集,这是一个著名的图像分类数据集,您应该使用您的数据
4)在测试集上测试模型,看性能
推荐阅读
- javascript - 如何结合 FlatList 和 if?
- c# - 如何在 asp net core 5 控制器中阻止无效的 json 请求参数(用于 POST 方法)
- sql-server - SQL Server:查询以选择没有工作状态待定的员工
- node.js - 无法从 Bash shell 脚本 (Truffle) 执行全局 Node.js 模块?
- python - 有条件地只保留 pandas groupby 组中的重复项之一
- json - 使用 jq 将 JSON 文件转换为 CSV 文件
- api - 如何生成像 Api 密钥这样的字符串?
- java - 用类名包装由 Gson 创建的 json
- mongodb - POST 数据 Azure 函数
- vba - IE11 是否仍然支持 dispatchEvent/FireElement?