设置 Keras 模型可训练与使每一层可训练之间有什么区别

2023-12-13

我有一个由一些密集层组成的 Keras 顺序模型。我将整个模型的可训练属性设置为 False。但我看到各个层的可训练属性仍然设置为 True。我是否需要将图层的可训练属性也单独设置为 False?那么将整个模型的trainable属性设置为False有什么意义呢?


为了能够回答这个问题,您需要查看 Keras 的源代码,这样做后您可能会感到惊讶,因为您会意识到:

  • The Sequential class 是一个子类 of Model类,以及
  • the Model class 是一个子类 of Network类,以及
  • the Network class 是一个子类 of Layer class!

正如我所说,Keras 模型源自 Keras 层,这可能有点令人惊讶。但如果你进一步思考,你会发现它是合理的,因为它们有很多共同的功能(例如,两者都获取一些输入,对它们进行一些计算,产生一些输出,并更新它们的内部权重/参数)。它们的共同属性之一是trainable属性。现在当你设置trainable的财产model as False它会skip权重更新步骤。换句话说,它不检查trainable其底层的属性;相反,首先它检查自己的 trainable属性(更准确地说是Network类),如果是False更新被跳过。因此,这并不意味着它的底层有它们的trainable属性设置为False以及。不这样做有一个很好的理由:层的单个实例可以在多个模型中使用。例如,考虑以下两个具有共享层的模型:

inp = Input(shape=...)

shared_layer = Dense(...)
sout = shared_layer(inp)

m1_out = Dense(...)(sout)
m2_out = Dense(...)(sout)

model1 = Model(inp, m1_out)
model2 = Model(inp, m2_out)

现在如果我们设置model1.trainable = False,这会冻结整个model1(即训练model1不更新其底层的权重,包括shared_layer);但是,那shared_layermodel2 仍然可以训练(即训练model2将更新其所有层的权重,包括shared_layer)。另一方面,如果我们设置model1.layers[1].trainable = False,那么shared_layer被冻结,因此在训练时其权重也不会更新model1 or model2。这样你就可以拥有更多的控制权和灵活性,因此你可以构建更复杂的架构(例如 GAN)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

设置 Keras 模型可训练与使每一层可训练之间有什么区别 的相关文章

