小白入门pytorch(一)

这篇具有很好参考价值的文章主要介绍了小白入门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 optim

class LinearRegression(nn.Module):
    def __init__(self):
        super(LinearRegression, self).__init__()
        self.linear = nn.Linear(1, 1) # 输入维度为1, 输出维度为1
    def 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)

输出损失值:文章来源地址https://www.toymoban.com/news/detail-732028.html

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(一)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 深度学习实战24-人工智能(Pytorch)搭建transformer模型,真正跑通transformer模型,深刻了解transformer的架构

    大家好,我是微学AI,今天给大家讲述一下人工智能(Pytorch)搭建transformer模型,手动搭建transformer模型,我们知道transformer模型是相对复杂的模型,它是一种利用自注意力机制进行序列建模的深度学习模型。相较于 RNN 和 CNN,transformer 模型更高效、更容易并行化,广泛应用于神

    2023年04月22日
    浏览(39)
  • 【数据分析入门】人工智能、数据分析和深度学习是什么关系?如何快速入门 Python Pandas?

    本文详细介绍了人工智能、数据分析和深度学习之间的关系,并就数据分析所需的Pandas库做了胎教般的入门引导。祝读得开心!   本文是原 《数据分析大全》 、现改名为 《数据分析》 专栏的第二篇,我在写这篇文章的时候突然意识到—— 单靠我是不可能把数据分析的方

    2024年02月14日
    浏览(59)
  • AI写作革命:PyTorch如何助力人工智能走向深度创新

    身为专注于人工智能研究的学者,我十分热衷于分析\\\"AI写稿\\\"与\\\"PyTorch\\\"这两项领先技术。面对日益精进的人工智能科技,\\\"AI写作\\\"已不再是天方夜谭;而\\\"PyTorch\\\"如璀璨明珠般耀眼,作为深度学习领域的尖端工具,正有力地推进着人工智能化进程。于此篇文章中,我将详细解析\\\"

    2024年04月13日
    浏览(44)
  • 《人工智能专栏》必读150篇 | 专栏介绍 & 专栏目录 & Python与PyTorch | 机器与深度学习 | 目标检测 | YOLOv5及改进 | YOLOv8及改进 | 关键知识点 | 工具

    各位读者们好,本专栏最近刚推出,限于个人能力有限,不免会有诸多错误,敬请私信反馈给我,接受善意的提示,后期我会改正,谢谢,感谢。 第一步 :[ 购买点击跳转 ] 第二步 : 代码函数调用关系图(全网最详尽-重要) 因文档特殊,不能在博客正确显示,请移步以下链接

    2024年02月02日
    浏览(52)
  • 探索人工智能:深度学习、人工智能安全和人工智能编程(文末送书)

    人工智能知识对于当今的互联网技术人来说已经是刚需。但人工智能的概念、流派、技术纷繁复杂,选择哪本书入门最适合呢? 这部被誉为人工智能“百科全书”的《人工智能(第3版)》,可以作为每个技术人进入 AI 世界的第一本书。 购书链接,限时特惠5折 这本书是美国

    2024年02月03日
    浏览(82)
  • 人工智能深度学习

    目录 人工智能 深度学习 机器学习 神经网络 机器学习的范围 模式识别 数据挖掘 统计学习 计算机视觉 语音识别 自然语言处理 机器学习的方法 回归算法 神经网络 SVM(支持向量机) 聚类算法 降维算法 推荐算法 其他 机器学习的分类 机器学习模型的评估 机器学习的应用 机

    2024年02月22日
    浏览(43)
  • 人工智能之深度学习

    第一章 人工智能概述 1.1人工智能的概念和历史 1.2人工智能的发展趋势和挑战 1.3人工智能的伦理和社会问题 第二章 数学基础 1.1线性代数 1.2概率与统计 1.3微积分 第三章 监督学习 1.1无监督学习 1.2半监督学习 1.3增强学习 第四章 深度学习 1.1神经网络的基本原理 1.2深度学习的

    2024年02月09日
    浏览(39)
  • 人工智能、机器学习、深度学习的区别

    人工智能涵盖范围最广,它包含了机器学习;而机器学习是人工智能的重要研究内容,它又包含了深度学习。 人工智能是一门以计算机科学为基础,融合了数学、神经学、心理学、控制学等多个科目的交叉学科。 人工智能是一门致力于使计算机能够模拟、模仿人类智能的学

    2024年02月08日
    浏览(42)
  • 人工智能学习07--pytorch14--ResNet网络/BN/迁移学习详解+pytorch搭建

    亮点:网络结构特别深 (突变点是因为学习率除0.1?) 梯度消失 :假设每一层的误差梯度是一个小于1的数,则在反向传播过程中,每向前传播一层,都要乘以一个小于1的误差梯度。当网络越来越深的时候,相乘的这些小于1的系数越多,就越趋近于0,这样梯度就会越来越小

    2023年04月11日
    浏览(35)
  • 深度学习:探索人工智能的前沿

    人工智能(Artificial Intelligence,简称AI)是一门研究如何使计算机能够执行通常需要人类智能的任务的领域。从早期的符号推理到现代的深度学习,人工智能经历了漫长的发展过程。 20世纪50年代,AI的奠基性工作开始,研究者们试图通过符号推理来模拟人类思维过程。然而,

    2024年01月19日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包