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
### 回答1: 对于初学者来说,anaconda是科学计算的一套工具集,其中的conda是一个包管理器,能够轻松地安装、更新和卸载众多的Python软件包。 安装d2lzh_pytorch前,需要先安装anaconda和pytorch。关于pytorch的安装,请参考pytorch官方文档进行安装。 接下来,我们来具体讲解如何在anaconda中安装d2lzh_pytorch: 1. 打开anaconda prompt,进入conda环境 2. 输入以下指令,创建新环境并安装ipykernel: conda create -n d2lzh_pytorch conda activate d2lzh_pytorch conda install ipykernel 3. 在新环境中安装d2lzh_pytorch: pip install d2lzh_pytorch 4. 在jupyter notebook中,将内核设置为创建的新环境: python -m ipykernel install --user --name d2lzh_pytorch --display-name "Python (d2lzh_pytorch)" 5. 打开jupyter notebook,输入以下代码进行测试: import torch import d2lzh_pytorch from d2lzh_pytorch import * x = torch.ones(3, 4) print(x) 如果成功打印出tensor([[1., 1., 1., 1.], [1., 1., 1., 1.], [1., 1., 1., 1.]]),则表明d2lzh_pytorch已经成功安装。 值得注意的是,此方法安装的是d2lzh_pytorch的CPU版本。如果需要使用GPU版本,请在安装pytorch时安装相应的GPU版本,并在安装d2lzh_pytorch时加上gpu的标记: pip install d2lzh_pytorch-gpu 至此,d2lzh_pytorch的安装就全部完成了。 ### 回答2: anaconda是一款Python的包管理工具,可以帮助用户方便地安装和管理Python的各种包和环境。而d2lzh_pytorch是一本深度学习的教程,其中使用了PyTorch框架。在anaconda中安装d2lzh_pytorch需要经过以下步骤: 1. 安装anaconda 如果还没有安装anaconda,可以先从官网下载安装包进行安装。安装后可以在命令行窗口中输入conda --version来确认是否安装成功。 2. 创建conda环境 可以考虑创建一个专门用于d2lzh_pytorch的conda环境,可以避免包之间的依赖关系混乱。可以在命令行窗口中输入以下命令来创建: ```conda create -n d2lzh_pytorch python=3.6``` 其中d2lzh_pytorch是环境的名字,python=3.6指定了Python的版本。 3. 激活conda环境 创建好环境后,需要激活该环境才能进行后续操作。可以在命令行窗口中输入以下命令来激活环境: ```conda activate d2lzh_pytorch``` 其中d2lzh_pytorch是刚才创建的环境名字。 4. 安装PyTorch 在激活conda环境后,就可以安装PyTorch了。可以在命令行窗口中输入以下命令来安装: ```conda install pytorch torchvision torchaudio cpuonly -c pytorch``` 其中cpuonly表示只安装CPU版本,如果需要安装GPU版,可以去PyTorch官网查看对应的安装命令。 5. 安装d2lzh_pytorch 在安装好PyTorch后,就可以安装d2lzh_pytorch了。可以在命令行窗口中输入以下命令来安装: ```pip install d2lzh_pytorch``` 6. 验证安装结果 安装完成后,可以尝试导入d2lzh_pytorch模块,看能否成功。可以在Python交互界面或者jupyter notebook中输入以下代码进行测试: ``` import d2lzh_pytorch as d2l d2l.set_figsize() ``` 如果代码能够成功运行,说明安装成功。 ### 回答3: anaconda是一个非常流行的Python包管理器和环境管理器,它允许用户轻松地安装、配置和管理Python开发所需的各种包和库。d2lzh_pytorch是一种基于PyTorch框架的深度学习教程和代码库,可以帮助用户快速入门深度学习领域。 要安装d2lzh_pytorch,首先需要在本地机器上安装Anaconda环境。可以访问Anaconda官方网站并按照其指示进行安装。一旦安装完成,就可以打开Anaconda Prompt或Anaconda Navigator并在命令行中输入以下命令来安装d2lzh_pytorch: ``` conda install pytorch torchvision matplotlib pip install d2lzh_pytorch ``` 这两个命令将分别安装PyTorch、Matplotlib以及d2lzh_pytorch。在安装后,可以打开Python编辑器并导入d2lzh_pytorch来编写深度学习代码和应用。 需要注意的是,由于安装d2lzh_pytorch时需要下载一些大型依赖项,因此可能需要耗费一些时间和带宽。请确保网络连接稳定,并耐心等待安装完成。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值