- 进入官网下载安装包https://www.jetbrains.com/pycharm/download/#section=windows;
- 进行安装,按照下图进行勾选
- 安装成功
-
进入官网下载https://www.python.org/downloads/release/python-3104/
-
进行安装
-
配置环境变量,将python安装地址复制进去
-
功能检测,cmd输入python进行检测,则安装成功
-
安装Anaconda
https://www.anaconda.com/products/distribution#Downloads -
安装CUDA 10.0
谷歌搜索“cuda download”进入https://developer.nvidia.com/cuda-downloads
然后选择win10版本的local版本,点击右下角的dowload,大概2.4G左右 -
Pytorch的安装
打开pytorch官网,即https://pytorch.org/,点击“install”,然后进入版本的选择页面。
然后将下面这条Command命令复制,以管理员身份运行cmd,并将刚刚这条命令粘贴到控制台上。即可安装。 -
安装pycharm并进行环境配置
##实现反向传播
由于不是很懂这一块的知识,于是去看了几篇大佬的博客进行了恶补……
先贴代码
import torch
# 假设w的初始值为1.0,并通过设置 requires_grad标识为Ture来
# 告诉Pytorch需要对该张量进行自动求导,PyTorch会记录该张量的每一步操作历史并自动计算
w = torch.tensor([1.0], requires_grad=True)
x_data = [1.0, 2.0, 3.0]
y_data = [2.0, 4.0, 6.0]
# 定义损失函数、
def forward(x): # y^ = wx
return x * w # w是tensor 所以 这个乘法自动转换为tensor数乘 , x被转化成tensor 这里构建了一个计算图
def loss(x, y): # 计算单个的误差 : 损失
'''
每调用一次loss函数,计算图自动构建一次
:param x:
:param y:
:return:
'''
y_pred = forward(x)
return (y_pred - y) ** 2
eli = []
lli = []
print('predict(before training)', 4, forward(4).item())
for epoch in range(100):
for x, y in zip(x_data, y_data):
l = loss(x, y)
l.backward() # 自动求梯度
print('tgrad:', x, y, w.grad.item())
w.data = w.data - 0.01 * w.grad.data
# 清空权重,不然梯度会累加
w.grad.data.zero_()
eli.append(epoch)
lli.append(l.item())
print('progress:', epoch, l.item())
print('predict(after training)', 4, forward(4).item())
关于链式法则:假设有两个运算或两个函数,a(x)=y,b(y)=z,现在想最小化z,则需要知道z的相对开始的x的导数,则先计算z关于y的导数,然后乘以y关于x的导数,最终得到结果
关于计算图:用张量做的每一个操作pytorch都会创建一个图形,所以在每一个节点应用函数通过输入得到输出,在节点中可以计算局部梯度,例如f=x*y=z,则计算z关于x和y的梯度,分别是y和x,由于最终要计算一个想要最小化的损失函数,所以要计算关于损失相对x的梯度,又由于链式法则,损失对x的梯度就是对z的梯度乘以局部梯度z对x的导数
具体步骤:
1,前向传播,应用所有函数计算损失
2,在每个点上计算梯度
3,做后向传播,计算损失的梯度关于我们的权值或参数,使用链式法则
Pytorch 里面数据最基本的成员是 Tensor,它是用来存储数据的,它可以存标量,向量,矩阵或者高阶的 Tensor。它里面包含两个重要成员 data 和 grad。data 用来保存权重 w,grad 用来保存损失函数 Loss 对权重 w 的导数。
然后贴一张我觉得很直观的图在下面,模拟pytorch的计算过程
运行结果:



