被冻结的层在训练过程中参与正向反向传递,只是这一层的梯度不再更新。||底层逻辑

 被冻结的层可以前向传播,也可以反向传播,只是自己这一层的参数不更新,其他未冻结层的参数正常更新。

在微调期间,只有被激活的层的梯度会被计算和更新,而被冻结的层的梯度则会保持不变。

其实从数学上去理解也不难,但自己手推还是需要花点时间的,至少先回顾一下BP。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在增量学习,我们通常希望保留之前训练好的模型权重,只更新新加入的部分。因此,我们需要冻结之前训练好的,只更新新增的。 举个例子,假设我们有一个包含三个全连接的神经网络,我们已经训练好了前两个,现在要在第三个上进行增量学习。我们可以使用以下代码冻结前两个的权重: ```python import tensorflow as tf # 之前训练好的模型 model = tf.keras.Sequential([ tf.keras.layers.Dense(64, activation='relu', input_shape=(784,)), tf.keras.layers.Dense(64, activation='relu'), tf.keras.layers.Dense(10, activation='softmax') ]) # 冻结前两个的权重 for layer in model.layers[:2]: layer.trainable = False # 新增第三个并进行训练 model.add(tf.keras.layers.Dense(64, activation='relu')) model.add(tf.keras.layers.Dense(10, activation='softmax')) # 编译模型 model.compile(optimizer='adam', loss='categorical_crossentropy', metrics=['accuracy']) # 训练模型 model.fit(x_train, y_train, epochs=10, validation_data=(x_test, y_test)) ``` 在上面的代码,我们使用`model.layers[:2]`来选择前两个,然后将它们的`trainable`属性设置为`False`,这样在训练过程这两个的权重将不会被更新。然后我们新增了一个含64个神经元的全连接和一个输出,并编译模型进行训练。 通过这种方式,我们可以在不影响之前训练好的权重的情况下,对新增的进行增量学习。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值