科研记录LSTM

科研记录——keras

Pytorch是可以实现正则化的,其中
optimizer = torch.optim.SGD(model.parameters(), lr=lr, weight_decay=1e-4)
其中,权重衰减系数weight_decay就是一种正则方法。
具体而言:权重衰减等价于 L2 范数正则化(regularization)。
但Pytorch无法实现嵌套的正则化,只能单纯重写写

# 定义L1正则化函数
def l1_regularizer(weight, lambda_l1):
    return lambda_l1 * torch.norm(weight, 1)

# 定义L2正则化函数
def l2_regularizer(weight, lambda_l2):
    return lambda_l2 * torch.norm(weight, 2)

Pytorch正则化

import torch
import torch.nn as nn

#定义网络结构
class CNN(nn.Module):
    pass 
# 实例化网络模型
model = CNN()  
# 定义损失函数
criterion = nn.MSELoss()
# 定义优化器
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
# 迭代训练
for epoch in range(1000):
    #训练模型
    model.train()
    for i, data in enumerate(train_loader, 0):
        #1 解析数据并加载到GPU
        inputs, labels = data
        inputs, labels = inputs.to(device), labels.to(device)
        #2 梯度清0
        optimizer.zero_grad()
        #3 前向传播
        outputs = model(inputs)
        #4 计算损失
        #4.1 定义L1和L2正则化参数
        lambda_l1 = 0.01
        lambda_l2 = 0.01
        
        #4.2 计算L1和L2正则化
        l1_regularization = l1_regularizer(model.weight, lambda_l1)
        l2_regularization = l2_regularizer(model.weight, lambda_l2)
        
        #4.3 向loss中加入L1和L2 
        loss = criterion(outputs, labels)
        loss += l1_regularization + l2_regularization
        
        #5 反向传播和优化
        loss.backward()
        optimizer.step()

在keras框架实现正则化

    kernel_regularizer:施加在神经元权重w上的正则项,为keras.regularizer.Regularizer对象。

    bias_regularizer:施加在神经元偏置向量b上的正则项,为keras.regularizer.Regularizer对象。

    activity_regularizer:施加在输出(激活函数)上的正则项,为keras.regularizer.Regularizer对象。

	#其中0.01为上面2.1小节提到的常数系数C,自己设置
	keras.regularizers.l1(0.01)#L1正则项
	keras.regularizers.l2(0.01)#L2正则项
	keras.regularizers.l1_l2(0.01)#结合了L1和L2的正则项
from keras import regularizers
model.add(Dense(2, input_dim=10,#输入数据唯独10,输出唯独为2
                kernel_regularizer=regularizers.l1(0.01),#在权重参数w添加L1正则化
                bias_regularizer=regularizers.l2(0.01),#在偏置向量b添加L2正则化
                activity_regularizer=regularizers.l1_l2(0.01),#在输出部分添加L1和L2结合的正则化
                activation='relu'#激活函数采用ReLU
                ))

输出层添加L1 L2正则化?
keras可以在隐藏层和偏置上分开调价正则化项

正则项在优化过程中层的参数或层的激活值添加惩罚项,这些惩罚项将与损失函数一起作为网络的最终优化;
这个网络层的作用是对输入的损失函数更新正则化。
神经网络的激活值添加惩罚项

python函数修饰符@ 修饰符 ‘@’符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。也就是说@A def f(): 是非法的。 只可以在模块或类定义层内对函数进行修饰,不允许修修饰一个类。一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。本质上讲,装饰符@类似于回调函数,把其它的函数(暂且称为目的参数,后面紧接着的函数)作为自己的入参,在目的函数执行前,执行一些自己的操作,比如:计数、打印一些提示信息等,然后返回目的函数。下面列举一个简单的例子。
参考链接:
https://zhuanlan.zhihu.com/p/470782515

回调函数 callbacks

存储模型,实时监控数据集的变化,
ModelCheckpoint,中途训练效果提升,训练每一轮结束的模型,保存下来;
在这里插入图片描述
checkpoint模型集成;
投票后进行决定;
EarlyStopping:模型早停止;
ReduceLROnPlateau:精调数据
在这里插入图片描述

  • 4
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值