我正在使用自定义损失函数对已训练的模型进行微调。我正在研究音频相关问题。当我的输入文件包含语音时,梯度正在有效地计算出来......
我正在使用自定义损失函数对已经训练过的模型进行微调。我正在研究一个与音频相关的问题。当我的输入文件包含语音时,系统会有效地计算该文件的梯度,但是一旦遇到没有语音的文件,我就会收到未提供梯度的错误。我可以返回该文件的损失,但是所有变量对于该文件的梯度都为零,与我提供的损失规模无关。我检查了模型的变量是否对输入文件有贡献,是的,它们确实转换了输入文件,消除了噪音。所以问题不在于没有变量对输入文件转换有贡献。我认为我在处理代码中未根据相应的 True 条件计算共振峰和谐波误差的情况时可能有错误。
# Update the code snippet to calculate conditions for harmonic and formant errors
is_voiced_h = tf.cond(
tf.logical_and(
tf.logical_and(i < num_frames - 1, tf.equal(speechs[i], 1)),
tf.logical_and(tf.equal(speechs[i], 1), tf.equal(speechs[i + 1], 1)
)),
lambda: True, # Condition met
lambda: False) # Out of bounds or condition not met
is_voiced_f = tf.cond(tf.logical_and(
tf.logical_and(i < num_frames - 1, tf.equal(speechs[i], 1)),
tf.logical_or(tf.equal(speechs[i + 1], 1), tf.equal(speechs[i + 2], 1))
),
lambda: True, # Condition met
lambda: False) # Out of bounds or condition not met
is_unvoiced_f = tf.cond(tf.logical_and(tf.logical_and(i< num_frames - 2, tf.equal(speechs[i], 3)),
tf.logical_or(tf.equal(speechs[i + 1], 3),
tf.equal(speechs[i + 2], 3))),
lambda: True, # Condition met
lambda: False) # Out of bounds or condition not met
if i < (num_frames-2)//2:
not_flagged_f = tf.cond(tf.logical_and(i < num_frames - 2, # Check out of bounds
tf.logical_or(tf.equal(flags[i], False),
tf.logical_or(tf.equal(flags[i + 1], False),
tf.equal(flags[i + 2], False)))),
lambda: True, # Condition met
lambda: False) # out of bounds or condition not met
else:
not_flagged_f = True
pitch = process_audio_tf(ref_frame_h, sample_rate=sample_rate)
pitch = pitch[0]
epsilon = 1e-5
harmonic_error = tf.cond(is_voiced_h,
lambda: process_frame(ref_frame_h, model_frame_h, pitch, sample_rate),
lambda: tf.zeros((1,), dtype=tf.float32)) + epsilon
formant_error = tf.cond(tf.logical_and(tf.logical_or(is_voiced_f, is_unvoiced_f), not_flagged_f),
lambda: calculate_formant_error(ref_frame_f, model_frame_f, sample_rate,
formants[i:i + 1,...][0, 0],
formants[i:i + 1,...][0, 1], n_fft),
lambda: tf.zeros((8,), dtype=tf.float32)) + epsilon
#tf.print('harmonic_error from body', harmonic_error)
#tf.print('formant_error from body', formant_error)
harmonic_errors = harmonic_errors.write(i, harmonic_error)
formant_errors = formant_errors.write(i, formant_error)
return i + 1, harmonic_errors, formant_errors
_, harmonic_errors, formant_errors = tf.while_loop(lambda i, *_: i < num_frames, body, [0, harmonic_errors, formant_errors])
harmonic_errors = harmonic_errors.stack()
formant_errors = formant_errors.stack()
自定义损失函数中的值错误“未为任何变量提供梯度”
下载声明:
本站所有软件和资料均为软件作者提供或网友推荐发布而来,仅供学习和研究使用,不得用于任何商业用途。如本站不慎侵犯你的版权请联系我,我将及时处理,并撤下相关内容!