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

如何在TF2.0中使用自定义渐变创建keras图层?

元昊苍
2023-03-14
问题内容

由于在TensorFlow 2.0中,他们计划统一keras下的所有高级API(我不太熟悉)并完全删除Sessions,我想知道:

如何创建具有自定义渐变的自定义keras图层?

我看过(非常有限)在keras中创建自定义图层的指南,但是它没有描述如果我们希望操作具有自定义渐变应该怎么做。


问题答案:

首先,在keras下对API(如您所称的)的“统一”并不能阻止您像在TensorFlow
1.x中那样做。会话可能消失了,但是您仍然可以像定义任何python函数一样定义模型,并在没有keras的情况下积极地训练模型(即通过tf.GradientTape)

现在,如果要使用执行 自定义操作* 并具有 自定义渐变自定义层 构建keras模型,则应执行以下操作: ***

a)编写执行自定义操作并定义自定义渐变的函数。有关如何执行此操作的更多信息,请参见此处。

@tf.custom_gradient
def custom_op(x):
    result = ... # do forward computation
    def custom_grad(dy):
        grad = ... # compute gradient
        return grad
    return result, custom_grad

请注意,在函数中,您应将xdy视为张量而 不是 numpy数组(即执行张量操作)

b)创建一个执行您的的定制keras图层custom_op。对于此示例,我假设您的图层没有任何可训练的参数或更改其输入的形状,但是如果有的话,它并没有多大区别。为此,您可以参考发布的指南,检查该指南。

class CustomLayer(tf.keras.layers.Layer):
    def __init__(self):
        super(CustomLayer, self).__init__()

    def call(self, x):
        return custom_op(x)  # you don't need to explicitly define the custom gradient
                             # as long as you registered it with the previous method

现在,您可以在keras模型中使用此层,它将起作用。例如:

inp = tf.keras.layers.Input(input_shape)
conv = tf.keras.layers.Conv2D(...)(inp)  # add params like the number of filters
cust = CustomLayer()(conv)  # no parameters in custom layer
flat = tf.keras.layers.Flatten()(cust)
fc = tf.keras.layers.Dense(num_classes)(flat)

model = tf.keras.models.Model(inputs=[inp], outputs=[fc])
model.compile(loss=..., optimizer=...)  # add loss function and optimizer
model.fit(...)  # fit the model


 类似资料:
  • 我有个小问题。 我创建了自定义gradle插件(独立插件),并将它从mavenlocal包含在我的简单项目中。它正在工作,但我不知道如何在我的插件中设置系统属性。更多细节:在我的插件中,在任务中,我想设置系统属性(system.setproperty(key,value))并从我的主应用程序中获取它的属性,例如在main类main方法中,但main方法不使用此属性 当我在构建中创建任务时。grad

  • 问题内容: 有时默认的标准激活(如ReLU,tanh,softmax等)和高级激活(如LeakyReLU)还不够。而且它也可能不在keras- contrib中 。 您如何创建自己的激活功能? 问题答案: 归功于Ritchie Ng 对这个Github问题的评论。 请记住,保存和还原模型时必须导入此功能。请参阅keras- contrib的注释 。

  • 我目前使用matplotlib以以下方式生成图例: 这在某种程度上是可行的,见1。但我在我的传奇中复制了信息。 我宁愿把传说分开。所以我有不同颜色的线对应于时间t,一条法线作为我的解析解,一个点作为我的模拟结果。 诸如此类 --(红线)t=25 --(蓝线)t=50 --(绿线)t=500 模拟 --解析解 现在有人知道我如何用matplotlib实现这一点了吗?

  • 嗨,我一直试图使一个自定义损失函数在kerasdice_error_coefficient。它有它的实现在张量板和我尝试使用相同的函数在keras与张量流但它不断返回一个NoneType当我使用model.train_on_batch或model.fit在那里,因为它给适当的值时,使用在模型中的指标...能不能请人帮帮我我该怎么办?我尝试过跟随像Keras-FCN这样的库,在那里他使用了自定义损失

  • 了解如何在 Illustrator 中创建不同类型的渐变。 渐变是两种或多种颜色之间或同一颜色的不同色调之间的逐渐混和。您可以利用渐变来形成颜色混合,增大矢量对象的体积,以及为图稿添加光亮或阴影的效果。在 Illustrator 中,您可以使用“渐变”面板、渐变工具或“控制”面板来创建、应用和修改渐变。 渐变类型 在 Illustrator 中,您可以创建以下三种类型的渐变: 线性渐变 利用此渐变

  • 了解如何在 Illustrator 中创建不同类型的渐变。 渐变是两种或多种颜色之间或同一颜色的不同色调之间的逐渐混和。您可以利用渐变来形成颜色混合,增大矢量对象的体积,以及为图稿添加光亮或阴影的效果。在 Illustrator 中,您可以使用“渐变”面板、渐变工具或“控制”面板来创建、应用和修改渐变。 渐变类型 在 Illustrator 中,您可以创建以下三种类型的渐变: 线性渐变 利用此渐变