当前位置: 首页 > news >正文

小白入门pytorch(一)

  • 本文为小白入门Pytorch中的学习记录博客

小白入门pytorch 基础知识

导入torch,查看torch版本

import torch
print(torch.__version__)

输出结果:

1.12.1+cu113

张量

在pytorch中,张量(tensor)是最基本的数据结构。

  • 零维张量—》标量,维度为0,一个单独的值,只有大小,没有方向
  • 一维张量—》向量,维度为1
  • 二维张量—》矩阵,维度为2
  • 三维张量—》三维数组,维度为3
零维张量
tensor = torch.tensor(10)
print("tensor的形状", tensor.shape)
print("tensor的值", tensor)

输出结果:

tensor的形状 torch.Size([])
tensor的值 tensor(10)
一维张量
tensor = torch.tensor([1, 2, 3, 4, 5])
print("tensor的形状", tensor.shape)
print("tensor的值", tensor)

输出结果:

tensor的形状 torch.Size([5])
tensor的值 tensor([1, 2, 3, 4, 5])
二维张量
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]])
print("tensor的形状", tensor.shape)
print( tensor)

输出结果:

tensor的形状 torch.Size([2, 3])
tensor([[1, 2, 3],[4, 5, 6]])

torch.Size([2, 3])中的[2, 3]是代表2行,3列

三维张量
tensor = torch.tensor([[[1, 2],[3, 4]], [[5, 6],[7, 8]]])
print(tensor.shape)
print(tensor)

输出结果:

torch.Size([2, 2, 2])
tensor([[[1, 2],[3, 4]],[[5, 6],[7, 8]]])

torch.Size([2, 2, 2]):包含两个二维矩阵,每个二维矩阵的形状是2行2列

张量的操作

创建张量
列表创建
tensor = torch.tensor([1, 2])
tensor

输入结果:

tensor([1, 2])
元组创建
tensor = torch.tensor((1, 2))
tensor

输出结果:

tensor([1, 2])
通过Numpy创建
import numpy as np
data = np.array([1, 2])
tensor = torch.tensor(data)
tensor

输出结果:

tensor([1, 2], dtype=torch.int32)
创建一个具有特定数据类型的张量
tensor = torch.tensor([1, 2, 3], dtype=torch.float32)
print(tensor)
print(tensor.dtype)

输出结果:

tensor([1., 2., 3.])
torch.float32
创建全零向量
zeros_tensor = torch.zeros([2, 3]) # 创建一个2行3列的全零张量
print(zeros_tensor.shape)
zeros_tensor

输出结果:

torch.Size([2, 3])
tensor([[0., 0., 0.],[0., 0., 0.]])

torch.zeros()全零张量的函数

全1张量
ones_tensor = torch.ones((2, 3)) # 创建一个2行3列的全1张量
print(ones_tensor.shape)
ones_tensor

输出结果:

torch.Size([2, 3])
tensor([[1., 1., 1.],[1., 1., 1.]])

torch.ones()全1张量的函数

随机张量
rand_tensor = torch.rand((2, 3)) # 创建一个2行3列随机张量, torch.rand()函数将生成一个(0,1)范围内均匀分布的随机张量
print(rand_tensor.shape)
print(rand_tensor)

输出结果:

torch.Size([2, 3])
tensor([[0.4723, 0.6665, 0.7575],[0.8820, 0.1854, 0.1162]])
张量索引和切片
使用索引和切片操作来访问张量中的特定元素或子张量
tensor = torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
print(tensor)

输出结果:

tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
访问第一个元素
# 访问第一个元素
print(tensor[0, 0])
切片操作
# 切片操作
tensor[:, 1] # 逗号两边的数字,左边是控制行,右边是控制列

输出结果:

tensor([2, 5, 8])
# 取第一行和第三行的第一列和第三列的元素
tensor[::2, ::2]

输出结果:

tensor([[1, 3],[7, 9]])
张量GPU加速
# 创建一个形状为(2, 2)的张量
tensor = torch.tensor([[1, 2], [3, 4]])
tensor = tensor.to('cuda')  # 将张量转移到gpu上
tensor

输出结果:

tensor([[1, 2],[3, 4]], device='cuda:0')
张量转移到CPU上
tensor = tensor.to('cpu')
print(tensor)

输出结果:

tensor([[1, 2],[3, 4]])
张量运算
  • 可以对张量执行各种数学运算和操作,如加法、减法、乘法、除法、矩阵乘法等
# 创建两个张量
tensor1 = torch.tensor([1, 2, 3])
tensor2 = torch.tensor([3, 3, 3])
# 加法
result = tensor1 + tensor2
print("加法的结果", result)
# 减法
result = tensor1 - tensor2
print("减法的结果", result)
# 乘法
result = tensor1 * tensor2
print("乘法的结果", result)
# 除法
result = tensor1 / tensor2
print("除法的结果", result)
加法的结果 tensor([4, 5, 6])
减法的结果 tensor([-2, -1,  0])
乘法的结果 tensor([3, 6, 9])
除法的结果 tensor([0.3333, 0.6667, 1.0000])
  • 张量与标量相加,与标量相乘
