微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

提高 AI 基础心音分类准确度的方法

如何解决提高 AI 基础心音分类准确度的方法

我们有一个用于心音分类的 GitHub 项目 (link),包含以下 README 内容

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

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

  1. 心音特征提取一个任务是从音频数据中的心音中提取特征。
  2. 心音分类 任务是生成一种方法,可以将真实心音分为四类(正常、杂音、 超心音和神器)。

因此,如果可能的话,我在这里询问了一些关于提高验证准确性的想法 心音分类的深度学习算法,其代码和模块如下(link):

enter image description here



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),kernel_regularizer = l2(0.05)))
model.add(MaxPool1D(strides=4))
model.add(Batchnormalization())
model.add(Conv1D(filters=8,kernel_regularizer = l2(0.1)))
model.add(MaxPool1D(strides=4))
model.add(Batchnormalization())
model.add(Conv1D(filters=16,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

谢谢。

解决方法

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

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。