【问题标题】:Keras, custom image dataset, binary result with percentageKeras,自定义图像数据集,带百分比的二进制结果
【发布时间】:2017-09-28 22:43:36
【问题描述】:

我有这两组图像。每张图片都附有一个百分比。我有一个使用返回二进制结果(0 或 1)的图像训练的模型。我想返回机器对 0 或 1 的确定程度的百分比。

举个例子,假设它们是猫图像。我也有关于“猫”有多大的百分比(100% 非常大,0% 非常小)。我希望模型告诉我“这是一只 78% 大的猫”。

我当前的数据集基于两个文件夹(大猫和小猫)。第一个数字是图像的编号(例如 1 到 1000)。第二个数字是猫有多大的百分比:

../big_cats
    cat1_78.png
    cat2_97.png
    cat3_67.png
    ...
../small_cats
    cat1_12.png
    cat2_9.png
    cat3_24.png
    ...

所以现在我不使用百分比,我得到一个 0 或 1(大或小),但我的目标是模型使用它来告诉我“这是一只 67% 的大猫” ,其中 50% 是中型猫,100% 是最大的猫,0% 是最小的猫。

我尝试过使用softmaxcategorical_cassentropy,但这只是说明猫是大还是小的二元决策的估计准确度(如果我理解正确的话)。

我的问题是:如何准备数据集以获得该结果?如何创建数据训练和验证以读取图像名称中的这个百分比?有什么我可以学习的教程吗?我需要使用Keras + Tensorflow

【问题讨论】:

    标签: machine-learning tensorflow keras


    【解决方案1】:

    你应该有一个用于输出预测层的 Dense (1) 或 (2) 和 softmax 函数,因为你想知道图片是猫还是不是猫(两类)。这意味着您需要将标签重塑为 (num_pic, 2) ,其中第一列用于指示图片是否为猫,第二列用于指示图片是否不是猫;或 (num_pic, 1) 仅指示它是否是猫。

    这样,两个(或一个)输出神经元中的每一个都将是一个介于 0 和 1 之间的数字,可以用作概率。

    【讨论】:

    • 非常感谢您的回复。我现在正在使用softmaxcategorical_cassentropyx = Dense(2, activation='softmax', name='predictions')(x) my_model = Model(input=input, output=x) my_model.compile(optimizer='sgd', loss='categorical_crossentropy', metrics=['accuracy']) 一旦我完成模型训练并获得一些有价值的反馈,我就会进行更新。再次感谢您。
    • 您好@yilun-zhang,据我了解,您的回答在某种程度上是正确的,但对于我的应用程序来说不是正确的。如何根据同一班级的素质做出预测?不是是否是猫,而是猫有多大,100% 很大,0% 很小,我有 10,000 张不同百分比的猫的照片?对不起,如果我的问题不够清楚,它已经帮助我理解了很多东西。
    • @aramusss 在这种情况下,这是一个完全不同的机器学习问题。对于这个,您将需要正确的标签(图像中猫的大小)来训练一种回归模型,以预测猫的大小。这不再是分类问题。
    • 我已经用更清晰的例子更新了我希望的问题。是的,你是对的,看起来不再像分类问题了。你能告诉我要搜索什么,或者有人做类似事情的任何例子吗?我在研究中找不到任何东西。再次感谢您的帮助!
    • @aramusss 基本上,为了将其视为回归问题,您需要更改softmax函数和损失函数。您可以搜索“keras 回归”,您可以按照一些示例来了解该任务。
    猜你喜欢
    • 2018-11-18
    • 2016-07-29
    • 1970-01-01
    • 2019-05-02
    • 1970-01-01
    • 2019-01-14
    • 1970-01-01
    相关资源
    最近更新 更多