# 张量与标量相加
tensor1 = torch.tensor([1, 2, 3])
temp_var = 1
result = tensor1 + temp_var
print("张量与标量相加结果", result)# 张量与标量相乘
tensor1 = torch.tensor([1, 2, 3])
temp_var = 2
result = tensor1 * temp_var
print("张量与标量相乘结果", result)

输出结果:

张量与标量相加结果 tensor([2, 3, 4])
张量与标量相乘结果 tensor([2, 4, 6])
张量的形状转换
tensor = torch.tensor([[1, 2, 3], [4, 5, 6]]) # 2行3列
print("原来的张量\n",tensor) 
tensor = tensor.reshape(3, 2) # 3行2列
print("变换后的张量\n", tensor)

输出结果:

原来的张量tensor([[1, 2, 3],[4, 5, 6]])
变换后的张量tensor([[1, 2],[3, 4],[5, 6]])
# 改变张量的形状(与reshape功能相同)
tensor = torch.tensor([[1, 2, 3],[4, 5, 6]]) # 2行3列
print("原来的张量\n", tensor)
tensor = tensor.view(3, 2) # 3行2列
print("变换后的向量\n", tensor)
原来的张量tensor([[1, 2, 3],[4, 5, 6]])
变换后的向量tensor([[1, 2],[3, 4],[5, 6]])
获取张量的数值
tensor = torch.randn(1) # 如果张量中仅有一个元素,可用item
print(tensor)
print(tensor.item())

输出结果:

tensor([-0.5515])
-0.5514923930168152
张量转化为数组
tensor = torch.tensor([[1, 2, 3],[4, 5, 6],[7, 8, 9]])
array = tensor.numpy() # 将张量转化为Numpy数组
print(array)

输出结果:

[[1 2 3][4 5 6][7 8 9]]
张量转化为列表
tensor = torch.tensor([[1, 2, 3],[4, 5, 6]])
# 将张量转化为列表
tensor_list = tensor.tolist()
tensor_list

输出结果:

[[1, 2, 3], [4, 5, 6]]

自动求导原理

  • 自动求导是一个关键的功能,它允许我们自动计算梯度,从而计算反向传播和优化
计算图
  • 计算图是一个有向无环图,它描述了计算过程中的操作和数据之间的依赖关系。在pytorch中,每个计算图由一系列的节点和边组成。节点表示操作(例如加法、乘法)或者数据,边表示数据的流动方向。计算图分为两个阶段:前向传播反向传播
  • 前向传播:在前向传播阶段,计算图从输入节点开始,按照节点之间的依赖关系依次进行计算,直到到达输出节点。在这个过程中,每个节点将计算并传递输出给下一个依赖节点
  • 反向传播:在反向传播阶段,计算图从输出节点开始,沿着边的反方向传播梯度。在这个过程中,每个节点根据链式法则将梯度传递给输入节点,以便计算它们的梯度
  • 通过构建计算图,Pytorch可以记录整个计算过程,并在需要时自动计算梯度。这使得我们可以轻松地进行方向传播,并在优化算法中使用梯度信息。
梯度
  • 梯度,它表示了函数在某一点的变化率。在Pytorch中,计算梯度是一项关键操作,它允许我们通过反向传播算法有效地更新模型参数。
  • 梯度是一个向量,其方向是指向函数值增长最快的方向,而其大小表示函数值的变化率。在深度学习中,我们通常希望最小化损失函数,因此梯度的反方向更新模型参数,以逐步降低损失值
  • Pytorch中的torch.tensor类是Pytorch的核心数据结构,同时也是计算梯度的关键。每个张量都有一个requires_grad,默认为False。如果我们希望计算某个张量的梯度,需要将requires_grad设置为True,那么就会开始追踪在该变量上的所有操作,而完成计算后,可以调用.backward()并自动计算所有的梯度,得到的梯度都保存在属性.grad中。
  • 调用.detach()方法分离出计算的历史,可以停止一个tensor变量继续追踪其历史信息,同时也防止未来的计算会被追踪。
  • 如果希望防止追踪历史(以及使用内存),可以将代码放在with torch.no_grad():内,这个做法在使用一个模型进行评估的时候非常有用,因为模型包含一些带有requires_grad=True的训练参数,但实际上并不需要它们的梯度信息
  • 对于autograd的实现,还有一个类也是非常重要的–Function
  • Tensor和Function两个类是有关联并建立了一个非循环的图,可以编码成一个完整的计算记录,每个Tensor变量都带有属性.grad_fn,该属性引用了创建了这个变量的Function
梯度计算过程
  • 在pytorch中,计算梯度的过程中主要分为以下几个步骤:
创建张量并设置requires_grad=True,首先,要创建一个张量,并将requires_grad属性设置为True, 以便pytorch跟踪其梯度
x = torch.tensor([2.0, 3.0], requires_grad=True)
定义计算图:接下来,使用创建的张量进行计算,可以使用任何pytorch支持的函数、操作和模型
y = x**2 + 3*x + 1
计算梯度:一旦我们得到了最终的输出张量,我们可以使用backward()方法自动计算梯度
y.sum().backward()
获取梯度值:通过访问张量的grad属性,我们可以获得计算得到的梯度值
print(x.grad)

