小编Nic*_*e11的帖子

为 Tensorflow 模型选择损失和指标

我正在尝试使用预训练的Xception模型和新添加的分类器进行迁移学习。

这是模型:

base_model = keras.applications.Xception(
    weights="imagenet",
    input_shape=(224,224,3),
    include_top=False
)
Run Code Online (Sandbox Code Playgroud)

我使用的数据集oxford_flowers102直接取自张量流数据集。 是一个数据集页面。

我在选择某些参数时遇到问题- 要么训练准确性显示可疑的低值,要么存在错误。

我需要帮助指定此参数,对于这个(oxford_flowers102)数据集:

  1. 为分类器新添加了密集层。我正在尝试: outputs = keras.layers.Dense(102, activation='softmax')(x)并且我不确定是否应该在此处选择激活功能。
  2. 模型的损失函数。
  3. 指标。

我试过:

model.compile(
    optimizer=keras.optimizers.Adam(),
    loss=keras.losses.SparseCategoricalCrossentropy(from_logits=True),
    metrics=[keras.metrics.Accuracy()],
)
Run Code Online (Sandbox Code Playgroud)

我不确定它是否应该是SparseCategoricalCrossentropyCategoricalCrossentropy,参数呢from_logits

我也不确定是否应该选择指标keras.metrics.Accuracy()keras.metrics.CategoricalAccuracy()

我确实缺乏一些理论知识,但现在我只需要这个就能工作。期待您的答复!

machine-learning deep-learning keras tensorflow tensorflow2.0

7
推荐指数
1
解决办法
4258
查看次数

Spring Security 自定义 PermissionEvaluator

我正在使用 JWT 令牌授权。我正在尝试限制对某些 REST api 端点的访问。我希望它像这样工作:下面的代码应该仅在经过身份验证的用户 id == 中给出的 id 时执行@PathVariable

@PreAuthorize("hasAnyAuthority('ADMIN', 'USER')")
@GetMapping(value = "orders/{id}", produces = "application/json")
public EntityModel<Order> getOrders(@PathVariable Long id) { ... )
Run Code Online (Sandbox Code Playgroud)

这些文章或多或少描述了我想要完成的事情:类似的帖子文章

我不明白CustomPermissionEvaluator implements PermissionEvaluator在我的情况下第二个链接应该是什么样子。如果有人能给我一些提示,我将不胜感激。

我的第二个问题是,我以后能做的就是获取 username authentication.getName(),然后我必须使用UserRepositoryto findUserByUsername(String username)。这样做正常吗?这是额外的数据库查询。我想知道是否可以以某种方式将 userID 添加到令牌(因为返回的函数UsernamePasswordAuthenticationToken已经通过用户名获取用户)。

spring-security jwt spring-boot

6
推荐指数
1
解决办法
8091
查看次数

如何在迁移学习期间冻结批标准化层

我正在遵循TensorFlow 官方网站上的迁移学习和微调指南。它指出在微调期间,批量归一化层应处于推理模式:

BatchNormalization关于图层的重要说明

许多图像模型包含BatchNormalization图层。从所有可以想象的角度来看,该层都是一个特例。以下是一些需要记住的事情。

  • BatchNormalization包含 2 个不可训练的权重,在训练期间更新。这些是跟踪输入的均值和方差的变量。
  • 当您设置 时bn_layer.trainable = FalseBatchNormalization图层将在推理模式下运行,并且不会更新其均值和方差统计数据。一般来说,其他层的情况并非如此,因为权重可训练性和推理/训练模式是两个正交的概念。但在层的情况下两者是并列的BatchNormalization
  • 当您解冻包含BatchNormalization图层的模型以进行微调时,您应该在调用基础模型时BatchNormalization通过传递将图层保持在推理模式。training=False否则,应用于不可训练权重的更新将突然破坏模型所学到的知识。

您将在本指南末尾的端到端示例中看到此模式的实际应用。

尽管如此,其他一些来源,例如这篇文章(标题为 ResNet 的迁移学习),说了一些完全不同的内容:

for layer in resnet_model.layers:
    if isinstance(layer, BatchNormalization):
        layer.trainable = True
    else:
        layer.trainable = False
Run Code Online (Sandbox Code Playgroud)

training无论如何,我知道 TensorFlow 中的和参数之间存在差异trainable

我正在从文件加载模型,如下所示:

model = tf.keras.models.load_model(path)
Run Code Online (Sandbox Code Playgroud)

我以这种方式解冻(或者实际上冻结其余部分)一些顶层:

model.trainable = True

for layer in model.layers:
    if layer not in model.layers[idx:]:
        layer.trainable = False …
Run Code Online (Sandbox Code Playgroud)

neural-network keras tensorflow batch-normalization tensorflow2.0

5
推荐指数
1
解决办法
5914
查看次数