我正在使用tensorflow 2.0版
现在我有一个wav文件,可以在此处加载
audio_file = tf.io.read_file(wav_path)
wav_array, sample_rate = tf.audio.decode_wav(
audio_file,
desired_channels=1)
wav_array = np.array(wav_array)
wav_array = wav_array.reshape(wav_array.shape[0])
然后我会使用
进行短时傅立叶变换spec = tf.signal.stft(wav_array, window_fn=tf.signal.hann_window,
frame_length=WIN_LEN, frame_step=HOP_LEN,fft_length=FFT_SIZE)
当我打印暗淡的东西时
频谱图形状:(748,257)
然后我尝试使用来求逆
inv = tf.signal.inverse_stft(spec,frame_length=WIN_LEN,
frame_step=HOP_LEN,fft_length=FFT_SIZE,
window_fn=tf.signal.hann_window)
但是我得到这个错误
AttributeError:“ int”对象没有属性“ value”
/usr/local/lib/python3.6/dist-
packages/tensorflow/python/ops/signal/spectral_ops.py in
inverse_stft(stfts, frame_length, frame_step, fft_length, window_fn,
name)
if (frame_length_static is None or
real_frames.shape.ndims is None or
--> real_frames.shape[-1].value is None):
real_frames = real_frames[..., :frame_length]
real_frames_rank = array_ops.rank(real_frames)
答案 0 :(得分:1)
深入研究问题,我找到了解决方法。对于function addDevice(params, token){
return axios({
url: 'http://localhost:5000/user/add-device',
method: 'POST',
headers: { 'Authorization': 'Bearer ' + token},
data: {
data1: params.data1,
data2: params.data2,
data3: params.data3
}
})
.then(function(response) {
return response;
})
.catch(function(error) {
return error.response;
});
}
和fft_length
函数,TensorFlow要求inverse_stft
参数为整数。如果未提供,它将按照docs中的描述进行计算。
由于某些原因,文件stft
包含首先定义
spectral_ops.py
,然后尝试多次访问整数real_frames = fft_ops.irfft(stfts, [fft_length]) #line 235
.value
抛出
real_frames.shape[-1].value #lines 244, 255, 257
毫不奇怪。
删除对AttributeError: 'int' object has no attribute 'value'
的调用会使.value
产生预期的结果。可以说这似乎是一个github问题。