随机推荐

  • 使用 Java 配置在 Spring 中重定向 404 错误

    如您所知 在 XML 中 配置方法是
  • Java 对象的“相同性”是如何定义的?

    我想将自定义类型的对象添加到集合中 我有几个相同的 即它们的公共变量具有相同的值 我不希望将 同一 对象的多个实例添加到集合中 但每次创建新对象时 总是会添加它 这是因为 Object 类的 equals 方法在对象上实现了最具辨别力的可能
  • 禁用线性布局内的所有编辑文本

    我正在尝试禁用线性布局内的所有字段 该线性布局中有许多 edittext 和 textview 但是 我只是想禁用 edittext 我能够禁用所有孩子 但我希望能够禁用编辑文本 有什么办法可以做到这一点吗 Where ll是你的线性布局
  • 编写自定义函数时将列名称传递给 dplyr::coalesce()

    我正在尝试编写一个将包装的函数dplyr coalesce 并将接受数据对象和列名称来合并 到目前为止 我的尝试都失败了 示例数据 library dplyr df lt data frame col a c bob NA bob NA b
  • AppSync S3对象检索

    我的文件目前正在根据提供的教程上传到 s3 存储桶 我有一个 Post 类型 其文件字段指向 S3Object S3Object 具有bucket key 和region 的值 我想允许我的用户下载他们上传的文件 但我无法通过查询访问 发布
  • 覆盖 SaveChanges 并设置 ModifiedDate,但如何设置 ModifiedBy?

    我有一个 ASP NET MVC3 Web 应用程序 包含 UI 业务 实体 和数据 DbContext 层 我正在使用 Entity Framework 4 1 Code First 现在 我正在推翻DbContext SaveChang
  • 是否有人有批处理文件来应用并在 Clearcase 中创建标签或基线

    这里我需要一个批处理文件 它可以应用并创建标签或基线到透明案例项目中的版本化元素 如果有人有这个 请提供给我 如果要创建 UCM 基线 则无需先创建标签 只需进入您的视图并设置基线 cd m myView myVob myRootCompo
  • 使用 android MediaPlayer 进行无缝播放

    我试图连续重复播放音频 没有任何间隙 我试过了 mediaplayer setLooping true 但它给出了重复时间之间的差距 并尝试了这个 mediaplayer setOnCompletionListener new MediaP
  • @keyframes 不支持阿拉伯语

    我尝试用 keyframes 用阿拉伯语写一个句子 但 keyframes 不支持阿拉伯语 并且出现难以理解的字符 caption background color black caption h1 after animation move
  • 使用 JavaFX 11 的自定义 JRE

    我正在使用 JDK 11 和 JavaFX 11 我使用 Jlink 为示例 FX 模块程序创建了一个自定义 JRE 但是当我尝试使用自定义 JRE 运行时 它会呈现如下错误 这就是我创建自定义 JRE 的方式 没有错误 jlink mod
  • jQuery 只允许数字、字母和连字符

    如何使用 jQuery 从字符串中删除除数字 字母和连字符之外的所有内容 我发现这段代码只允许使用字母数字字符 但我不确定如何添加连字符 text keypress function e var regex new RegExp a zA
  • FullCalendar 在周末和无周末之间切换

    我想知道 Arshaw 的 FullCalendar 是否有办法 1 将日历从显示周末更改为不显示周末 反之亦然 2 动态地将时隙间隔从30分钟更改为60分钟 换句话说 我想做的是 Clicking the button that show
  • 使用 JDBC 连接 Mysql 时出现 ClassNotFoundException

    当我尝试在命令行运行简单的 Java JDBC 程序时 出现以下错误 Exception in thread main java lang NoClassDefFoundError LoadDriver java Caused by jav
  • 将元组转换为字符串

    自从我发现boost lexical cast所有转换都轻而易举 直到尝试将元组元素转换为字符串 Like Int2String or Double2String I want 一种从任意数量元素的元组生成单个字符串的方法 由于转换的主题具
  • Git checkout 无意中删除了未跟踪的文件

    我遇到过 Git 的一个奇怪的行为 我有一个存储库 其中包含在 gitignore file 我所做的具体步骤 隐藏 4 个文件 git stash 查看了几个月前我的第一次提交 git checkout
  • Alamofire 5 逃避向前斜线

    在过去的几天里 我一直在谷歌上搜索并尝试有关 alamofire 前斜杠的自动转义 其中 path image png 变为 path image png 然而 如果您使用 swiftyJson 通过 httpBody 发送或使用 Alam
  • 在Python中有效地检查字符串是否由一个字符组成

    检查字符串是否有效的方法是什么s在Python中只包含一个字符 比如说 A 就像是all equal s A 其行为如下 all equal AAAAA A True all equal AAAAAAAAAAA A True all equ
  • 为什么 -moz-animation 不起作用?

    以下 CSS 在 Webkit 中运行良好 没有在 Opera 中检查过 但我知道它在 Firefox 中不起作用 有人能告诉我为什么吗 正确的类肯定会应用到我的 HTML 用 Firebug 检查它 我确实看到了 moz animatio
  • 异步登录龙卷风

    我使用 Tornado 创建了一个适用于同步方法的登录页面 现在我想将其设为异步 那么我应该对以下代码进行哪些更改 import tornado ioloop import tornado web import http import ti
  • 设置 Keras 模型可训练与使每一层可训练之间有什么区别

    我有一个由一些密集层组成的 Keras 顺序模型 我将整个模型的可训练属性设置为 False 但我看到各个层的可训练属性仍然设置为 True 我是否需要将图层的可训练属性也单独设置为 False 那么将整个模型的trainable属性设置为