【pytorch】学习笔记(四)-搭建神经网络进行关系拟合
【pytorch学习笔记】-搭建神经网络进行关系拟合
目标
1.创建一些围绕y=x^2+噪声这个函数的散点
2.用神经网络模型来建立一个可以代表他们关系的线条
建立数据集
import torch
from torch.autograd import Variable
import torch.nn.functional as F
import matplotlib.pyplot as plt
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#一维变二维,x从-1到1,切分为100份
y=x.pow(2)+0.2*torch.rand(x.size())#创建一些围绕着这y=x^2的随机点的散点
# plt.scatter(x.data.numpy(),y.data.numpy())#画图
# plt.show()
x,y=Variable(x),Variable(y)#构造神经网络要使用Variable类型
建立神经网络
1.继承torch.nn.Module模块
2.定义__init__函数,在初始化函数中定义输入层到隐藏层,从隐藏层再到输出层各个层的神经元个数
3.再一层层搭建(forward(x))层于层的关系链接
class Net(torch.nn.Module):
def __init__(self,n_feature,n_hidden,n_ouput):#初始化信息
super(Net, self).__init__()
self.hidden=torch.nn.Linear(n_feature,n_hidden,n_ouput)#隐藏层线性输出
self.predict=torch.nn.Linear(n_hidden,n_ouput)#输出层线性输出
def forward(self,x):#前向传递的过程
#正向传播输入值,神经网络输出预测值
x=F.relu(self.hidden(x))#激励函数加工一下
x=self.predict(x)#输出值预测值
return x
训练神经网络
1.定义训练工具optimizer,输入神经网络参数和学习效率
2.定义误差函数,使用均方差来计算实际值y和训练输出值之间的误差
3.每次训练向神经网络输入x,得到预测值,计算误差
4.注意要清空上一步的残余更新参数值
5.误差反向传播, 计算参数更新值
6.将参数更新值施加到 net 的 parameters 上
for t in range(200):#训练200次
prediction=net(x)#输入输入值
loss=loss_func(prediction,y)#计算误差预测值和真实值之间的误差,注意位置
optimizer.zero_grad()#梯度清零
loss.backward()#反向传递
optimizer.step()#优化梯度
可视化训练过程
for t in range(200):#训练200次
prediction=net(x)#输入输入值
loss=loss_func(prediction,y)#计算误差预测值和真实值之间的误差,注意位置
optimizer.zero_grad()#梯度清零
loss.backward()#反向传递
optimizer.step()#优化梯度
# 接着上面来
if t % 5 == 0:
# plot and show learning process
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.numpy(), fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
完整代码
import torch
from torch.autograd import Variable
import torch.nn.functional as F
import matplotlib.pyplot as plt
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)#一维变二维
y=x.pow(2)+0.2*torch.rand(x.size())
# plt.scatter(x.data.numpy(),y.data.numpy())
# plt.show()
x,y=Variable(x),Variable(y)#构造神经网络的是琥珀要使用Variable类型的
class Net(torch.nn.Module):
def __init__(self,n_feature,n_hidden,n_ouput):#初始化信息
super(Net, self).__init__()
self.hidden=torch.nn.Linear(n_feature,n_hidden,n_ouput)#隐藏层线性输出
self.predict=torch.nn.Linear(n_hidden,n_ouput)#输出层线性输出
def forward(self,x):#前向传递的过程
#正向传播输入值,神经网络输出预测值
x=F.relu(self.hidden(x))#激励函数加工一下
x=self.predict(x)#输出值预测值
return x
net=Net(n_feature=1,n_hidden=10,n_ouput=1)#输入值是一个,隐藏层有10个神经元,输出值为y值
print(net)
optimizer=torch.optim.SGD(net.parameters(),lr=0.5)#输入神经网络的所有参数,学习效率,这个是训练工具
loss_func=torch.nn.MSELoss()#误差处理均方差
plt.ion() # 画图
plt.show()
for t in range(200):#训练200次
prediction=net(x)#输入输入值
loss=loss_func(prediction,y)#计算误差预测值和真实值之间的误差,注意位置
optimizer.zero_grad()#梯度清零
loss.backward()#反向传递
optimizer.step()#优化梯度
# 接着上面来
if t % 5 == 0:
# plot and show learning process
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.numpy(), fontdict={'size': 20, 'color': 'red'})
plt.pause(0.1)
过程结果






中间过程省略一部分...

