【问题标题】:Train a NN for a subclass of cifar in Tensorflow : map labels在 Tensorflow 中为 cifar 的子类训练 NN:地图标签
【发布时间】:2020-11-17 22:48:51
【问题描述】:

我选择了 cifar100 的一个子类,在 100 个类中只包含 20 个。当我尝试构建一个具有 20 个输出的 NN 时,我收到此错误:

我的 20 个标签的值在 [0-100] 范围内,但我在最后一层只需要 20 个神经元。当我使最后一层有 100 个神经元时,我可以训练我的模型,但准确度很低。

我想映射 range(100) 中的数字以使它们成为 range(20) 以便 NN 接受它们。 提前谢谢你。

【问题讨论】:

    标签: python-3.x neural-network tensorflow2.0 tfrecord


    【解决方案1】:

    我认为您可能想要做这样的事情(这将在您将数据/标签提供给网络之前作为预处理步骤完成):

    # dummy array/labels
    arr = [1, 3, 6, 8, 10, 4, 7, 15, 25, 19]
    print('original array =', arr)
    
    # create mapping (range(20) in your case)
    mapping = dict(zip(set(arr), range(10)))
    print('mapping =', mapping)
    
    # apply the mapping
    new_arr = list(map(lambda x: mapping[x], arr))
    print('new array =', new_arr)
    
    # >> output:
    # original array = [1, 3, 6, 8, 10, 4, 7, 15, 25, 19]
    # mapping = {1: 0, 3: 1, 4: 2, 6: 3, 7: 4, 8: 5, 10: 6, 15: 7, 19: 8, 25: 9}
    # new array = [0, 1, 3, 5, 6, 2, 4, 7, 9, 8]
    

    所以基本上你的原始标签(这是 len(set(labels)) = 20 但值 > 20,如果我理解正确的话)被映射到最小的可能值,以便它可以与你的损失函数一起使用.如果您需要将标签映射回原始值,最好保留映射以供以后使用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-05-23
      • 1970-01-01
      • 2017-12-04
      • 2018-02-01
      • 2019-08-20
      • 1970-01-01
      • 2017-08-21
      • 2017-07-01
      相关资源
      最近更新 更多