输出结果:

tensor([7., 9.])
梯度计算示例
线性回归
import torch # 创建训练数据
x_train = torch.tensor([[1.0], [2.0], [3.0]])
y_train = torch.tensor([[2.0], [4.0], [6.0]])#定义模型参数
w = torch.tensor([[0.0]], requires_grad=True)
b = torch.tensor([[0.0]], requires_grad=True)# 定义模型
def linear_regression(x):return torch.matmul(x, w) + b# 定义损失函数
def loss_fn(y_pred, y):return torch.mean((y_pred - y)**2)# 优化器
optimizer = torch.optim.SGD([w, b], lr=0.01)# 训练模型for epoch in range(100):# 前向传播y_pred = linear_regression(x_train)# 计算损失loss = loss_fn(y_pred, y_train)print(loss)# 反向传播loss.backward()# 更新参数optimizer.step()# 清零梯度optimizer.zero_grad()

打印loss的结果看一下

tensor(18.6667, grad_fn=<MeanBackward0>)
tensor(14.7710, grad_fn=<MeanBackward0>)
tensor(11.6915, grad_fn=<MeanBackward0>)
tensor(9.2573, grad_fn=<MeanBackward0>)
tensor(7.3332, grad_fn=<MeanBackward0>)
tensor(5.8121, grad_fn=<MeanBackward0>)
tensor(4.6098, grad_fn=<MeanBackward0>)
tensor(3.6593, grad_fn=<MeanBackward0>)
tensor(2.9079, grad_fn=<MeanBackward0>)
tensor(2.3139, grad_fn=<MeanBackward0>)
tensor(1.8443, grad_fn=<MeanBackward0>)
tensor(1.4730, grad_fn=<MeanBackward0>)
tensor(1.1795, grad_fn=<MeanBackward0>)
tensor(0.9474, grad_fn=<MeanBackward0>)
tensor(0.7639, grad_fn=<MeanBackward0>)
tensor(0.6187, grad_fn=<MeanBackward0>)
tensor(0.5039, grad_fn=<MeanBackward0>)
tensor(0.4131, grad_fn=<MeanBackward0>)
tensor(0.3412, grad_fn=<MeanBackward0>)
tensor(0.2844, grad_fn=<MeanBackward0>)
tensor(0.2393, grad_fn=<MeanBackward0>)
tensor(0.2037, grad_fn=<MeanBackward0>)
tensor(0.1754, grad_fn=<MeanBackward0>)
tensor(0.1530, grad_fn=<MeanBackward0>)
tensor(0.1352, grad_fn=<MeanBackward0>)
tensor(0.1211, grad_fn=<MeanBackward0>)
tensor(0.1099, grad_fn=<MeanBackward0>)
tensor(0.1009, grad_fn=<MeanBackward0>)
tensor(0.0938, grad_fn=<MeanBackward0>)
tensor(0.0881, grad_fn=<MeanBackward0>)
tensor(0.0835, grad_fn=<MeanBackward0>)
tensor(0.0798, grad_fn=<MeanBackward0>)
tensor(0.0769, grad_fn=<MeanBackward0>)
tensor(0.0744, grad_fn=<MeanBackward0>)
tensor(0.0724, grad_fn=<MeanBackward0>)
tensor(0.0708, grad_fn=<MeanBackward0>)
tensor(0.0695, grad_fn=<MeanBackward0>)
tensor(0.0683, grad_fn=<MeanBackward0>)
tensor(0.0674, grad_fn=<MeanBackward0>)
tensor(0.0665, grad_fn=<MeanBackward0>)
tensor(0.0658, grad_fn=<MeanBackward0>)
tensor(0.0652, grad_fn=<MeanBackward0>)
tensor(0.0646, grad_fn=<MeanBackward0>)
tensor(0.0641, grad_fn=<MeanBackward0>)
tensor(0.0637, grad_fn=<MeanBackward0>)
tensor(0.0632, grad_fn=<MeanBackward0>)
tensor(0.0628, grad_fn=<MeanBackward0>)
tensor(0.0625, grad_fn=<MeanBackward0>)
tensor(0.0621, grad_fn=<MeanBackward0>)
tensor(0.0618, grad_fn=<MeanBackward0>)
tensor(0.0614, grad_fn=<MeanBackward0>)
tensor(0.0611, grad_fn=<MeanBackward0>)
tensor(0.0608, grad_fn=<MeanBackward0>)
tensor(0.0605, grad_fn=<MeanBackward0>)
tensor(0.0602, grad_fn=<MeanBackward0>)
tensor(0.0599, grad_fn=<MeanBackward0>)
tensor(0.0596, grad_fn=<MeanBackward0>)
tensor(0.0593, grad_fn=<MeanBackward0>)
tensor(0.0590, grad_fn=<MeanBackward0>)
tensor(0.0587, grad_fn=<MeanBackward0>)
tensor(0.0584, grad_fn=<MeanBackward0>)
tensor(0.0581, grad_fn=<MeanBackward0>)
tensor(0.0578, grad_fn=<MeanBackward0>)
tensor(0.0576, grad_fn=<MeanBackward0>)
tensor(0.0573, grad_fn=<MeanBackward0>)
tensor(0.0570, grad_fn=<MeanBackward0>)
tensor(0.0567, grad_fn=<MeanBackward0>)
tensor(0.0565, grad_fn=<MeanBackward0>)
tensor(0.0562, grad_fn=<MeanBackward0>)
tensor(0.0559, grad_fn=<MeanBackward0>)
tensor(0.0557, grad_fn=<MeanBackward0>)
tensor(0.0554, grad_fn=<MeanBackward0>)
tensor(0.0551, grad_fn=<MeanBackward0>)
tensor(0.0549, grad_fn=<MeanBackward0>)
tensor(0.0546, grad_fn=<MeanBackward0>)
tensor(0.0543, grad_fn=<MeanBackward0>)
tensor(0.0541, grad_fn=<MeanBackward0>)
tensor(0.0538, grad_fn=<MeanBackward0>)
tensor(0.0536, grad_fn=<MeanBackward0>)
tensor(0.0533, grad_fn=<MeanBackward0>)
tensor(0.0530, grad_fn=<MeanBackward0>)
tensor(0.0528, grad_fn=<MeanBackward0>)
tensor(0.0525, grad_fn=<MeanBackward0>)
tensor(0.0523, grad_fn=<MeanBackward0>)
tensor(0.0520, grad_fn=<MeanBackward0>)
tensor(0.0518, grad_fn=<MeanBackward0>)
tensor(0.0515, grad_fn=<MeanBackward0>)
tensor(0.0513, grad_fn=<MeanBackward0>)
tensor(0.0510, grad_fn=<MeanBackward0>)
tensor(0.0508, grad_fn=<MeanBackward0>)
tensor(0.0505, grad_fn=<MeanBackward0>)
tensor(0.0503, grad_fn=<MeanBackward0>)
tensor(0.0501, grad_fn=<MeanBackward0>)
tensor(0.0498, grad_fn=<MeanBackward0>)
tensor(0.0496, grad_fn=<MeanBackward0>)
tensor(0.0493, grad_fn=<MeanBackward0>)
tensor(0.0491, grad_fn=<MeanBackward0>)
tensor(0.0489, grad_fn=<MeanBackward0>)
tensor(0.0486, grad_fn=<MeanBackward0>)
tensor(0.0484, grad_fn=<MeanBackward0>)
反向传播
反向传播原理
  • 在深度学习中,我们通常使用梯度下降法最小化损失函数,从而训练神经网络模型。而反向传播是计算损失函数对模型参数梯度的一种有效方法。通过计算参数梯度,我们可以梯度的反方向更新参数,使得模型的预测结果逐渐接近真实标签
  • 反向传播的几个步骤:
    • 前向传播:将输入样本通过神经网络的前向计算过程,计算出预测结果
    • 计算损失:将预测结果与真实标签进行比较,并计算损失函数的值
    • 反向传播梯度:根据损失函数的值,计算损失函数对模型参数的梯度
    • 参数更新:根据参数的梯度和优化算法的规则,更新模型的参数
