Dataehale_PyTorch Task5

部署运行你感兴趣的模型镜像

#【Task5】PyTorch实现L1,L2正则化以及Dropout(给代码截图参考)

  1. 了解知道Dropout原理
  2. 用代码实现正则化(L1、L2、Dropout)链接
  3. Dropout的numpy实现
  4. PyTorch中实现dropout

Dropout原理

维基百科的描述中提到,全连接网络中的参数很多,非常容易过拟合,而使用Dropout能有效的防止这一现象。
花书将Dropout归类为一种bagging的方法,在网络随机dropout隐单元的过程中,可以将原始的全连接网络当作右边的子网络,这样增加了模型的多样性,防止单一模型对于训练数据的过拟合。
在这里插入图片描述

代码实现正则化

  • L1 正则化
regularization_loss = 0
for param in model.parameters():
    regularization_loss += torch.sum(abs(param))

calssify_loss = criterion(pred,target)
loss = classify_loss + lamda * regularization_loss

optimizer.zero_grad()
loss.backward()
optimizer.step()
  • L2 正则化
optimizer = torch.optim.SGD(model.parameters(),lr=0.01,weight_decay=0.001)
  • Dropout实现
torch.manual_seed(1)    # Sets the seed for generating random numbers.reproducible

N_SAMPLES = 20
N_HIDDEN = 300

# training data
x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1)
print('x.size()',x.size())

# torch.normal(mean, std, out=None) → Tensor
y = x + 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1))

# test data
test_x = torch.unsqueeze(torch.linspace(-1, 1, N_SAMPLES), 1)
test_y = test_x + 0.3*torch.normal(torch.zeros(N_SAMPLES, 1), torch.ones(N_SAMPLES, 1))

# show data
plt.scatter(x.data.numpy(), y.data.numpy(), c='magenta', s=50, alpha=0.5, label='train')
plt.scatter(test_x.data.numpy(), test_y.data.numpy(), c='cyan', s=50, alpha=0.5, label='test')
plt.legend(loc='upper left')
plt.ylim((-2.5, 2.5))
plt.show()
x.size() torch.Size([20, 1])

Alt text

net_overfitting = torch.nn.Sequential(
    torch.nn.Linear(1,N_HIDDEN),
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN,N_HIDDEN),
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN,1),
)

net_dropped = torch.nn.Sequential(
    torch.nn.Linear(1,N_HIDDEN),
    torch.nn.Dropout(0.5), # 0.5的概率失活
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN,N_HIDDEN),
    torch.nn.Dropout(0.5),
    torch.nn.ReLU(),
    torch.nn.Linear(N_HIDDEN,1),
)

Alt text
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

Numpy实现DropOUT

"""
inverted dropout(反向随机失活): 推荐实现方式.
在训练的时候drop和调整数值范围,测试时不用任何改变.
"""
p = 0.5 # 激活神经元的概率. p值更高 = 随机失活更弱

def train_step(X):
    # 3层neural network的前向传播
    H1 = np.maximum(0, np.dot(W1, X) + b1)
    U1 = (np.random.rand(*H1.shape) < p) / p # 第一个dropout mask. 注意/p!
    H1 *= U1 # drop!
    H2 = np.maximum(0, np.dot(W2, H1) + b2)
    U2 = (np.random.rand(*H2.shape) < p) / p # 第二个dropout mask. 注意/p!
    H2 *= U2 # drop!
    out = np.dot(W3, H2) + b3
    # 反向传播:计算梯度... (略)
    # 进行参数更新... (略)

def predict(X):
# 前向传播时模型集成
H1 = np.maximum(0, np.dot(W1, X) + b1) # 不用数值范围调整了
H2 = np.maximum(0, np.dot(W2, H1) + b2)
out = np.dot(W3, H2) + b3

您可能感兴趣的与本文相关的镜像

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

PyTorch 是一个开源的 Python 机器学习库,基于 Torch 库,底层由 C++ 实现,应用于人工智能领域,如计算机视觉和自然语言处理

基于径向基函数神经网络RBFNN的自适应滑模控制学习(Matlab代码实现)内容概要:本文介绍了基于径向基函数神经网络(RBFNN)的自适应滑模控制方法,并提供了相应的Matlab代码实现。该方法结合了RBF神经网络的非线性逼近能力和滑模控制的强鲁棒性,用于解决复杂系统的控制问题,尤其适用于存在不确定性和外部干扰的动态系统。文中详细阐述了控制算法的设计思路、RBFNN的结构与权重更新机制、滑模面的构建以及自适应律的推导过程,并通过Matlab仿真验证了所提方法的有效性和稳定性。此外,文档还列举了大量相关的科研方向和技术应用,涵盖智能优化算法、机器学习、电力系统、路径规划等多个领域,展示了该技术的广泛应用前景。; 适合人群:具备一定自动控制理论基础和Matlab编程能力的研究生、科研人员及工程技术人员,特别是从事智能控制、非线性系统控制及相关领域的研究人员; 使用场景及目标:①学习和掌握RBF神经网络与滑模控制相结合的自适应控制策略设计方法;②应用于电机控制、机器人轨迹跟踪、电力电子系统等存在模型不确定性或外界扰动的实际控制系统中,提升控制精度与鲁棒性; 阅读建议:建议读者结合提供的Matlab代码进行仿真实践,深入理解算法实现细节,同时可参考文中提及的相关技术方向拓展研究思路,注重理论分析与仿真验证相结合。
要解决 `denoising_diffusion_pytorch` 中 `ModuleNotFoundError: No module named 'denoising_diffusion_pytorch.attend'; 'denoising_diffusion_pytorch' is not a package` 错误,可以尝试以下几种方法: ### 1. 确认 `denoising_diffusion_pytorch` 已正确安装 首先要保证已经安装了 `denoising_diffusion_pytorch` 库。可以使用以下命令进行安装或更新: ```bash pip install denoising-diffusion-pytorch --upgrade ``` ### 2. 检查 Python 环境 要确保当前使用的 Python 环境是安装了 `denoising_diffusion_pytorch` 的环境。可以使用以下命令查看已安装的包: ```bash pip list | grep denoising-diffusion-pytorch ``` ### 3. 检查包路径 确认 `denoising_diffusion_pytorch` 所在的路径已经包含在 Python 的 `sys.path` 中。可以在 Python 脚本中添加以下代码进行检查: ```python import sys print(sys.path) ``` 如果 `denoising_diffusion_pytorch` 所在的路径不在 `sys.path` 中,可以在代码开头添加以下代码来添加路径: ```python import sys sys.path.append('/path/to/denoising_diffusion_pytorch') ``` 这里的 `/path/to/denoising_diffusion_pytorch` 需要替换为实际的路径。 ### 4. 检查包结构 确认 `denoising_diffusion_pytorch` 包包含 `attend` 模块。可以查看 `denoising_diffusion_pytorch` 安装目录下是否有 `attend.py` 文件或者 `attend` 文件夹。 ### 5. 重新安装依赖 有时候依赖包损坏也会导致此类错误,可以尝试卸载并重新安装 `denoising_diffusion_pytorch`: ```bash pip uninstall denoising-diffusion-pytorch pip install denoising-diffusion-pytorch ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值