【问题标题】:How can I encoder transform a class while loading a model and training with one class如何在加载模型并使用一个类进行训练时对类进行编码器转换
【发布时间】:2019-12-12 18:53:40
【问题描述】:

我已经将模型保存为my_model.h5。我有 7 类在里面是

array(['Drums Beating', 'Machine Digging', 'Man Movement',
      'Manual Digging', 'Manual Digging - Deeper (1.5 to 3 feets)',
      'Normal', 'Tunneling'], dtype=object)

现在我必须训练一个只有一个类(suppose 'drums beating') 的模型。所以我将用旧权重初始化新训练模型的权重。所以当我需要对我的标签进行编码时(比如drums beating),我该如何对其进行编码,使其具有一个虚拟值([0,0,0,1,0,0,0]),就像我之前训练时一样。

为了清楚起见,鼓声的早期虚拟值是[0,0,0,1,0,0,0]。但是当我按如下方式加载编码器时

with open('/home/ANN_Unrolled_30_sample_7_class/ANN_UNrolled_sample_30_7_class.pkl', 'rb') as f:
   encoder = pkl.load(f)

并申请encode.transform,它变成[0],因为新训练模型中只有一个类。我该怎么做才能得到以前的假人本身([0,0,0,1,0,0,0]]

如果我过分强调或过分强调某事,请在 cmets 中告诉我。

【问题讨论】:

    标签: python machine-learning encoder machine-learning-model


    【解决方案1】:

    执行以下操作

    with open('/home/ANN_Unrolled_30_sample_7_class/ANN_UNrolled_sample_30_7_class.pkl', "rb") as infile:
       encoder = pkl.load(infile)
    temp = encoder.transform(your_required_classes)
    num = len(encoder.classes_)
    k = to_categorical(temp,num_classes=num)
    

    【讨论】:

      【解决方案2】:

      在对整个训练数据(7 个类别)进行训练之后,您需要对编码器进行腌制,就像对神经网络所做的那样。

      最好的方法是有一个单独的数据转换管道,可以腌制。我建议来自 sklearn 的 Pipeline

      【讨论】:

      • 是的,我已经腌制了编码器并在训练时保存了它。现在当我重新加载它并对其应用变换时,我需要获取我以前用于该类的编码器值。什么管道是用于,你能解释一下吗?
      猜你喜欢
      • 2011-11-04
      • 2016-08-14
      • 2023-02-01
      • 2019-05-19
      • 2017-12-12
      • 1970-01-01
      • 2017-07-16
      • 1970-01-01
      • 2021-03-12
      相关资源
      最近更新 更多