1. Numpy VS Torch

#相互转换
np_data = torch_data.numpy()
torch_data = torch.from_numpy(np_data)
#abs
data = [1, 2, -2, -1] #array
tensor = torch.FloatTensor(data) #32bit 传入普通数组
np.abs(data); torch.abs(tensor);
#矩阵相乘
data.dot(data) #但是要先转换为numpy的data data=np.array(data)
torch.mm(tensor, tensor)

2. Variable

#引入
from torch.autograd import Variable
#声明
variable = Varible(tensor, requires_grad=True)
variable.data #type是tensor

3. Activation Function 激励函数

y = AF(Wx) 画图

#引入
import torch.nn.function as F
import matplotlib.pyplot as plt
#fake data
x = torch.linspace(-5, 5, 200)
x = Variable(x)
x_np = x.data.numpy() ***
#activation
y_relu = F.relu(x).data.numpy() *** plt.plot(x_np, y_relu, c='red', label='relu')

4. Regression 回归

# 动态更新画图
plt.ion()
plt.show() #for循环中的if条件内部
plt.cla()
plt.scatter(x.data.numpy(), y.data.numpy())
plt.plot(x.data.numpy(), prediction.data.numpy(), 'r-', lw=5)
plt.text(0.5, 0, 'Loss=%.4f' % loss.data, fontdict={'size':20, 'color': 'red'})
plt.pause(0.1) #for外部
plt.ioff()
plt.show() #net层的定义看regression代码!

5. Classification 分类

#二元分类 模拟数据 及 画图
n_data = torch.ones(100, 2) # shape(100, 2)
x0 = torch.normal(2*n_data, 1)
y0 = torch.zeros(100)
x1 = torch.normal(-2*n_data, 1)
y1 = torch.ones(100)
x = torch.cat((x0, x1), 0).type(torch.FloatTensor)
y = torch.cat((y0, y1)).type(torch.LongTensor) #label 只能是integer类型 x, y = Variable(x), Variable(y) plt.scatter(x.data.numpy()[:, 0], x.data.numpy()[:, 1], c=y.data.numpy(), s=100, lw=0, cmap='RdYlGn')
plt.show() #输入二维 hiddenlayer10个神经元 输入也是二维
net = Net(2, 10, 2) #优化使用
loss_func = torch.nn.CrossEntropyLoss() #for循环内部 区分out 和 prediction
out = net(x) #此时的out格式是很乱的
loss = loss_func(out, y) #两者的误差 prediction = torch.max(F.softmax(out), 1)[1] # 过了一道 softmax 的激励函数后的最大概率才是预测值
accuracy = sum(pre_y == target_y) / 200 #预测有多少和真实值一样

6. 快速搭建法

net = torch.nn.Sequential(
torch.nn.Linear(2, 10),
torch.nn.ReLU(),
torch.nn.Linear(10, 2)
)

7. 保存提取

使用两种方式提取整个神经网络:提取整个网络或只提取参数。

两段式声明,在save中保存,在restore中提取,最后显示。

def save():
#建网络#
#训练#
#保存
torch.save(net1, 'net.pkl') #保存整个网络
torch.save(net1.state_dict(), 'net_params.pkl') #只保存网络中的参数 #提取整个网络
def restore_net():
net2 = torch.load('net.pkl')
prediction = net2(x) #只提取网络参数
def restore_params():
net3 = ... #net3 = net1
net3.load_state_dict(torch.load('net_params.pkl'))
prediction = net3(x) #显示结果
save()
restore_net()
restore_params()

8. 批数据训练

#数据引入
import torch.utils.data as Data
# 先定义batchsize
BATCH_SIZE = 5
# 转换torch为Dataset
torch_dataset = Data.TensorDataset(x, y) #(1)
loader = Data.DataLoader(...)
#for循环内的读取
for step, (batch_x, batch_y) in enumerate(loader):
#如果在loader中开了多线程
if __name__ == '__main__': #加上双线程的入口
#(1)

9. Optimizer 优化器

#给每个优化器优化一个神经网络
net_SGD = Net()
net_Momentum = Net()
net_RMSprop = Net()
net_Adam = Net()
nets = [net_SGD, net_Momentum, net_RMSprop, net_Adam] #创建不同的优化器来训练不同的网络,并创建loss_func来计算误差
opt_SGD = torch.optim.SGD(net_SGD.parameters(), lr=LR)
opt_Momentum = torch.optim.SGD(net_Momentum.parameters(), lr=LR, momentum=0.8)
opt_RMSprop = torch.optim.RMSprop(net_RMSprop.parameters(), lr=LR, alpha=0.9)
opt_Adam = torch.optim.Adam(net_Adam.parameters(), lr=LR, betas=(0.9, 0.99))
optimizers = [opt_SGD, opt_Momentum, opt_RMSprop, opt_Adam] loss_func = torch.nn.MSELoss()
losses_his = [[], [], [], []] # 记录 training 时不同神经网络的 loss #训练每个优化器,优化属于自己的神经网络
for epoch in range(EPOCH):
print('Epoch: ', epoch)
for step, (b_x, b_y) in enumerate(loader):
for net, opt, l_his in zip(nets, optimizers, losses_his): #都是列表
output = net(b_x) # get output for every net
loss = loss_func(output, b_y) # compute loss for every net
opt.zero_grad() # clear gradients for next train
loss.backward() # backpropagation, compute gradients
opt.step() # apply gradients
l_his.append(loss.data.numpy()) # loss recoder #画图
labels = ['SGD', 'Momentum', 'RMSprop', 'Adam']
for i, l_his in enumerate(losses_his):
plt.plot(l_his, label=labels[i])
plt.legend(loc='best')
plt.xlabel('Steps')
plt.ylabel('Loss')
plt.ylim((0, 0.2))
plt.show()

