(转)softmax求导写的最清晰最清楚的版本

博客提供了softmax求导最清晰版本的内容链接,softmax求导在信息技术领域的机器学习等方面有重要应用,能帮助理解相关算法原理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Jupyter Notebook是一个非常流行的交互式计算环境,特别适合用于编、测试和展示PyTorch代码。它允许你在浏览器中创建和共享包含实时代码、方程、可视化结果以及叙述性文本的文档。 在Jupyter Notebook 中使用 PyTorch 编深度学习模型通常包括以下几个步骤: ### 1. 安装必要的库 如果你还没有安装 PyTorch 或者其他依赖项,在启动 Jupyter Notebook之前可以先通过命令行工具如pip或conda来进行安装: ```bash # 使用 pip 安装 pytorch 和 torchvision (GPU 版本) pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu117 # 如果你需要 CPU版本,则运行下面这条命令 pip install torch torchvision torchaudio ``` ### 2. 创建并打开一个新的Notebook文件 你可以选择 Python3 的内核来开始书Python代码了,并将这个新笔记本保存为你想要的名字比如 `pytorch_demo.ipynb`. ### 3. 导入所需的模块 接下来可以在第一个单元格里导入所有需要使用的包: ```python import torch from torch import nn, optim import torchvision.transforms as transforms from torchvision.datasets import MNIST from torch.utils.data import DataLoader ``` 以上代码段引入了一些常用的组件——例如 `nn.Module`, 这是用来构建神经网络的基本类;还有优化器 Optimizer ,帮助我们更新权重等等... ### 4. 加载数据集 以MNIST手字母为例加载训练集与验证集: ```python transform = transforms.Compose([transforms.ToTensor(), transforms.Normalize((0.5,), (0.5,))]) trainset = MNIST(root='./data', train=True, download=True, transform=transform) testset = MNIST(root='./data', train=False, download=True, transform=transform) trainloader = DataLoader(trainset, batch_size=64, shuffle=True,num_workers=2,pin_memory=True) testloader = DataLoader(testset,batch_size=64, shuffle=False,num_workers=2,pin_memory=True) ``` 这里定义了一个简单的预处理流程,然后分别获取到了本地存储的数据集合,并设置好批量大小和其他选项。 ### 5. 构建模型结构 我们可以轻松地利用 PyTorch 提供的各种层函数来自由组合出任意复杂的架构。 例如一个两层全连接前馈网络可以用几行简洁清晰的 python 语法表达出来: ```python class Net(nn.Module): def __init__(self): super(Net,self).__init__() self.fc1 = nn.Linear(784 , 512) # 输入维度 -> 隐藏层节点数 self.fc2 = nn.Linear(512,10 ) # 隐藏层输出到分类数目 def forward(self,x): x=x.view(-1,784 ) x=self.fc1(x).relu() output=self.fc2(x).log_softmax(dim=-1 ) return output net = Net().cuda() if torch.cuda.is_available else net.cpu() print(net) ``` 在这个例子里面构造了一种比较基础但是常见的线性变换序列作为我们的预测机制。当然实际项目当中往往还需要加入BN层激活函数Dropout等操作进一步提升泛化能力。 ### 6. 模型训练过程 后就是循环迭代整个样本空间并且不断调整参数使得损失值小化的过程啦~ 为了简化说明只给出核心部分伪码示意一下: ```python criterion = nn.NLLLoss() optimizer = optim.AdamW(params=net.parameters(), lr=0.001, weight_decay=0.01 ) for epoch in range(EPOCHS): running_loss=0. for i,(inputs,labels) in enumerate(train_loader): optimizer.zero_grad() outputs=net(inputs.to(device)) loss=criterion(outputs.to(device), labels.to(device)) loss.backward() optimizer.step() running_loss +=loss.item()*inputs.size()[0] print(f"Epoch {epoch+1}/{EPOCHS}, Loss:{running_loss/(i+1)}") ``` 上述代码展示了如何在一个完整的训练周期中对指定轮次(epochs)内的每个批次(batch size)进行正向传播(forward pass),反向求导(back propagation),以及梯度下降(update weights). 这只是冰山一角而已哦~ 更多高级技巧诸如分布式训练,混合精度加速等内容都可以继续深入探索!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值