Pytorch 4.6 练手

本文介绍了一个使用PyTorch实现线性回归的具体案例。通过继承nn.Module自定义了一个全连接层,并演示了如何创建模型实例、输入数据并得到输出结果。此外,还展示了模型参数的具体形式。

一个实现线性回归的pytorch 代码,由于之前已经安装好,此处不在赘述具体过程。

'''
继承nn.Module实现全连接层
'''
import torch as t
from torch import  nn

class Linear(nn.Module):
    def __init__(self, in_features, out_features):
        #在构造函数中定义自己的需要更新的参数,封装成 parameter
        #Parameter是默认 requires_grad = True
        super(Linear, self).__init__() #等价于 nn.Module.__init__(self)
        self.w = nn.Parameter(t.randn(in_features, out_features))
        self.b = nn.Parameter(t.randn(out_features))

    def forward(self, x):
        output = x.mm(self.w) + self.b
        return output

#main
if __name__ == "__main__":
    layer =Linear(4,3)
    X = t.randn(2,4)
    print(X)
    output = layer(X)
    print(output)
    for name, parameter in layer.named_parameters():
        print(name,parameter)

 

### 关于《动手学习深度学习》第4章线性分类练习题的解答资源 对于《动手学习深度学习》一书中的第4章——线性分类部分,其重点在于通过逻辑回归实现二元分类以及多类别的Softmax回归。这些方法构成了监督学习的基础理论之一。书中提供了详细的推导过程和代码实践案例[^1]。 如果希望找到针对该章节的具体练习题解答或者相关资料,可以参考如下几种途径: #### 官方文档与社区贡献 官方GitHub仓库通常会提供每章对应的Jupyter Notebook文件,其中不仅包含了正文内容的代码演示,还可能附带一些额外的扩展实验或练习解答提示。可以通过访问本书配套的PyTorch版本官方存储库来查找相关内容[^2]: ```plaintext https://github.com/pytorch/tutorials/tree/main/beginner_source/d2l ``` #### 实践代码示例 以下是基于第四章中提到的核心概念的一个简单实现例子,展示如何构建并训练一个用于手写数字识别(MNIST数据集)上的softmax回归模型: ```python import torch from torch import nn from d2l import torch as d2l batch_size = 256 train_iter, test_iter = d2l.load_data_fashion_mnist(batch_size) # 初始化模型参数 num_inputs = 784 num_outputs = 10 W = torch.normal(0, 0.01, (num_inputs, num_outputs), requires_grad=True) b = torch.zeros(num_outputs, requires_grad=True) # 定义softmax函数 def softmax(X): X_exp = torch.exp(X) partition = X_exp.sum(1, keepdim=True) return X_exp / partition # 定义模型 def net(X): return softmax(torch.matmul(X.reshape((-1, W.shape[0])), W) + b) # 使用交叉熵损失作为代价函数 loss = nn.CrossEntropyLoss() # 训练模型 num_epochs, lr = 10, 0.1 updater = torch.optim.SGD([W, b], lr=lr) d2l.train_ch3(net, train_iter, test_iter, loss, num_epochs, updater) ``` 此代码片段展示了完整的从加载数据到定义网络结构再到优化器配置的过程,并最终完成整个训练流程[^3]。 #### 注意事项 需要注意的是,在实际解决问题过程中可能会遇到各种挑战比如过拟合现象等,这往往需要调整正则化项强度或是引入dropout层等方式加以缓解;另外当面对更复杂的任务时单纯依靠线性边界划分难以取得良好效果,则需考虑非线性的激活机制如ReLU等等进一步提升表达能力。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值