我有以下功能,可以使用tf.data读取音频文件及其标签
def get_waveform(file_path):
audio_binary = tf.io.read_file(file_path)
waveform, sr = tf.audio.decode_wav(contents=audio_binary,
desired_channels=1)
waveform = tf.squeeze(waveform, axis=-1)
frames = tf.signal.frame(waveform, sr * 3, (sr * 3) // 2, pad_end=True)
return frames
def get_label(file_path):
parts = tf.strings.split(
input=file_path,
sep=os.path.sep)
return parts[-2]
def get_waveform_and_label(file_path):
label = get_label(file_path)
waveform = get_waveform(file_path)
label = ???
return waveform, labelget_waveform函数将返回单个音频文件波形的N个帧,并且所有帧都具有相同的标签。那么,我如何重复N次,并通过压缩帧和它们相应的标签返回它呢?
发布于 2022-06-28 07:01:53
您只需使用tf.map_fn函数来重复标签。它以一个函数和张量作为输入,并将该函数应用于张量中的每个元素。因此,首先使用tf.shape函数获得波形张量的形状,然后将其作为第二个参数传递给tf.map_fn函数,以指定重复标签的次数。
def get_waveform_and_label(file_path):
label = get_label(file_path)
waveform = get_waveform(file_path)
label = tf.map_fn(lambda x: label, tf.shape(waveform))
return waveform, labelhttps://stackoverflow.com/questions/72781961
复制相似问题