搭建网络的步骤大致为以下:

1.准备数据

2. 定义网络结构model

3. 定义损失函数
4. 定义优化算法 optimizer
5. 训练
  5.1 准备好tensor形式的输入数据和标签(可选)
  5.2 前向传播计算网络输出output和计算损失函数loss
  5.3 反向传播更新参数
    以下三句话一句也不能少:
    5.3.1 optimizer.zero_grad()  将上次迭代计算的梯度值清0
    5.3.2 loss.backward()  反向传播,计算梯度值
    5.3.3 optimizer.step()  更新权值参数
  5.4 保存训练集上的loss和验证集上的loss以及准确率以及打印训练信息。(可选
6. 图示训练过程中loss和accuracy的变化情况(可选)
7. 在测试集上测试

代码注释都写的很详细

 import torch
import torch.nn.functional as F
import matplotlib.pyplot as plt # 1.准备数据 generate data
x=torch.unsqueeze(torch.linspace(-1,1,100),dim=1)
print(x.shape)
y=x*x+0.2*torch.rand(x.size())
#显示数据散点图
plt.scatter(x.data.numpy(),y.data.numpy()) # 2.定义网络结构 build net
class Net(torch.nn.Module):
#n_feature:输入特征个数 n_hidden:隐藏层个数 n_output:输出层个数
def __init__(self,n_feature,n_hidden,n_output):
# super表示继承Net的父类,并同时初始化父类的参数
super(Net,self).__init__()
# nn.Linear代表线性层 代表y=w*x+b 其中w的shape为[n_hidden,n_feature] b的shape为[n_hidden]
# y=w^T*x+b 这里w的维度是转置前的维度 所以是反的
self.hidden =torch.nn.Linear(n_feature,n_hidden)
self.predict =torch.nn.Linear(n_hidden,n_output)
print(self.hidden.weight)
print(self.predict.weight)
#定义一个前向传播过程函数
def forward(self, x):
# n_feature n_hidden n_output
#举例(2,5,1) 2 5 1
# - ** -
# ** - - - ** - -
# - ** - - - **
# ** - - - ** - -
# - ** -
# 输入层 隐藏层 输出层
x=F.relu(self.hidden(x))
x=self.predict(x)
return x
# 实例化一个网络为net
net = Net(n_feature=1,n_hidden=10,n_output=1)
print(net)
# 3.定义损失函数 这里使用均方误差(mean square error)
loss_func=torch.nn.MSELoss()
# 4.定义优化器 这里使用随机梯度下降
optimizer=torch.optim.SGD(net.parameters(),lr=0.2)
#定义300遍更新 每10遍显示一次
plt.ion()
# 5.训练
for t in range(100):
prediction = net(x) # input x and predict based on x
loss = loss_func(prediction, y) # must be (1. nn output, 2. target)
# 5.3反向传播三步不可少
optimizer.zero_grad() # clear gradients for next train
loss.backward() # backpropagation, compute gradients
optimizer.step() # apply gradients if t % 10 == 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.show()
plt.pause(0.1) plt.ioff()

参考:莫烦python

pytorch基础-搭建网络的更多相关文章

  1. pytorch基础(4)-----搭建模型网络的两种方法

    方法一:采用torch.nn.Module模块 import torch import torch.nn.functional as F #法1 class Net(torch.nn.Module): ...

  2. Pytorch从0开始实现YOLO V3指南 part2——搭建网络结构层

    本节翻译自:https://blog.paperspace.com/how-to-implement-a-yolo-v3-object-detector-from-scratch-in-pytorch ...

  3. pytorch搭建网络,保存参数,恢复参数

    这是看过莫凡python的学习笔记. 搭建网络,两种方式 (1)建立Sequential对象 import torch net = torch.nn.Sequential( torch.nn.Line ...

  4. TCP/IP协议(一)网络基础知识 网络七层协议

    参考书籍为<图解tcp/ip>-第五版.这篇随笔,主要内容还是TCP/IP所必备的基础知识,包括计算机与网络发展的历史及标准化过程(简述).OSI参考模型.网络概念的本质.网络构建的设备等 ...

  5. PyTorch对ResNet网络的实现解析

    PyTorch对ResNet网络的实现解析 1.首先导入需要使用的包 import torch.nn as nn import torch.utils.model_zoo as model_zoo # ...

  6. [人工智能]Pytorch基础

    PyTorch基础 摘抄自<深度学习之Pytorch>. Tensor(张量) PyTorch里面处理的最基本的操作对象就是Tensor,表示的是一个多维矩阵,比如零维矩阵就是一个点,一维 ...

  7. 【新生学习】第一周:深度学习及pytorch基础

    DEADLINE: 2020-07-25 22:00 写在最前面: 本课程的主要思路还是要求大家大量练习 pytorch 代码,在写代码的过程中掌握深度学习的各类算法,希望大家能够坚持练习,相信经度过 ...

  8. 使用pytorch快速搭建神经网络实现二分类任务(包含示例)

    使用pytorch快速搭建神经网络实现二分类任务(包含示例) Introduce 上一篇学习笔记介绍了不使用pytorch包装好的神经网络框架实现logistic回归模型,并且根据autograd实现 ...

  9. 001-深度学习Pytorch环境搭建(Anaconda , PyCharm导入)

    001-深度学习Pytorch环境搭建(Anaconda , PyCharm导入) 在开始搭建之前我们先说一下本次主要安装的东西有哪些. anaconda 3:第三方包管理软件. 这个玩意可以看作是一 ...

随机推荐

  1. diango中的MTV——FBV/CBV以及装饰器的复用问题解决

    MVC M: model 模型 与数据库交互 V: view 视图 HTML C:controller 控制器 流程 和 业务逻辑 MTV M:model ORM T:template 模板 HTML ...

  2. openldap数据备份还原

    数据备份[root@Server ~]# slapcat -n 2 -l /root/ldapbackup_ilanni.ldif脚本 ----- #!/bin/bash # 备份脚本 PATH=&q ...

  3. OpenGL 之 Compute Shader(通用计算并行加速)

    平常我们使用的Shader有顶点着色器.几何着色器.片段着色器,这几个都是为光栅化图形渲染服务的,OpenGL 4.3之后新出了一个Compute Shader,用于通用计算并行加速,现在对其进行介绍 ...

  4. 13. java String类

    一.字符串类 /* java.lang.String类代表字符串 程序中所有的双引号字符串,都是String类的对象.就算没有new 字符串中的内容,永不变:不可变 字符串效果上相当于是char[]字 ...

  5. git版本对比

    1.git diff版本比对 (未添加到暂存区间之前的区别对比) 未进行修改,则显示为空 进行文件修改,再执行git diff 当执行git add .  之后,再次git diff则为空 缓存和提交 ...

  6. C++ explicit关键字,修饰构造函数,ctor

    #include <iostream> // operator Type() 类型操作符重载 // operator int() // operator double() // ... / ...

  7. 转载-C语言中<<、>>、&、|的实际用途

    C语言中<<.>>.&.|的实际用途 作为一个开发人员,在看别人项目或者看第三方库的源代码时,可能经常会看到譬如a>>4&0x0f这样的写法,对于一 ...

  8. IT兄弟连 HTML5教程 CSS3揭秘 CSS常见的样式属性和值1

    CSS中的样式属性比较多,经常使用的属性可以分为这么几类:字体.文本.背景.位置.边框.列表,以及其他一些样式属性.每个类中的属性都可以单独使用:如果同一个类中多个属性一起使用,还可以将它们整合为一行 ...

  9. PHP 开发工程师基础篇 - PHP 数组

    数组 (Array) 数组是 PHP 中最重要的数据类型,可以说是掌握数组,基本上 PHP 一大半问题都可以解决. PHP 数组与其他编程语言数组概念不一样.其他编程语言数组是由相同类型的元素(ele ...

  10. C# loop executed one by one wait the former completed

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...