深度学习与强化学习的学习笔记

一、PyTorch 

 1.torch.tensor

PyTorch中,torch.Tensor是存储和变换数据的主要工具。
Tensor与Numpy的多维数组非常相似。
Tensor还提供了GPU计算和自动求梯度等更多功能,这些使Tensor更适合深度学习。

2.创建Tensor

2.1 直接创建一个2*4的未初始化的Tensor:

x = torch.empty(2,4)

2.2 其余tensor的构造函数

Tensor(*sizes)    基础构造函数
ones(*sizes)      全1Tensor
zeros(*sizes)     全0Tensor
eye(*sizes)	  对角线为1,其他为0
arange(s,e,step)  从s到e,步长为step
linespace(s,e,steps)  从s到e,均匀切分成steps份
normal(mean,std)/uniform(from,to)  正态分布/均匀分布
randperm(m)	随机排列

2.3 Tensor的索引操作:

我们还可以使用类似Numpy的索引操作来访问Tensor的一部分。需要注意的是:索引出来的结果与原数据共享内存,也即修改一个,另一个也会跟着修改。

2.4 torch.squeeze() 和torch.unsqueeze()——对数据的维度进行压缩或者解压

torch.unsqueeze(input, dim)——在tensor的某个维度上添加一个维数为1的维度

这个函数主要对数据的维度进行压缩,去掉维数为1的的维度。比如:是一行或者一列这种,一个一行三列(1,3)的数去掉第一个维数为一的维度之后就变成(3)行。b=torch.squeeze(a,N) 就是将a中所有为1的维度删掉,不为1的维度没有影响。

2.5 Transpose-交换两个特定的维度

2.6 Cat-连接多重张量 

2.7 Broadcasting semantics -当对两个形状不同的Tensor按元素运算时,可能会触发广播机制(broadcasting)机制:先适当复制元素使这两个Tensor形状相同后再按元素运算。

3.Computational graph

 4.automatic differentiation(torch.autograd)

```python
import torch  # 导入PyTorch库
import numpy as np  # 导入NumPy库,命名为np
import matplotlib.pyplot as plt  # 导入matplotlib库中的pyplot模块用于数据可视化

# 定义真实的线性关系参数和添加的噪声
a_ref = -1.5
b_ref = 8
noise = 0.2 * np.random.randn(50)

# 生成x的50个数据点
x = np.linspace(1, 4, 50)

# 创建带有真实线性关系和噪声的y值
y = a_ref * x + b_ref + noise

# 定义均方误差(MSE)损失函数
def MSE_loss(prediction, target):
    return (prediction - target).pow(2).mean()

# 转换数据为PyTorch张量
xx = torch.tensor(x, dtype=torch.float32)
yy = torch.tensor(y, dtype=torch.float32)
a = torch.tensor(0, requires_grad=True, dtype=torch.float32)  # 初始化a为可训练参数
b = torch.tensor(5, requires_grad=True, dtype=torch.float32)  # 初始化b为可训练参数

number_of_epochs = 1000  # 训练迭代次数
learning_rate = 0.01  # 学习率

# 进行迭代训练
for iteration in range(number_of_epochs):
    y_pred = a * xx + b  # 模型预测
    loss = MSE_loss(y_pred, yy)  # 计算损失
    loss.backward()  # 反向传播计算梯度
    with torch.no_grad():
        a = a - learning_rate * a.grad  # 更新参数a
        b = b - learning_rate * b.grad  # 更新参数b
    a.requires_grad = True  # 设置a参数需要梯度计算
    b.requires_grad = True  # 设置b参数需要梯度计算

print(a)  # 打印训练后的a参数
print(b)  # 打印训练后的b参数

a1 = a.detach().cpu().numpy()  # 转换a参数为NumPy数组
b1 = b.detach().cpu().numpy()  # 转换b参数为NumPy数组

x_est = x  # 设置估计的x值
y_est = a1 * x_est + b1  # 使用训练得到的参数估计y值
plt.scatter(x, y, s=10)  # 绘制原始数据点
plt.plot(x_est, y_est, 'r')  # 绘制估计的线性回归线
plt.show()  # 显示图形
```

5.Data loading and preprocessing(torch.utils) 

 

  1. Dataset:

    • Dataset类用于表示数据集,其中包含训练数据的样本和对应的标签。您可以根据自己的数据格式创建自定义的Dataset,也可以使用PyTorch提供的内置Dataset(如TensorDataset、ImageFolder等)。
    • 您需要编写自定义的Dataset类来加载数据,并实现__len____getitem__方法,其中__len__返回数据集的大小,__getitem__根据索引返回样本和标签。
  2. DataLoader:

    • DataLoader类用于批量加载数据,它允许您指定批量大小、是否打乱数据等参数。DataLoader接收一个Dataset实例作为输入,按批次提供数据,使训练过程更加有效。
    • 使用DataLoader可以方便地对数据进行迭代,同时在训练过程中自动进行数据批处理、打乱数据和多进程加载等操作。

 

数据增强(Data augmentation)指的是在训练模型之前对原始数据进行变换、扭曲或改变,以生成更多样本、扩大数据集规模,从而提高模型的泛化能力。数据增强是在深度学习任务中非常常见的技术,特别是在计算机视觉领域,可以有效地帮助模型处理各种变体和噪声,减少过拟合,提高模型的鲁棒性。

常见的数据增强操作包括但不限于:

  • 随机裁剪(Random cropping)
  • 随机旋转(Random rotation)
  • 随机翻转(Random flipping)
  • 随机缩放(Random scaling)
  • 色彩变换(Color jittering)
  • 噪声添加(Noise injection)
  • 平移(Translation)
  • 旋转、缩放、剪切(Affine transformation)

 

 

 

6.Regression

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值