【发布时间】: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。有两个任务 与此数据相关联:
- 心音特征提取 第一个任务是从音频数据中的心音中提取特征。
- 心音分类 任务是产生一种方法,可以将真实心音分为四个类别之一(正常、杂音、 额外的声音和人工制品)。
所以如果可能的话,我在这里询问了一些想法来提高 验证准确性 心音分类的深度学习算法,代码和块可以在下面看到(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