人工智能基础-作业1

文章目录

  • 1 安装pycharm,配置好python开发环境
    • pycharm大致安装流程
      • 安装完成后进入pycharm
    • 安装配置python
  • 2 安装pytorch
  • 3 使用pytorch实现反向传播
    • PyTorch Autograd自动求导
  • 参考资料


1 安装pycharm,配置好python开发环境

安装并配置pycharm,参考链接PyCharm 安装教程

pycharm大致安装流程

(由于安装完成后不小心重启电脑,博客也没有保存导致安装流程截图丢失)
(这里提醒大家写博客一定顺手保存)

安装完成后进入pycharm

人工智能基础-作业1_第1张图片

安装配置python

如果我们之前没有安装python解释器的话,先去官网下载安装
下载python解释器
根据电脑所需版本号下载安装
人工智能基础-作业1_第2张图片
安装完成后添加python到环境变量并查看能否使用
查看版本


2 安装pytorch

查看驱动版本
人工智能基础-作业1_第3张图片
版本后面就是对应的驱动版本号,查看对应cuda
人工智能基础-作业1_第4张图片

pytorch官网
在终端跑对应命令
人工智能基础-作业1_第5张图片
若官网给的命令不成功或者很慢的话可以把pip3修改为pip或者修改为国内镜像源

pip install torch torchvision torchaudio --extra-index-url https://download.pytorch.org/whl/cu113 -i https://mirrors.aliyun.com/pypi/simple/

这里换的是阿里镜像。参考pip换源

3 使用pytorch实现反向传播

import torch
x_data = [1.0, 2.0, 3.0]        # 输入值
y_data = [2.0, 4.0, 6.0]        # 输出值
w = torch.Tensor([1.0])
w.requires_grad = True
# 权重初始值(设置w的初始值),在grad求导时会将这里设置的初始值带入
# Tensor创建时默认不计算梯度,需要计算梯度设置为ture,自动记录求w的导

# y_predict = x * w
def forward(x):
    return x * w
# 损失函数,return激活函数后得到的
def loss(x,y):
    y_pred = forward(x)
    return (y_pred - y) ** 2

# 训练过程
# 第一步:先算损失Loss
# 第二步:backward,反向传播
# 第三步:梯度下降
for epoch in range(100):    #训练100次
    for x, y in zip(x_data,y_data) :
        l = loss(x,y)           # 前向传播,求Loss(损失函数),构建计算图
        l.backward()            # 反向传播,求出计算图中所有梯度存入w中
        print("\tgrad: ",x,y,w.grad.item())
                                # w.grad.data:获取梯度,用data计算,不会建立计算图,每次获取叠加到grad
        w.data = w.data - 0.01 * w.grad.data     # 修正一次w,learningrate=0.01(类似步长

        w.grad.data.zero_()     # 注意:将w中记录的梯度清零,消除本次计算记录,只保留新的w,开启下一次前向传播
    print("pregress:", epoch, l.item()) # item取元素精度更高,得到的是loss

运行结果
人工智能基础-作业1_第6张图片
*** 如果错误提示torch不存在,可能是电脑中存在多个python编译器,切换到刚刚成功安装pytorch的python编译器即可。 ***

PyTorch Autograd自动求导

autograd包为张量上的所有操作提供了自动求导机制。

import torch
#创建一个张量并设置requires_grad=True用来追踪其计算历史
x = torch.ones(2, 2, requires_grad=True)
print(x)
#对这个张量做一次运算:
y = x + 2
print(y)
print(y.grad_fn)
#对y进行更多操作:
z = y * y * 3
out = z.mean()
print(z, out)
#.requires_grad_(...) 原地改变了现有张量的 requires_grad 标志。如果没有指定的话,默认输入的这个标志是False'''
a = torch.randn(2, 2)
a = ((a * 3) / (a - 1))
print(a.requires_grad)
a.requires_grad_(True)
print(a.requires_grad)
b = (a * a).sum()
print(b.grad_fn)

#梯度,因为out是一个标量。所以让我们直接进行反向传播,out.backward()和out.backward(torch.tensor(1.))等价
out.backward()
#输出导数d(out)/dx
print(x.grad)

运行结果
人工智能基础-作业1_第7张图片

参考资料

Pytorch实现反向传播
PyTorch Autograd自动求导

你可能感兴趣的:(python,深度学习)