【pytorch】学习笔记(四)-搭建神经网络进行关系拟合的更多相关文章
- 莫烦PyTorch学习笔记(四)——回归
下面的代码说明个整个神经网络模拟回归的过程,代码含有详细注释,直接贴下来了 import torch from torch.autograd import Variable import torch. ...
- ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试
http://www.cnblogs.com/denny402/p/5852983.html ensorflow学习笔记四:mnist实例--用简单的神经网络来训练和测试 刚开始学习tf时,我们从 ...
- Go语言学习笔记四: 运算符
Go语言学习笔记四: 运算符 这章知识好无聊呀,本来想跨过去,但没准有初学者要学,还是写写吧. 运算符种类 与你预期的一样,Go的特点就是啥都有,爱用哪个用哪个,所以市面上的运算符基本都有. 算术运算 ...
- kvm虚拟化学习笔记(四)之kvm虚拟机日常管理与配置
KVM虚拟化学习笔记系列文章列表----------------------------------------kvm虚拟化学习笔记(一)之kvm虚拟化环境安装http://koumm.blog.51 ...
- MySql学习笔记四
MySql学习笔记四 5.3.数据类型 数值型 整型 小数 定点数 浮点数 字符型 较短的文本:char, varchar 较长的文本:text, blob(较长的二进制数据) 日期型 原则:所选择类 ...
- 官网实例详解-目录和实例简介-keras学习笔记四
官网实例详解-目录和实例简介-keras学习笔记四 2018-06-11 10:36:18 wyx100 阅读数 4193更多 分类专栏: 人工智能 python 深度学习 keras 版权声明: ...
- ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁
作者:Grey 原文地址: ZooKeeper学习笔记四:使用ZooKeeper实现一个简单的分布式锁 前置知识 完成ZooKeeper集群搭建以及熟悉ZooKeeperAPI基本使用 需求 当多个进 ...
- C#可扩展编程之MEF学习笔记(四):见证奇迹的时刻
前面三篇讲了MEF的基础和基本到导入导出方法,下面就是见证MEF真正魅力所在的时刻.如果没有看过前面的文章,请到我的博客首页查看. 前面我们都是在一个项目中写了一个类来测试的,但实际开发中,我们往往要 ...
- IOS学习笔记(四)之UITextField和UITextView控件学习
IOS学习笔记(四)之UITextField和UITextView控件学习(博客地址:http://blog.csdn.net/developer_jiangqq) Author:hmjiangqq ...
随机推荐
- template模板循环嵌套循环
template嵌套循环写法:在第一次循环里面需要循环的地方再写个循环,把要循环的数据对象改为第一层的循环对象别名 //template模板循环嵌套循环 <script id="ban ...
- HNOI2012矿场搭建
做完Mining Your Own Business后觉得这个题没什么意思了,数据范围小的连边数不清空都能A. 题解直接看这篇吧.做题的经历也挺……对吧. #include<iostream&g ...
- MQTT 连接服务端失败,报错客户机未连接(32104)
和同事协同开发项目,在启动项目时偶尔报错连接不到MQTT 服务器. 原因是两个人开发同一个项目,连接MQTT时配置的 client-id 相同,在使用一个client-id连接到MQTT服务器后,再使 ...
- 从输入url到页面加载完成都发生了什么
https://zhuanlan.zhihu.com/p/23155051 参考 一个http请求的过程 简要介绍一下一个http请求的网络传输过程: DNS Lookup先获得URL对应的IP地址( ...
- Druid连接池(无框架)
关于连接池有不少技术可以用,例如c3p0,druid等等,因为druid有监控平台,性能在同类产品中算top0的.所以我采用的事druid连接池. 首先熟悉一个技术,我们要搞明白,为什么要用他, 他能 ...
- ORA-39095: Dump file space has been exhausted
ORA-39095: Dump file space has been exhausted Table of Contents 1. 简述 2. 错误信息 3. 分析 4. 解决 5. 扩展 1 简述 ...
- 学习前端第一天心得体会(初步了解HTML5的新特性以及和HTML的区别)
一.HTML5是什么? HTML5 是最新的 HTML 标准. HTML5 是专门为承载丰富的 web 内容而设计的,并且无需额外插件. HTML5 拥有新的语义.图形以及多媒体元素. HTML5 提 ...
- springboot子模块 @Autowired无法找到其他模块的接口和类的解决方法
在main的启动类上添加 @SpringBootApplication(scanBasePackages = {"com.shangsheng"})或者@ComponentScan ...
- GitLab 架构
GitLab 架构官方文档 GitLab 中文文档 版本 一般使用的是社区版(Community Edition,CE),此外还有企业版(Enterprise Edition,EE)可以使用. EE ...
- 1031: [编程入门]自定义函数之字符串反转(python)
问题 1031: [编程入门]自定义函数之字符串反转 时间限制: 1Sec 内存限制: 128MB 提交: 7225 解决: 3331 题目描述 写一函数,使输入的一个字符串按反序存放,在主函数中输入 ...