【问题标题】:Calculating gradients of a certain layer in YAMNET计算 YAMNET 中某一层的梯度
【发布时间】:2020-01-15 07:35:16
【问题描述】:

我正在尝试从YAMNET 的“layer14/pointwise_conv”层获取渐变值。

首先,我刚刚打开了repository,这样您就可以轻松地看到我正在努力解决的完全相同的代码。

YAMNET 在 tf_model 的结构中包含 mel_spec 特征提取和框架。
(例如,项目中包含的音频文件为 10 秒长,并在处理时转换为 19 帧 mel_spec 数据)
因此,我打算获取每个帧的 grads_val ,

y_c = yamnet.output[0][0, prediction.argmax()]
conv_output = yamnet.get_layer('layer14/pointwise_conv').output
grads = K.gradients(y_c, conv_output)[0]
gradient_function = K.function([yamnet.input], [conv_output, grads])

output, grads_val = gradient_function([INPUT_IMAGE])

但只有第一帧被正确处理。

如何计算每一帧的梯度?

【问题讨论】:

    标签: tensorflow keras gradient


    【解决方案1】:

    已发布的 YAMNet 使用原始 TensorFlow 进行训练,然后“翻译”到 Keras 以使其更易于使用。但是,我们不是 Keras 专家,我们的行为存在一些问题。

    您可以通过一次向分类器显示一个帧来获得所需的结果。每个分类器输出帧基于 0.975 秒的音频(16 kHz 波形的 15,600 个样本),连续帧基于连续的音频块;默认情况下,帧提前 0.48 秒(因此 15,600-7,680 = 7,920 个连续帧之间的重叠样本)。

    如果您手动将输入分块为 15,600 个样本的重叠块,然后一次一个地将它们传递给网络,您现有的梯度计算可能会起作用。

    应该有一个更简单的解决方案可以与提供的 Keras 机器一起使用,但我对此了解不够。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-05-15
      • 2018-11-24
      • 2017-12-06
      • 1970-01-01
      • 2020-05-13
      • 1970-01-01
      • 2020-10-31
      • 1970-01-01
      相关资源
      最近更新 更多