gpt4 book ai didi

deep-learning - 在 keras 中使用反向传播调整输入特征

转载 作者:行者123 更新时间:2023-12-03 01:55:21 25 4
gpt4 key购买 nike

我正在尝试按照中的建议在 Keras 中实现判别条件代码

Xue, Shaofei, et al., "Fast adaptation of deep neural network based on discriminant codes for speech recognition."

主要思想是将每个条件编码为输入参数,并让网络学习条件和特征标签映射之间的依赖关系。在新的数据集上,您只需使用反向传播调整这些权重,而不是调整整个网络。例如,假设我的网络如下所示

          X ---->|----|
|DNN |----> Y
Z --- >|----|

X:功能 Y:标签 Z:条件代码

现在给定一个预训练的 DNN,以及新数据集上的 X'Y',我尝试使用反向传播来估计 Z'这将最大限度地减少 Y' 上的预测误差。数学看起来很简单,但我不确定如何在无法访问反向传播本身的情况下在 keras 中实现这一点。

例如,我可以添加一个可训练=True的Input()层,并将所有其他层设置为可训练=False。 keras 中的反向传播可以更新的不仅仅是层权重吗?或者有没有办法破解 keras 层来做到这一点?

欢迎任何建议。谢谢

最佳答案

通过查看 fchollet 的帖子 here,我弄清楚了如何在 Keras 中(准确地)执行此操作。

使用 keras 后端,我能够直接计算损失相对于 Z 的梯度,并用它来驱动更新。

代码如下:

import keras.backend as K
import numpy as np

model.summary() #Pretrained model
loss = K.categorical_crossentropy(Y, Y_out)
grads = K.gradients(loss, Z)
grads /= (K.sqrt(K.mean(K.square(grads)))+ 1e-5)

iterate = K.function([X,Z],[loss,grads])

step = 0.1

Z_adapt = Z_in.copy()

for i in range(100):
loss_val, grads_val = iterate([X_in,Z_adapt])
Z_adapt -= grads_val[0] * step
print "iter:",i,np.mean(loss_value)

print "Before:"
print model.evaluate([X_in, Z_in],Y_out)


print "After:"
print model.evaluate([X_in, Z_adapt],Y_out)

X,Y,Z 是模型图中的节点。 Z_inZ' 的初始值。我将其设置为训练集的平均值。 Z_adapt 是在 100 次梯度下降迭代之后,应该会给你一个更好的结果。

关于deep-learning - 在 keras 中使用反向传播调整输入特征,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43353851/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com