如何将sklearn.metrics.classification_report与生成器一起使用?

时间:2020-06-23 14:11:43

标签: python-3.x scikit-learn generator speech-recognition tf.keras

我想使用sklearn.metrics.classification_report,但是我无法直接使用它,因为我的测试数据是由python生成器提供的。 python生成器如下所示。

让我为您提供背景信息。我正在做语音识别,并且正在使用生成器来处理内存问题。基本上,生成器会加载一些批处理,其中包含一些与某些频谱图相对应的numpy数组。每个批次都有一个唯一的ID,因此获取输入批次和输出批次都非常简单。

我正在使用tensorflow.keras构建我的神经网络。因此,到目前为止,我可以使用Model.fit(因为已给定版本,不推荐使用fit_generator)来训练我的模型,并可以使用Model.evaluate_generator来估计具有通用数值度量(由keras.backend制作的宏f1分数)的泛化误差。 , 准确性 ...)。但是,我不知道如何在编译模型时如何使用keras.backend来对分类报告及其代码列表进行编码。

有人有想法吗?任何帮助,将不胜感激 !随意询问更多细节并注释我的代码。我很想阅读您的提示,方法等。

非常感谢!

class Pipeline:

    # some code ...

    def generator(self, set_name):
        # set_name : 'training', 'validation', or 'testing'
        input_paths = glob.glob('{}/{}/batch_input__*.npz'.format(self.path, set_name))
        random.shuffle(input_paths)
        num_inputs = len(input_paths)
        while True:
            for i in range(num_inputs):
                input_filepath = input_paths[i]
                batch_id = input_filepath.split('__')[-1].split('.')[0]
                output_filepath = '{}/{}/batch_output__{}.npz'.format(self.path, set_name, batch_id)
                features = np.load(input_filepath)['arr_0']
                labels = np.load(output_filepath)['arr_0']
                yield features, labels

0 个答案:

没有答案