Как построить тензор потока MFC в Python, используя Matplotlib - PullRequest
0 голосов
/ 06 июля 2018

Я следовал этому примеру, чтобы вычислить mfcc с использованием тензорного потока. Для визуализации я попытался использовать matplotlib, как указано здесь . Но это говорит

Тензорные объекты не могут быть повторяемыми, если активное выполнение не включено. Чтобы перебрать этот тензор, используйте tf.map_fn.

Когда я делаю print(mfccs) засаду plt.plot(mfccs) и plt.show(), я получаю

Тензор ("strided_slice_2: 0", форма = (0, 13), dtype = float32)

Ниже приведен пример кода. Аналогично здесь

import functools
import tensorflow as tf
from tensorflow.contrib.signal.python.ops import window_ops
from tensorflow.contrib.framework.python.ops import audio_ops as contrib_audio
from tensorflow.contrib import ffmpeg

sampling_rate = 44000
audio_file = tf.placeholder(tf.string)
audio_binary = tf.read_file(audio_file)

desired_channels = 1
waveform = tf.contrib.ffmpeg.decode_audio(
 audio_binary,
file_format="wav",
 desired_channels=desired_channels,
 desired_samples=sampling_rate,
 name='decoded_sample_data')

transwav = tf.transpose(waveform[0])

with tf.name_scope('Energy_Spectogram'):
    fft_frame_length = 512
    fft_frame_step =  512 
    window_fn = functools.partial(window_ops.hann_window, periodic=True)
    stft = tf.contrib.signal.stft(signals=transwav, frame_length=fft_frame_length, frame_step=fft_frame_step,
                                  window_fn=window_fn)
    istft = tf.contrib.signal.inverse_stft(stfts=stft, frame_length=fft_frame_length, frame_step=fft_frame_step,
    window_fn=tf.contrib.signal.inverse_stft_window_fn(fft_frame_step,
                                           forward_window_fn=window_fn))

with tf.Session() as sess:
    original, reconstructed = sess.run([transwav, istft])

import matplotlib.pyplot as plt

plt.plot(original)
plt.plot(reconstructed)
plt.show()

Любые предложения. Спасибо

...