我正在尝试使用 TensorFlow 训练标准的全连接神经网络(也称为多层感知器)。我正在学习一个教程,其中使用手写数字的 MNIST 数据集 ( http://yann.lecun.com/exdb/mnist/ ) 训练类似的神经网络。
但是,TensorFlow 提供了一些内置操作,我无法真正复制。
例如: 为了加载数据,它调用以下函数:
from tensorflow.examples.tutorials.mnist import input_data
mnist = input_data.read_data_sets("/tmp/data/", one_hot=True)
或者从数据加载下一批,它调用以下函数:
batch_x, batch_y = mnist.train.next_batch(batch_size)
有人知道音频数据的类似实现吗?我希望输入是 wav 文件的原始数据。我的数据结构如下:
data/
train/
up/
...
down/
...
...
test/
up/
...
down/
...
...
validate/
up/
...
down/
...
...
提前谢谢您!
最佳答案
没有专门用于导入音频数据的内置操作。
但是,您可以查看 this实现作为起点。
您可以首先使用以下命令生成音频文件列表
def load_data(data_dir):
""" Return 2 lists of tuples:
[(class_id, user_id, path), ...] for train
[(class_id, user_id, path), ...] for validation
"""
# Just a simple regexp for paths with three groups:
# prefix, label, user_id
pattern = re.compile("(.+\/)?(\w+)\/([^_]+)_.+wav")
all_files = glob(os.path.join(data_dir, 'train/audio/*/*wav'))
with open(os.path.join(data_dir, 'train/validation_list.txt'), 'r') as fin:
validation_files = fin.readlines()
valset = set()
for entry in validation_files:
r = re.match(pattern, entry)
if r:
valset.add(r.group(3))
然后创建一个生成器函数将文件提供给您的 Tensorflow 模型:
def data_generator(data, params, mode='train'):
def generator():
if mode == 'train':
np.random.shuffle(data)
# Feel free to add any augmentation
for (label_id, uid, fname) in data:
try:
_, wav = wavfile.read(fname)
wav = wav.astype(np.float32) / np.iinfo(np.int16).max
L = 16000 # be aware, some files are shorter than 1 sec!
if len(wav) < L:
continue
# let's generate more silence!
samples_per_file = 1 if label_id != name2id['silence'] else 20
for _ in range(samples_per_file):
if len(wav) > L:
beg = np.random.randint(0, len(wav) - L)
else:
beg = 0
yield dict(
target=np.int32(label_id),
wav=wav[beg: beg + L],
)
except Exception as err:
print(err, label_id, uid, fname)
return generator
关于python - 如何将 wav 音频数据集加载到 TensorFlow 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50139417/