当前位置: 首页 > 面试题库 >

如何获得喀拉斯山脉的梯度?

闾丘康安
2023-03-14
问题内容

我正在尝试调试keras已建立的模型。似乎我的梯度正在爆炸,或者被0除以此类推。当它们通过网络反向传播时,能够检查各种梯度会很方便。如下所示是理想的:

model.evaluate(np.array([[1,2]]), np.array([[1]])) #gives the loss
model.evaluate_gradient(np.array([[1,2]]), np.array([[1]]), layer=2) #gives the doutput/dloss at layer 2 for the given input
model.evaluate_weight_gradient(np.array([[1,2]]), np.array([[1]]), layer=2) #gives the dweight/dloss at layer 2 for the given input

问题答案:

您需要创建一个符号Keras函数,将输入/输出作为输入并返回渐变。这是一个工作示例

import numpy as np
import keras
from keras import backend as K

model = keras.Sequential()
model.add(keras.layers.Dense(20, input_shape = (10, )))
model.add(keras.layers.Dense(5))
model.compile('adam', 'mse')

dummy_in = np.ones((4, 10))
dummy_out = np.ones((4, 5))
dummy_loss = model.train_on_batch(dummy_in, dummy_out)

def get_weight_grad(model, inputs, outputs):
    """ Gets gradient of model for given inputs and outputs for all weights"""
    grads = model.optimizer.get_gradients(model.total_loss, model.trainable_weights)
    symb_inputs = (model._feed_inputs + model._feed_targets + model._feed_sample_weights)
    f = K.function(symb_inputs, grads)
    x, y, sample_weight = model._standardize_user_data(inputs, outputs)
    output_grad = f(x + y + sample_weight)
    return output_grad


def get_layer_output_grad(model, inputs, outputs, layer=-1):
    """ Gets gradient a layer output for given inputs and outputs"""
    grads = model.optimizer.get_gradients(model.total_loss, model.layers[layer].output)
    symb_inputs = (model._feed_inputs + model._feed_targets + model._feed_sample_weights)
    f = K.function(symb_inputs, grads)
    x, y, sample_weight = model._standardize_user_data(inputs, outputs)
    output_grad = f(x + y + sample_weight)
    return output_grad


weight_grads = get_weight_grad(model, dummy_in, dummy_out)
output_grad = get_layer_output_grad(model, dummy_in, dummy_out)

我编写的第一个函数返回了模型中的所有渐变,但是扩展它并不难,因此它支持图层索引。但是,这可能很危险,因为此索引将忽略模型中没有权重的任何图层,并且最终在模型和渐变中将具有不同的图层索引。
我编写的第二个函数在给定层的输出处返回渐变,那里的索引与模型中的相同,因此可以安全地使用它。

注意 :该版本适用于Keras 2.2.0,而不是低于该版本,因为此发行版包括以下主要重构:keras.engine



 类似资料:
  • 问题内容: 有没有办法在jenkins中获取当前构建的作业名称,并将其作为参数传递给ant构建脚本? 问题答案: Jenkins设置了一些环境变量,例如(请参阅此处),以获取有关设置的变量的更多详细信息。 然后,您可以通过在ant中访问它们。 编辑:还有在同一页上的环境变量有点HOWTO 这里。

  • 我有一个配置文件,我想在那里更改颜色。但是在我的视图中,函数背景(bg1Color)给我错误; 参数类型“UIColor”不符合预期的类型“视图” 我该如何解决这个问题? 我的配置文件; 我的功能代码;

  • 我用所选值填充下拉列表,如下所示, 要访问所选选项im,请使用: 这里myOption返回“three”作为值。我如何得到值,即“3”,而不是文本?

  • 问题内容: 我正在使用react,我想获得react下拉列表中所选选项的值,但我不知道如何。有什么建议?谢谢!我的下拉列表只是一个类似的选择: 问题答案: 方法中的代码表示任何给定时间的组件。如果您执行以下操作,则用户将无法使用表单控件进行选择: 因此,有两种使用表单控件的解决方案: 受控组件 使用组件可以反映用户的选择。这提供了最大的控制权,因为您所做的任何更改都将反映在组件的呈现中: 例: J

  • 我需要以编程方式获取所有路由的路径列表。 我尝试了-在L5中不工作-不是静态方法。 我敢打赌,我可以从获取,但我不知道怎么做。

  • 我正在努力在工作进行的时候得到测试结果。当我们通过eclipse运行测试套件时,我们在运行套件时从TestNG查看器获得测试结果,我想让Jenkins中的相同查看器或类似查看器在完成之前知道构建的当前状态。 我在TestNG Viewer中的意思是:运行套件TestNG Viewer的结果 谢谢大家:)