反向传播示例
import torch
import torch.nn as nn
import torch.optim as optimclass LinearRegression(nn.Module):def __init__(self):super(LinearRegression, self).__init__()self.linear = nn.Linear(1, 1) # 输入维度为1, 输出维度为1def forward(self, x):return self.linear(x)
# 创建模型的实例、定义损失函数和优化器
model = LinearRegression()
criterion = nn.MSELoss()  # 均方误差损失函数
optimizer = optim.SGD(model.parameters(), lr=0.01)
# 生成样本数据,并进行训练
x_train = torch.tensor([[1.0],[2.0],[3.0],[4.0]])
y_train = torch.tensor([[2.0],[4.0],[6.0],[8.0]])# 训练模型
for epoch in range(100):# 梯度清零optimizer.zero_grad() # 前向传播y_pred = model(x_train)# 计算损失loss = criterion(y_pred, y_train)# 反向传播loss.backward()# 参数更新optimizer.step()print(loss)

输出损失值:

tensor(30.6108, grad_fn=<MseLossBackward0>)
tensor(21.2626, grad_fn=<MseLossBackward0>)
tensor(14.7759, grad_fn=<MseLossBackward0>)
tensor(10.2748, grad_fn=<MseLossBackward0>)
tensor(7.1515, grad_fn=<MseLossBackward0>)
tensor(4.9841, grad_fn=<MseLossBackward0>)
tensor(3.4801, grad_fn=<MseLossBackward0>)
tensor(2.4364, grad_fn=<MseLossBackward0>)
tensor(1.7120, grad_fn=<MseLossBackward0>)
tensor(1.2093, grad_fn=<MseLossBackward0>)
tensor(0.8603, grad_fn=<MseLossBackward0>)
tensor(0.6181, grad_fn=<MseLossBackward0>)
tensor(0.4498, grad_fn=<MseLossBackward0>)
tensor(0.3330, grad_fn=<MseLossBackward0>)
tensor(0.2518, grad_fn=<MseLossBackward0>)
tensor(0.1953, grad_fn=<MseLossBackward0>)
tensor(0.1560, grad_fn=<MseLossBackward0>)
tensor(0.1286, grad_fn=<MseLossBackward0>)
tensor(0.1095, grad_fn=<MseLossBackward0>)
tensor(0.0961, grad_fn=<MseLossBackward0>)
tensor(0.0866, grad_fn=<MseLossBackward0>)
tensor(0.0800, grad_fn=<MseLossBackward0>)
tensor(0.0753, grad_fn=<MseLossBackward0>)
tensor(0.0718, grad_fn=<MseLossBackward0>)
tensor(0.0694, grad_fn=<MseLossBackward0>)
tensor(0.0675, grad_fn=<MseLossBackward0>)
tensor(0.0661, grad_fn=<MseLossBackward0>)
tensor(0.0651, grad_fn=<MseLossBackward0>)
tensor(0.0642, grad_fn=<MseLossBackward0>)
tensor(0.0635, grad_fn=<MseLossBackward0>)
tensor(0.0629, grad_fn=<MseLossBackward0>)
tensor(0.0623, grad_fn=<MseLossBackward0>)
tensor(0.0619, grad_fn=<MseLossBackward0>)
tensor(0.0614, grad_fn=<MseLossBackward0>)
tensor(0.0610, grad_fn=<MseLossBackward0>)
tensor(0.0606, grad_fn=<MseLossBackward0>)
tensor(0.0602, grad_fn=<MseLossBackward0>)
tensor(0.0598, grad_fn=<MseLossBackward0>)
tensor(0.0595, grad_fn=<MseLossBackward0>)
tensor(0.0591, grad_fn=<MseLossBackward0>)
tensor(0.0587, grad_fn=<MseLossBackward0>)
tensor(0.0584, grad_fn=<MseLossBackward0>)
tensor(0.0580, grad_fn=<MseLossBackward0>)
tensor(0.0577, grad_fn=<MseLossBackward0>)
tensor(0.0573, grad_fn=<MseLossBackward0>)
tensor(0.0570, grad_fn=<MseLossBackward0>)
tensor(0.0566, grad_fn=<MseLossBackward0>)
tensor(0.0563, grad_fn=<MseLossBackward0>)
tensor(0.0560, grad_fn=<MseLossBackward0>)
tensor(0.0556, grad_fn=<MseLossBackward0>)
tensor(0.0553, grad_fn=<MseLossBackward0>)
tensor(0.0550, grad_fn=<MseLossBackward0>)
tensor(0.0546, grad_fn=<MseLossBackward0>)
tensor(0.0543, grad_fn=<MseLossBackward0>)
tensor(0.0540, grad_fn=<MseLossBackward0>)
tensor(0.0537, grad_fn=<MseLossBackward0>)
tensor(0.0533, grad_fn=<MseLossBackward0>)
tensor(0.0530, grad_fn=<MseLossBackward0>)
tensor(0.0527, grad_fn=<MseLossBackward0>)
tensor(0.0524, grad_fn=<MseLossBackward0>)
tensor(0.0521, grad_fn=<MseLossBackward0>)
tensor(0.0518, grad_fn=<MseLossBackward0>)
tensor(0.0515, grad_fn=<MseLossBackward0>)
tensor(0.0512, grad_fn=<MseLossBackward0>)
tensor(0.0508, grad_fn=<MseLossBackward0>)
tensor(0.0505, grad_fn=<MseLossBackward0>)
tensor(0.0502, grad_fn=<MseLossBackward0>)
tensor(0.0499, grad_fn=<MseLossBackward0>)
tensor(0.0496, grad_fn=<MseLossBackward0>)
tensor(0.0493, grad_fn=<MseLossBackward0>)
tensor(0.0491, grad_fn=<MseLossBackward0>)
tensor(0.0488, grad_fn=<MseLossBackward0>)
tensor(0.0485, grad_fn=<MseLossBackward0>)
tensor(0.0482, grad_fn=<MseLossBackward0>)
tensor(0.0479, grad_fn=<MseLossBackward0>)
tensor(0.0476, grad_fn=<MseLossBackward0>)
tensor(0.0473, grad_fn=<MseLossBackward0>)
tensor(0.0470, grad_fn=<MseLossBackward0>)
tensor(0.0468, grad_fn=<MseLossBackward0>)
tensor(0.0465, grad_fn=<MseLossBackward0>)
tensor(0.0462, grad_fn=<MseLossBackward0>)
tensor(0.0459, grad_fn=<MseLossBackward0>)
tensor(0.0456, grad_fn=<MseLossBackward0>)
tensor(0.0454, grad_fn=<MseLossBackward0>)
tensor(0.0451, grad_fn=<MseLossBackward0>)
tensor(0.0448, grad_fn=<MseLossBackward0>)
tensor(0.0446, grad_fn=<MseLossBackward0>)
tensor(0.0443, grad_fn=<MseLossBackward0>)
tensor(0.0440, grad_fn=<MseLossBackward0>)
tensor(0.0438, grad_fn=<MseLossBackward0>)
tensor(0.0435, grad_fn=<MseLossBackward0>)
tensor(0.0432, grad_fn=<MseLossBackward0>)
tensor(0.0430, grad_fn=<MseLossBackward0>)
tensor(0.0427, grad_fn=<MseLossBackward0>)
tensor(0.0425, grad_fn=<MseLossBackward0>)
tensor(0.0422, grad_fn=<MseLossBackward0>)
tensor(0.0420, grad_fn=<MseLossBackward0>)
tensor(0.0417, grad_fn=<MseLossBackward0>)
tensor(0.0415, grad_fn=<MseLossBackward0>)
tensor(0.0412, grad_fn=<MseLossBackward0>)
  • 数据集准备 x_train, y_train
  • 训练迭代
    • 梯度清零 optimize.zero_grad()
    • 前向传播
    • 计算损失
    • 反向传播
    • 更新参数

