09softmax回归简洁实现(pycharm版)

解决代码在pycharm上无法显示动图的办法:
在d2l.torch中的Class Animator类中的add函数的倒数第二行加上一句plt.draw();plt.pause(0.001)就可以了。jupyter是每次会自动调用图像显示函数的,所以源码里面没有但是在jupyter中可以显示

import torch
from torch import nn
from d2l import torch as d2l
import os
os.environ["KMP_DUPLICATE_LIB_OK"]="TRUE"

batch_size = 256  # 批量大小
train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size)
# softmax回归的输出层是一个全连接层,在Sequential中添加一个带有十个输出的全连接层
net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))
"""
 在PyTorch框架中,`nn.Sequential()` 是一个顺序容器,
 它可以将多个模块按照顺序包装起来,使得它们可以像单个模块一样被顺序调用。
 `net = nn.Sequential(nn.Flatten(), nn.Linear(784, 10))` 创建了一个顺序容器,其中包含了两个模块:
1. `nn.Flatten()`:这是一个用于将多维输入展平为一维的模块。
在深度学习中,通常在卷积神经网络之后使用,以确保全连接层(如 `nn.Linear`)接收到的输入是平坦的。
2. `nn.Linear(784, 10)`:这是一个全连接层,它将784个输入节点映射到10个输出节点。
这里的数字784和10分别代表输入维度和输出维度的规模。
因此,整个 `nn.Sequential` 模块的创建可以被看作是定义了一个简单的神经网络,
该网络包含一个用于展平输入的 `nn.Flatten` 模块,
以及一个将展平后的输入映射到10个类别的 `nn.Linear` 模块,这通常用于分类问题。
"""


def init_weights(m):
    if type(m) == nn.Linear:
        nn.init.normal_(m.weight, std=0.01)
net.apply(init_weights)
"""
 在PyTorch中,`init_weights` 是一个函数,用于初始化神经网络中的权重。
 这个函数接收一个参数 `m`,表示需要初始化的模块。
在 `init_weights` 函数中,首先检查 `m` 的类型是否为 `nn.Linear`,
这是全连接层的一个实例。如果 `m` 的类型是 `nn.Linear`,那么执行以下操作:
`nn.init.normal_(m.weight, std=0.01)`:
这是一个用于初始化 `nn.Linear` 模块权重的函数。
`nn.init.normal_` 函数接收两个参数:`m.weight` 和 `std=0.01`。
- `m.weight`:表示需要初始化的权重。
- `std=0.01`:表示初始化权重的标准差。这个值通常在0到1之间,用于控制初始化权重的随机性。

通过上述操作,`init_weights` 函数将神经网络中的所有 `nn.Linear` 模块的权重初始化为具有指定标准差的随机值。
在 `net.apply(init_weights)` 这行代码中,我们对网络 `net` 应用了 `init_weights` 函数,
这意味着初始化网络中的所有 `nn.Linear` 模块的权重。
这通常在创建神经网络后执行,以确保网络在训练之前具有合适的初始权重。
"""

loss = nn.CrossEntropyLoss(reduction='none')
# 定义损失函数,是CrossEntropyLoss的一个实例
# 参数=none表示在计算损失时不进行自动求和操作,而是保留每一步损失值
# 这在验证集上非常有用,可以提供每个类别的损失值,而不是整个批次的总损失
trainer = torch.optim.SGD(net.parameters(),lr=0.1)

num_epochs =10
d2l.train_ch3(net,train_iter,test_iter,loss,num_epochs,trainer)
d2l.plt.show()

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值