【发布时间】:2022-01-25 06:05:43
【问题描述】:
我面临着通过频谱图对声音进行分类的任务。我以一种方式解决了这个问题(我会将所有录音转换为频谱图 -> 将它们保存为图片并为此训练神经网络),但我想采用更简单的方法,即不保存图片,但是立即将音频文件转换为张量,但是有一个问题,我找不到任何有关如何在 TensorFlow 中从张量创建我的数据集的有用信息。我将在 Pytorch 上给出这样的代码示例。
class SoundDataset(Dataset):
def __init__(self, file_names, labels):
self.file_names = file_names
self.labels = labels
def __getitem__(self,index):
#format the file path and load the file
path = self.file_names[index]
scale, sr = librosa.load(path)
filter_banks = librosa.filters.mel(n_fft=2048, sr=22050, n_mels=10)
mel_spectrogram = librosa.feature.melspectrogram(scale, sr=sr, n_fft=2048, hop_length=512, n_mels=32)
log_mel_spectrogram = librosa.power_to_db(mel_spectrogram)
trch = torch.from_numpy(log_mel_spectrogram)
if log_mel_spectrogram.shape !=(10,87):
delta = 87 - log_mel_spectrogram.shape[1]
trch = torch.nn.functional.pad(trch, (0,delta))
return trch,self.labels[index]
def __len__(self):
return len(self.file_names)
这里正在创建一个类,它获取音频记录的路径并将它们转换为张量,如果张量不适合形状,则会填充零。如何为 TensorFlow 创建相同的类。接下来是一个代码示例,它使用文件路径及其类创建元组,并创建声音数据集类的对象,并相应地从这些文件生成数据集。所有这些都是为 Pytorch 编写的。告诉我如何为 TensorFlow 实现它。
path = '/content/drive/MyDrive/МДМА/audiodata/for-rerecorded/training/'
files = []
labels = []
lbl = '1 0'.split()
for lab in lbl:
if lab == '0':
c = 'fake'
else:
c ='real'
names = os.listdir(path+c)
for n in names:
pth = path+c+'/'+n
files.append(pth)
labels.append(int(lab))
train_dataset = SoundDataset(files, labels)
train_loader = torch.utils.data.DataLoader(train_dataset,batch_size = 20)
【问题讨论】:
-
你的数据集在哪里?
-
这是一个包含 3 个文件夹(训练、验证、测试)和音频文件的目录
标签: python tensorflow pytorch conv-neural-network