【问题标题】:Methods to increase the Accuracy of the AI base Heart Sound's Classification提高 AI 基础心音分类准确度的方法
【发布时间】:2021-08-26 05:20:14
【问题描述】:

我们有一个用于心音分类 (link) 的 GitHub 项目,其README 内容如下:

技术可以在解决上述问题方面发挥作用。这 心音图 (PCG) 是检索心脏声音的方法 心。这种声音可以通过简单的听诊器来捕捉。在这个 工作,我们正在提出一个人工智能模型,它具有 从心音中检测心脏异常的潜力。

数据集可以从https://physionet.org下载。这个数据是 也可以在下面的链接中找到 https://drive.google.com/open?id=13ehWqXt8YDrmmjQc7XAUqcCk6Dwb69hy 数据从两个来源收集:(A) 通过公众 iStethoscope Pro iPhone 应用程序,以及 (B) 来自医院的临床试验 使用数字听诊器 DigiScope。有两个任务 与此数据相关联:

  1. 心音特征提取 第一个任务是从音频数据中的心音中提取特征。
  2. 心音分类 任务是产生一种方法,可以将真实心音分为四个类别之一(正常、杂音、 额外的声音和人工制品)。

所以如果可能的话,我在这里询问了一些想法来提高 验证准确性 心音分类的深度学习算法,代码和块可以在下面看到(link):



import keras
from keras.models import Sequential
from keras.layers import Conv1D, MaxPool1D, GlobalAvgPool1D, Dropout, BatchNormalization, Dense
from keras.optimizers import Adam
from keras.callbacks import ModelCheckpoint, LearningRateScheduler, EarlyStopping
from keras.utils import np_utils
from keras.regularizers import l2

from scipy.signal import decimate

#new_labels = np.array(new_labels, dtype='int')
Y_train = np_utils.to_categorical(y_train)
Y_test=np_utils.to_categorical(y_test)

model = Sequential()
model.add(Conv1D(filters=4, kernel_size=9, activation='relu', input_shape = x_train.shape[1:],kernel_regularizer = l2(0.025)))
model.add(MaxPool1D(strides=4))
model.add(BatchNormalization())
model.add(Conv1D(filters=4, kernel_size=(9), activation='relu',
                kernel_regularizer = l2(0.05)))
model.add(MaxPool1D(strides=4))
model.add(BatchNormalization())
model.add(Conv1D(filters=8, kernel_size=(9), activation='relu',
                 kernel_regularizer = l2(0.1)))
model.add(MaxPool1D(strides=4))
model.add(BatchNormalization())
model.add(Conv1D(filters=16, kernel_size=(9), activation='relu'))
model.add(MaxPool1D(strides=4))
model.add(BatchNormalization())
model.add(Dropout(0.25))
model.add(Conv1D(filters=64, kernel_size=(4), activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.5))
model.add(Conv1D(filters=32, kernel_size=(1), activation='relu'))
model.add(BatchNormalization())
model.add(Dropout(0.75))
model.add(GlobalAvgPool1D())
model.add(Dense(3, activation='softmax'))

def batch_generator(x_train, y_train, batch_size):
    """
    Rotates the time series randomly in time
    """
    x_batch = np.empty((batch_size, x_train.shape[1], x_train.shape[2]), dtype='float32')
    y_batch = np.empty((batch_size, y_train.shape[1]), dtype='float32')
    full_idx = range(x_train.shape[0])
    
    while True:
        batch_idx = np.random.choice(full_idx, batch_size)
        x_batch = x_train[batch_idx]
        y_batch = y_train[batch_idx]
    
        for i in range(batch_size):
            sz = np.random.randint(x_batch.shape[1])
            x_batch[i] = np.roll(x_batch[i], sz, axis = 0)
     
        yield x_batch, y_batch
        
weight_saver = ModelCheckpoint('set_a_weights.h5', monitor='val_loss', 
                               save_best_only=True, save_weights_only=True)

model.compile(optimizer=Adam(1e-4), loss='categorical_crossentropy', metrics=['accuracy'])
annealer = LearningRateScheduler(lambda x: 1e-3 * 0.8**x)

x_train.shape

hist = model.fit_generator(batch_generator(x_train, Y_train, 8),
                   epochs=10, steps_per_epoch=1000,
                   validation_data=(x_test, Y_test),
                   callbacks=[weight_saver, annealer],
                   verbose=2)

model.load_weights('set_a_weights.h5')
import matplotlib.pyplot as plt

谢谢。

【问题讨论】:

  • 如果不了解更多数据,将很难回答您的问题(考虑提供样本)。你如何加载数据?一般来说,请不要粘贴带有代码的图像 - 这没有帮助。此外,您还可以考虑查看 Stack Overflow 指南,了解如何提出好问题以及当有人回答时该怎么做(您问了很多问题,到目前为止,向回答的人提供的反馈很少)。

标签: tensorflow keras audio classification


【解决方案1】:

尝试查看相关出版物。例如,工作基于 The Heat Sounds Shenzhen Corpus可能对你有用吗?

否则,我同意上面的说法,这可能不是堆栈溢出的合适问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-10-14
    • 1970-01-01
    • 2018-10-09
    • 2015-04-28
    • 2016-06-16
    • 1970-01-01
    • 2013-12-10
    • 1970-01-01
    相关资源
    最近更新 更多