相关文章:

小白入门pytorch(一)

本文为小白入门Pytorch中的学习记录博客 小白入门pytorch 基础知识 导入torch&#xff0c;查看torch版本 import torch print(torch.__version__)输出结果&#xff1a; 1.12.1cu113张量 在pytorch中&#xff0c;张量&#xff08;tensor&#xff09;是最基本的数据结构。 …...

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义

【STM32笔记】HAL库I2C通信配置、读写操作及通用函数定义 文章目录 I2C协议I2C配置I2C操作判断I2C是否响应I2C读写 附录&#xff1a;Cortex-M架构的SysTick系统定时器精准延时和MCU位带操作SysTick系统定时器精准延时延时函数阻塞延时非阻塞延时 位带操作位带代码位带宏定义总…...

Direct3D模板缓存

模板缓存是一个用于获得某种特效的离屏缓存&#xff0c;模板缓存的分辨率与后台缓存和深度缓存的分辨率完全相同&#xff0c;所以像素也是一一对应的&#xff0c;模板缓存允许我们动态的&#xff0c;有针对性的决定是否将某个像素写入后台缓存中。 例如实现镜面效果时&#xf…...

在windows上执行ssh-keygen报错Bad permissions

在windows上执行ssh-keygen报错Bad permissions&#xff1a;如下 C:\Users\xiaoming>ssh-keygen -p -m PEM -f C:\mywork\id_rsa Bad permissions. Try removing permissions for user: BUILTIN\\Users (S-1-6-92-143) on file C:/mywork/id_rsa.WARNING: UNPROTECTED PRIV…...