莫烦 - Pytorch学习笔记 [ 一 ]的更多相关文章

  1. 莫烦pytorch学习笔记(八)——卷积神经网络(手写数字识别实现)

    莫烦视频网址 这个代码实现了预测和可视化 import os # third-party library import torch import torch.nn as nn import torch ...

  2. 莫烦pytorch学习笔记(七)——Optimizer优化器

    各种优化器的比较 莫烦的对各种优化通俗理解的视频 import torch import torch.utils.data as Data import torch.nn.functional as ...

  3. 莫烦PyTorch学习笔记(五)——模型的存取

    import torch from torch.autograd import Variable import matplotlib.pyplot as plt torch.manual_seed() ...

  4. 莫烦PyTorch学习笔记(六)——批处理

    1.要点 Torch 中提供了一种帮你整理你的数据结构的好东西, 叫做 DataLoader, 我们能用它来包装自己的数据, 进行批训练. 而且批训练可以有很多种途径. 2.DataLoader Da ...

  5. 莫烦pytorch学习笔记(二)——variable

    .简介 torch.autograd.Variable是Autograd的核心类,它封装了Tensor,并整合了反向传播的相关实现 Variable和tensor的区别和联系 Variable是篮子, ...

  6. 莫烦 - Pytorch学习笔记 [ 二 ] CNN ( 1 )

    CNN原理和结构 观点提出 关于照片的三种观点引出了CNN的作用. 局部性:某一特征只出现在一张image的局部位置中. 相同性: 同一特征重复出现.例如鸟的羽毛. 不变性:subsampling下图 ...

  7. 莫烦PyTorch学习笔记(五)——分类

    import torch from torch.autograd import Variable import torch.nn.functional as F import matplotlib.p ...

  8. 莫烦PyTorch学习笔记(四)——回归

    下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...

  9. 莫烦PyTorch学习笔记(三)——激励函数

    1. sigmod函数 函数公式和图表如下图     在sigmod函数中我们可以看到,其输出是在(0,1)这个开区间内,这点很有意思,可以联想到概率,但是严格意义上讲,不要当成概率.sigmod函数 ...

  10. 莫烦pytorch学习笔记(一)——torch or numpy

    Q1:什么是神经网络? Q2:torch vs numpy Numpy:NumPy系统是Python的一种开源的数值计算扩展.这种工具可用来存储和处理大型矩阵,比Python自身的嵌套列表(neste ...

随机推荐

  1. ENS中文文档系列之三 [ ENS常见问题 ]

    原文地址:https://ensuser.com/docs/frequently-asked-questions.html更多最新信息,请前往 ENS 中文服务站点:ENSUser 关于 ENS 注册 ...

  2. 如何利用wx.request进行post请求

    1,method 是  get  方式的时候,会将数据转换成 query string method 为 post 时,header为{"Content-Type": " ...

  3. 洛谷P1616疯狂的采药(完全背包)

    题目背景 此题为NOIP2005普及组第三题的疯狂版. 此题为纪念LiYuxiang而生. 题目描述 LiYuxiang是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的 ...

  4. 2020 CCPC Wannafly Winter Camp Day1 - I. K小数查询(分块)

    题目链接:K小数查询 题意:给你一个长度为$n$序列$A$,有$m$个操作,操作分为两种: 输入$x,y,c$,表示对$i\in[x,y] $,令$A_{i}=min(A_{i},c)$ 输入$x,y ...

  5. 牛客新年AK场之模拟二维数组

    链接:https://ac.nowcoder.com/acm/contest/3800/D来源:牛客网 题目描述 Rinne 喜欢使用一种奇怪的方法背单词,现在这些单词被放在了一个 n×mn \tim ...

  6. FYF的煎饼果子

    利用等差数列公式就行了,可以考虑特判一下m >= n($ m, n \neq 1 $),这时一定输出“AIYAMAYA”. #include <iostream> using nam ...

  7. 计算机二级C语言选择题错题知识点记录。

    计算机二级C语言选择题错题知识点记录. 1,在数据流图中,用标有名字的箭头表示数据流.在程序流程图中,用标有名字的箭头表示控制流. 2,结构化程序设计的基本原则:自顶向下,逐步求精,模块化,限制使用g ...

  8. LLC半桥谐振变换器调试记录

    1.判断二极管是否击穿 2.判断mos管是否烧坏 直接用声音档,发出响声说明击穿了 3.测试二极管的正负极方法 将万用表调到二极管档 1.信号发生芯片周围的电阻 2.反馈部分的电阻 3.实验准备部分: ...

  9. java月利率计算(等额本息贷款)

    等额本息 每月还款计算公式: 每月本息金额 = (本金×月利率×(1+月利率)^还款月数)÷ ((1+月利率)^还款月数-1)) 反转求出 月利率 月利率 如果根据上面公式反转是算不出来的. 下面给出 ...

  10. Spring Boot Ftp Client 客户端示例支持断点续传

    本章介绍 Spring Boot 整合 Ftpclient 的示例,支持断点续传 本项目源码下载 1 新建 Spring Boot Maven 示例工程项目 注意:是用来 IDEA 开发工具 File ...