pytorch学习笔记(1)

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

前言

pytorch是一个深度学习的框架,里面主要集成了深度学习的常用的函数,主要的数据结构为tensor(张量)。张量和矩阵不一样,矩阵都是二维的,张量可以表示任意维度,0维度就是一个标量。

  • 0阶张量:标量(单个数字,如 3.14

  • 1阶张量:向量(一维数组,如 [1, 2, 3]

  • 2阶张量:矩阵(二维数组,如 [[1, 2], [3, 4]]

  • 更高阶:三维及以上数组(如RGB图像是3阶张量,形状为 [高度, 宽度, 通道]

示例

1、 新建工程,创建虚拟环境(pytorch),选择python解释器。

如果新建工程时,忘记建立环境,选择 文件-设置-项目名-添加解释器

2 、工程名右键新建-python文件,新建一个py文件

import torch
# 创建一个张量
x = torch.tensor([1.0, 2.0, 3.0])
y = torch.tensor([4.0, 5.0, 6.0])
# 张量加法
z = x + y
print(z)

3 、环境中没有torch,安装pytorch

在pycharm左下角,点击终端按钮,打开终端,先conda进入新建得虚拟环境,然后输入

(pytorch) PS F:\pytorch> pip install torch torchvision torchaudio

等待下载完成后,上面的torch就可以导入了。

4 、走一个简单的神经网络示例(从网上下载的)

import torch
import torch.nn as nn
import torch.optim as optim
import matplotlib.pyplot as plt
​
import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'
​
# 1. 生成模拟数据
torch.manual_seed(42)  # 固定随机种子(确保可重复性)
# 创建两类数据点(二维特征)
num_samples = 100
X = torch.randn(num_samples, 2)  # 100个样本,每个样本2个特征 ,x为100个1阶张量,100个一维数组,每个数组两个成员
y = (X[:, 0] + X[:, 1] > 0).float()  # 简单线性边界划分两类(0或1),必须转float,这个是作为结果和神经网络的输出做比较求                                      损失函数,要求必须是float
​
plt.scatter(X[:, 0], X[:, 1], c=y, cmap='bwr') #散点图查看x分布
plt.show()
​
# 2. 定义神经网络模型
class SimpleNN(nn.Module):
    def __init__(self):
        super(SimpleNN, self).__init__()
        self.fc1 = nn.Linear(2, 4)  # 输入层(2维)→ 隐藏层(4维),输入层的2 必须和特征数对应,
        self.fc2 = nn.Linear(4, 1)  # 隐藏层 → 输出层(1维,二分类)
        self.sigmoid = nn.Sigmoid()  # 输出层激活函数(将值映射到0~1)
​
    def forward(self, x):
        x = torch.relu(self.fc1(x))  # 隐藏层用ReLU激活
        x = self.sigmoid(self.fc2(x))
        return x
​
​
model = SimpleNN()
​
# 3. 定义损失函数和优化器
criterion = nn.BCELoss()  # 二分类交叉熵损失
optimizer = optim.SGD(model.parameters(), lr=0.1)  # 优化器:随机梯度下降
​
# 4. 训练模型
epochs = 500
losses = []
​
for epoch in range(epochs):
    # 前向传播
    outputs = model(X)
    loss = criterion(outputs.squeeze(), y)  # 计算损失
​
    # 反向传播和优化
    optimizer.zero_grad()  # 清空梯度
    loss.backward()  # 反向传播
    optimizer.step()  # 更新权重
​
    losses.append(loss.item())
    if (epoch + 1) % 50 == 0:
        print(f'Epoch [{epoch + 1}/{epochs}], Loss: {loss.item():.4f}')
​
# 5. 可视化训练过程
plt.plot(losses)
plt.xlabel('Epoch')
plt.ylabel('Loss')
plt.title('Training Loss')
plt.show()
​
# 6. 测试模型
with torch.no_grad():  # 关闭梯度计算(测试阶段)
    test_data = torch.tensor([[0.5, 0.1], [-0.1, -0.5]])  # 两个测试点
    predictions = model(test_data)
    print(f"Predictions: {predictions.squeeze().numpy()}")  # 输出概率值

torch函数

1、randn :num_samples行2列的张量。常用:行数为样本数,列数为特征数,0-1之间,符合正太分布,均值为0

num_samples = 100
X = torch.randn(num_samples, 2)  # 100个样本,每个样本2个特征

运行中错误

OMP: Error #15: Initializing libiomp5md.dll, but found libiomp5md.dll already initialized.

在代码开头添加以下环境变量设置,强制使用单个 OpenMP 实例:

python

import os
os.environ['KMP_DUPLICATE_LIB_OK'] = 'True'  # 允许重复加载 OpenMP 库

神经网络基础知识

1、损失函数

样本的预测目标为yp,真实目标为y。那么,定义一个值loss,计算公式如下。

损失函数 loss = (yp - y)2

通过研究发现,在参数数量一样的情况下,更深的网络往往具有比浅层的网络更好的识别效率。

2、Sigmoid 函数(S型函数)是一类具有 S形曲线 的数学函数,常用于将实数映射到 (0,1) 区间,在机器学习、神经网络和逻辑回归中广泛应用。

 在单层神经网络时,我们使用的激活函数是sgn函数。到了两层神经网络时,我们使用的最多的是sigmoid函数。而到了多层神经网络时,通过一系列的研究发现,ReLU函数在训练多层神经网络时,更容易收敛,并且预测性能更好。因此,目前在深度学习中,最流行的非线性函数是ReLU函数。

3、回归预测“多少”,分类判断“是否” —— 连续值是回归的战场,离散类别是分类的舞台!

img

4、sklearn库

scikit-learn(简称 sklearn)是 Python 中最流行、最强大的机器学习库之一,主要用于传统机器学习(非深度学习)任务。它提供了丰富的工具,涵盖数据预处理、特征工程、模型训练、评估和模型选择等整个机器学习流程。

sklearn 与深度学习框架的区别

特性scikit-learn (sklearn)PyTorch/TensorFlow
主要领域传统机器学习(浅层模型)深度学习(神经网络)
GPU 支持不支持支持
自动求导不支持支持(如 autograd
适用场景小规模结构化数据大规模非结构化数据(图像、文本等)

何时选择 sklearn?

  1. 数据是结构化表格(如 CSV)。

  2. 需要快速实现经典算法(如随机森林、SVM)。

  3. 数据量适中(内存可加载)。

  4. 不需要深度学习(如 CNN、RNN)。

如果任务涉及图像、文本、时序数据或需要 GPU 加速,建议转向 PyTorch/TensorFlow

安装命令 :pip install scikit-learn

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

PyTorch 2.5

PyTorch 2.5

PyTorch
Cuda

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

### PyTorch 学习笔记概述 李毅编写的《PyTorch学习笔记》是一份详尽的学习指南,旨在帮助读者掌握深度学习框架PyTorch的核心概念和技术。这份笔记不仅涵盖了基础理论知识,还提供了大量实践案例和代码实现。 #### 主要内容结构 1. **环境搭建** 安装配置PyTorch运行所需的软件环境,包括Python版本的选择、CUDA支持以及Anaconda的使用方法[^2]。 2. **张量操作** 解释了如何创建、转换和处理多维数组(即张量),这是构建神经网络模型的基础构件之一[^3]. 3. **自动求导机制** 描述了Autograd模块的工作原理及其在反向传播算法中的应用,使用户能够轻松定义复杂的计算图并高效训练模型[^4]. 4. **优化器与损失函数** 探讨了几种常用的梯度下降变体(SGD, Adam等)及相应的损失衡量标准(MSE Loss, CrossEntropyLoss等),这些组件对于调整权重参数至关重要[^5]. 5. **数据加载与预处理** 展示了Dataset类和DataLoader类的功能特性,它们可以简化大规模图像分类任务的数据读取流程;同时也介绍了常见的图片增强技术来扩充样本集规模[^6]. 6. **卷积神经网络(CNN)** 结合具体实例深入剖析CNN架构设计思路,如LeNet,VGG,resnet系列,并给出完整的项目源码供参考学习[^7]. 7. **循环神经网络(RNN/LSTM/GRU)** 阐述时间序列预测场景下RNN家族成员的特点优势,通过手写字符识别实验验证其有效性[^8]. 8. **迁移学习实战演练** 利用预训练好的大型模型作为特征提取器,在新领域内快速建立高性能的应用程序,减少重复劳动成本的同时提高了泛化能力[^9]. 9. **分布式训练入门指导** 当面对超大数据集时,单机难以满足需求,此时可借助于torch.distributed包来进行集群式的协同工作模式探索[^10]. ```python import torch from torchvision import datasets, transforms transform = transforms.Compose([transforms.ToTensor()]) train_dataset = datasets.MNIST(root='./data', train=True, download=True, transform=transform) train_loader = torch.utils.data.DataLoader(dataset=train_dataset, batch_size=64, shuffle=True) for images, labels in train_loader: print(images.shape) break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值