给Proxmox VE 虚拟机分配巨大分区惹麻烦

由于缺乏良好的规划&#xff0c;有开发人员直接在公有云采购一个容量超过100TB的NAS存储&#xff0c;使用过程中&#xff0c;数据的存储也没有规划&#xff0c;业务数据一股脑的写入到同一个目录&#xff0c;下边的子目录没有规律&#xff0c;用用户的图片、视频、访问日志、甚…...

数学建模——统计回归模型

一、基本知识 1、基本统计量 总体&#xff1a;研究对象的某个感兴趣的指标。样本&#xff1a;从总体中随机抽取的独立个体X1,X2,…,Xn&#xff0c;一般称(X1,…,Xn)为一个样本&#xff0c;可以看成一个n维随机向量&#xff0c;它的每一取组值(x1,…,xn)称为样本的观测值。统计…...

C++【个人笔记1】

1.C的初识 1.1 简单入门 #include<iostream> using namespace std; int main() {cout << "hello world" << endl;return 0; } #include<iostream>; 预编译指令&#xff0c;引入头文件iostream.using namespace std; 使用标准命名空间cout …...

博通强迫三星签不平等长约,被韩处罚1亿元 | 百能云芯

近日&#xff0c;博通&#xff08;Broadcom&#xff09;这家国际知名的半导体公司因其市场主导地位的滥用&#xff0c;遭到了韩国公平贸易委员会&#xff08;FTC&#xff09;的严厉制裁&#xff0c;罚款高达191亿韩元&#xff0c;约合人民币1.04亿元。这一惩罚背后的故事揭示了…...

版本控制 Sourcetree

Sourcetree软件做版本控制&#xff0c;小程序的代码和springboot项目的代码放到同一个文件夹下&#xff0c; 无脑安装就行 命名就用项目名bkd表示springboot项目名 项目命名xcx表示小程序 每次上传代码&#xff0c;一定要先拉下代码不然代码冲突处理起来比较麻烦...

题目 1059: 二级C语言-等差数列

题目描述 sum2581114…&#xff0c;输入正整数n&#xff0c;求sum的前n项和。样例输入 2样例输出 7 根据题目我们得知&#xff0c;求一个等差数列的和。 等差数列的下一项前一项d。d是等差。 根据这个直接求每一项&#xff0c;再加进sum的和&#xff0c;最后输出即可。 在本题中…...

HarmonyOS 如何使用异步并发能力进行开发

一、并发概述 并发是指在同一时间段内&#xff0c;能够处理多个任务的能力。为了提升应用的响应速度与帧率&#xff0c;以及防止耗时任务对主线程的干扰&#xff0c;HarmonyOS 系统提供了异步并发和多线程并发两种处理策略。 ● 异步并发是指异步代码在执行到一定程度后会被暂…...

时间格式化时候HH和hh的区别

SimpleDateFormat simpleDateFormatnew SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); simpleDateFormat.format(new Date()) HH&#xff08;大写&#xff09;&#xff1a;表示使用24小时制&#xff08;也称为军用时间制&#xff09;来表示小时。它的范围是从00到23。例…...

aliyunoss上传图片

依赖 <dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>3.8.1</version></dependency>配置文件 config:alioss:endpoint: oss-cn-shanghai.aliyuncs.com&#xff08;节点名 我…...

动手吧,vue数字动画

数字动画&#xff0c;有数字的地方都能用上&#xff0c;拿去吧&#xff01; 效果&#xff1a; 1、template部分 <template><div class"v-count-up">{{ dispVlaue }}</div> </template> 2、js部分 export default {data() {return {timer…...

Android12之仿Codec2.0实现传递编解码器组件本质(四十六)

简介: CSDN博客专家,专注Android/Linux系统,分享多mic语音方案、音视频、编解码等技术,与大家一起成长! 优质专栏:Audio工程师进阶系列【原创干货持续更新中……】🚀 人生格言: 人生从来没有捷径,只有行动才是治疗恐惧和懒惰的唯一良药. 更多原创,欢迎关注:Android…...

MongoDB【部署 04】Windows系统实现MongoDB多磁盘存储

Windows系统实现多磁盘存储 1.为什么2.多磁盘存储2.1 数据库配置2.2 文件夹磁盘映射2.3 创建新的数据集 3.总结 1.为什么 这里仅针对只有一台Windows系统服务器的情景&#xff1a; 当服务器存储不足时&#xff0c;或者要接入更多的数据&#xff0c;就会挂载新磁盘&#xff0c…...

ruoyi框架使用自定义用户表登录

背景 有的时候我们做框架升级或改造的时候&#xff0c;需要用到原来的部分表&#xff0c;比如只是用ruoyi的框架&#xff0c;然后登录的用户逻辑还是想用自己的表&#xff0c;那么接下来这边文章将介绍修改逻辑。 修改教程 1、SysLoginController.java 大家找到这个login方…...

计算机视觉与深度学习-卷积神经网络-卷积图像去噪边缘提取-卷积-[北邮鲁鹏]

目录标题 参考学习链接卷积的定义卷积的性质叠加性平移不变性交换律结合律分配律标量 边界填充边界填充方法 - 常数填充最常用常数填充零填充&#xff08;zero padding&#xff09;拉伸镜像 卷积示例单位脉冲核无变化平移平滑锐化 卷积核平均卷积核高斯卷积核高斯卷积核定义高斯…...

JS手动实现发布者-订阅者模式

发布-订阅模式是一种对象间一对多的依赖关系&#xff0c;当一个对象的状态发送改变时&#xff0c;所有依赖于它的对象都将得到状态改变的通知。具体过程是&#xff1a;订阅者把自己想订阅的事件注册到调度中心&#xff0c;当发布者更新该事件时通知调度中心&#xff0c;由调度中…...

【含面试题】MySQL死锁日志分析与解决的Java代码实现

AI绘画关于SD,MJ,GPT,SDXL百科全书 面试题分享点我直达 2023Python面试题 2023最新面试合集链接 2023大厂面试题PDF 面试题PDF版本 java、python面试题 项目实战:AI文本 OCR识别最佳实践 AI Gamma一键生成PPT工具直达链接 玩转cloud Studio 在线编码神器 玩转 GPU AI…...

解决方案:TSINGSEE青犀+智能分析网关助力智慧仓储智能化监管

为全面保障物流仓储的安全性与完整性&#xff0c;解决仓库管理难题&#xff0c;优化物流仓储方式&#xff0c;提升仓储效率&#xff0c;降低人工成本&#xff0c;旭帆科技推出智慧仓储AI视频智能分析方案&#xff0c;利用物联网、大数据、云计算等技术&#xff0c;对仓储管理进…...

进程间通信

#include <unistd.h> int pipe(int pipefd[2]); 功能&#xff1a;创建一个匿名管道&#xff0c;用于进程间通信 参数&#xff1a; -int pipefd[2]:传出参数 pipefd[0]对应的是管道的读端 pipefd[0]对应的是管道的写端 返回值&#xff1a; 成功返回0&#xff0c;失败返回-…...

Ubuntu 22.04.3 LTS安装

最近换电脑了&#xff0c;准备重新装一下ubuntu。多年前装过ubuntu很老的版本&#xff0c;现在发现官网最新的LTS版本是 Ubuntu 22.04.3 LTS 版本。那重新装的话&#xff0c;肯定装最新的版本了。这里我记录下自己的安装过程&#xff0c;作为以后的笔记查看。 我的环境&#x…...

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文(变方框了)问题解决方案

记一次manjaro-i3系统sogoupinying候选词无法正常显示中文&#xff08;变方框了&#xff09;问题解决方案 前言解决方案 前言 今天早上发现公司电脑显卡驱动好像坏了&#xff0c;各种折腾完了干脆把系统搞黑屏无法开机了&#xff0c;时间有限懒再修了&#xff0c;于是重装了系…...

Lua学习笔记:词法分析

前言 本篇在讲什么 Lua的词法分析 本篇需要什么 对Lua语法有简单认知 对C语法有简单认知 依赖Visual Studio工具 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全流程的源码内容 ★提高阅读体验★ &#x1f449; ♠ 一级标题…...

flask服务鉴权

基本认证&#xff08;Basic Authentication&#xff09;&#xff1a; 这是一种简单的鉴权方式&#xff0c;需要客户端发送用户名和密码&#xff0c;服务器验证后允许或拒绝访问。可以使用 Flask-BasicAuth 扩展来实现。首先&#xff0c;安装扩展&#xff1a; pip install Fla…...

【2023华为杯B题】DFT类矩阵的整数分解逼近(思路及代码下载)

&#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜密&#xff0c;逻辑清晰&#xff0c;为了方便读者。 ⛳️座右铭&a…...

基于微信小程序的校园生活管理系统设计与实现(源码+lw+部署文档+讲解等)

文章目录 前言运行环境学生微信端的主要功能有&#xff1a;管理员的主要功能有&#xff1a;具体实现截图视频演示为什么选择我自己的网站自己的小程序&#xff08;小蔡coding&#xff09;有保障的售后福利 代码参考源码获取 前言 &#x1f497;博主介绍&#xff1a;✌全网粉丝1…...

SQL server 创建存储过程

SQL Server如何创建存储过程 存储过程&#xff1a; 可以理解为完成特定功能的一组 SQL 语句集&#xff0c;存储在数据库中&#xff0c;经过第一次编译&#xff0c;之后的运行不需要再次编译&#xff0c;用户通过指定存储过程的名字并给出参数&#xff08;如果该存储过程带有参数…...

一文了解亚马逊云科技适用于 Amazon Lightsail 的托管数据库

Amazon Lightsail 是亚马逊云科技提供的一种易上手使用、月度价格经济实惠&#xff0c;并包括了计算实例、容器、存储、数据库的虚拟专用服务器。在创建时可以进行业务蓝图选择&#xff0c;可选择包含多种操作系统&#xff08;Linux/Windows 等&#xff09;或操作系统加上典型应…...

网站的流量建设/nba季后赛最新排名

题目链接 题解&#xff1a; 首先我们可以想到&#xff0c;如果两个局部最小值是八相邻的&#xff0c;那一定无解。 题目有一个重要的限制&#xff0c;就是局部最小值必须一个不差&#xff0c;但是我们可能在满足了题目要求的情况下&#xff0c;多出了一些局部最小值。 我们先…...

织梦门户网站模板/关键词优化公司哪家好

调结者的执行actionStrutsExecuteFilter类的工作就是执行对应的action请求。StrutsExecuteFilter类的工作还需要有一个叫ExecuteOperations类的帮助。如果看过源码的朋友都知道&#xff0c;StrutsExecuteFilter类的代码里用了ExecuteOperations类的俩个方法。一个是&#xff1a…...

做网站代理商/谷歌外贸网站推广

命  令&#xff1a; free功能说明&#xff1a;显示内存状态。语  法&#xff1a; free [-bkmotV][-s ]补充说明&#xff1a;free指令会显示内存的使用情况&#xff0c;包括实体内存&#xff0c;虚拟的交换文件内存&#xff0c;共享内存区段&#xff0c;以及系统核心使用的缓…...

2022年没封网站直接进入/千峰培训多少钱

大多没有编程经验的同学&#xff0c;做Python练习的时候&#xff0c;习惯搜题背题&#xff0c;没有去理解题目思考结题思路。导致真正实战环境下&#xff0c;题目稍微一遍就无从下手。今天为大家带来一份500页&#xff0c;157条超实用Python代码实例集锦&#xff0c;资料覆盖从…...

网站死了怎么办/点击器原理

故障背景&#xff1a; 克隆完虚拟机后&#xff0c;连不上网&#xff0c;ifconfig查看后&#xff0c;发现网卡eth0没有启动&#xff0c;于是ifconfig eth0 up 启动eth0网卡&#xff0c;结果启动不了&#xff0c;进入/etc/sysconfig/network-scripts/ifcfg-eth0查看后&#xff0c…...

备案的网站程序上传/网络营销swot分析

这篇文章主要介绍了javascript判断回文数详解及实现代码的相关资料,需要的朋友可以参考下javascript判断回文数概要&#xff1a;回文”是指正读反读都能读通的句子&#xff0c;它是古今中外都有的一种修辞方式和文字游戏&#xff0c;如“我为人人&#xff0c;人人为我”等。在数…...