参考: https://github.com/Iallen520/lhy_DL_Hw/blob/master/PyTorch_Introduction.ipynb

模拟一个回归模型,y = X * w + 随机数

如,y : n*1矩阵, X : n*2矩阵 , w : 1,2矩阵

设置true_w = [[-1.0], [2.0]] , 随机初始化w 比如[[1.0], [0.0]],目标是拟合出正确的w

代码如下:

#自己写一个test case
import torch d = 2
n = 50
X = torch.randn(n,d)
true_w = torch.tensor([[-1.0], [2.0]])
y = X @ true_w + torch.randn(n,1) * 0.1
print('X shape', X.shape)
print('y shape', y.shape)
print('w shape', true_w.shape) print(X.shape)
print(true_w.shape) #w = torch.rand(2,1, requires_grad = True)
w = torch.tensor([[1.],[0]], requires_grad= True)
print("w:", w) print('iter,\tloss,\tw')
for i in range(20):
loss = torch.norm(y - torch.matmul(X,w))**2 / n loss.backward() w.data = w.data - 0.1 * w.grad print('{},\t{:.2f},\t{}'.format(i, loss.item(), w.view(2).detach().numpy())) w.grad.zero_() print('\ntrue w\t\t', true_w.view(2).numpy())
print('estimated w\t', w.view(2).detach().numpy())
X shape torch.Size([50, 2])
y shape torch.Size([50, 1])
w shape torch.Size([2, 1])
torch.Size([50, 2])
torch.Size([2, 1])
w: tensor([[1.],
[0.]], requires_grad=True)
iter, loss, w
0, 6.20, [0.7062541 0.32114884]
1, 4.45, [0.45446268 0.59016734]
2, 3.20, [0.2387764 0.81564814]
3, 2.30, [0.05413117 1.0047431 ]
4, 1.65, [-0.10385066 1.1634098 ]
5, 1.19, [-0.23894812 1.2966142 ]
6, 0.86, [-0.3544196 1.4084985]
7, 0.62, [-0.4530713 1.5025208]
8, 0.45, [-0.5373176 1.5815694]
9, 0.32, [-0.60923356 1.6480589 ]
10, 0.24, [-0.6706013 1.7040086]
11, 0.17, [-0.7229501 1.7511086]
12, 0.13, [-0.76759106 1.7907746 ]
13, 0.09, [-0.8056477 1.8241924]
14, 0.07, [-0.8380821 1.8523566]
15, 0.05, [-0.86571765 1.8761011 ]
16, 0.04, [-0.8892586 1.8961263]
17, 0.03, [-0.90930706 1.91302 ]
18, 0.02, [-0.9263775 1.9272763]
19, 0.02, [-0.9409093 1.9393103] true w [-1. 2.]
estimated w [-0.9409093 1.9393103]

出错点:

1.初始化tensor时,要为float,否则容易报错

2. 初始化时设置 requires_grad = True

3. 定义的loss要在for循坏之内

4. 要用w.data不用w,否则报错,可能和pytorch初始化有关

5. w.grad.zero_()  注意这个写法

1、pytorch写的第一个Linear模型(原始版,不调用nn.Modules模块)的更多相关文章

  1. 2、pytorch——Linear模型(最基础版,理解框架,背诵记忆)(调用nn.Modules模块)

    #define y = X @ w import torch from torch import nn #第一模块,数据初始化 n = 100 X = torch.rand(n,2) true_w = ...

  2. Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)

    JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式                      (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...

  3. GAN实战笔记——第三章第一个GAN模型:生成手写数字

    第一个GAN模型-生成手写数字 一.GAN的基础:对抗训练 形式上,生成器和判别器由可微函数表示如神经网络,他们都有自己的代价函数.这两个网络是利用判别器的损失记性反向传播训练.判别器努力使真实样本输 ...

  4. Pytorch写CNN

    用Pytorch写了两个CNN网络,数据集用的是FashionMNIST.其中CNN_1只有一个卷积层.一个全连接层,CNN_2有两个卷积层.一个全连接层,但训练完之后的准确率两者差不多,且CNN_1 ...

  5. pytorch入门2.1构建回归模型初体验(模型构建)

    pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...

  6. 详解Pytorch中的网络构造,模型save和load,.pth权重文件解析

    转载:https://zhuanlan.zhihu.com/p/53927068 https://blog.csdn.net/wangdongwei0/article/details/88956527 ...

  7. 【小白学PyTorch】1 搭建一个超简单的网络

    文章目录: 目录 1 任务 2 实现思路 3 实现过程 3.1 引入必要库 3.2 创建训练集 3.3 搭建网络 3.4 设置优化器 3.5 训练网络 3.6 测试 1 任务 首先说下我们要搭建的网络 ...

  8. 手写数字识别 ----Softmax回归模型官方案例注释(基于Tensorflow,Python)

    # 手写数字识别 ----Softmax回归模型 # regression import os import tensorflow as tf from tensorflow.examples.tut ...

  9. Anaconda+django写出第一个web app(二)

    今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题.内容和发 ...

随机推荐

  1. List/Set 泛型转换

    Type typeSet = new TypeToken<Set<Long>>() {}.getType(); Type typeList = new TypeToken< ...

  2. JavaScript变量污染

    定义过多的全局变量,有可能造成全局变量冲突,这种现象称为变量污染. 全局变量在全局作用域内外都是可见的.若是已经声明了一个全局变量,再以相同的关键字和标识符重新声明全局变量,后者的赋值会替代前者的赋值 ...

  3. 【JVM第五篇--运行时数据区】方法区

    写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.栈.堆.方法区的关系 虚拟机运行时的数据区如下所示: 即方法区是属于线程共享的内 ...

  4. 剑指offer刷题(算法类_1)

    斐波那契数列 007-斐波拉契数列 题目描述 题解 代码 复杂度 008-跳台阶 题目描述 题解 代码 复杂度 009-变态跳台阶 题目描述 题解 代码 复杂度 010-矩形覆盖 题目描述 题解 代码 ...

  5. mysql语句的书写顺序和执行顺序

    mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left jo ...

  6. 06、MyBatis 逆向工程

    1.MyBatis逆向简介   mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.x ...

  7. tp5 统一返回json格式

    控制器调用 public function json(){ if (request()->isPost()) { return jsonData(1,'转换成功',数据(可不填)); } } 公 ...

  8. mac中怎么完成移动硬盘分区这个操作

    移动硬盘在出厂时只有一个区,不方便我们存储和查阅文件,移动硬盘分区可以防止硬盘发生错误,以免造成资料丢失,也可以防止产生无用文件. 移动硬盘基本上都是用Windows系统进行分区的,但是现在很多人使用 ...

  9. 「CSP-S 2019」格雷码

    [题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...

  10. 蓝桥杯——快速排序(2018JavaB组第5题9分)

    快速排序(18JavaB5,9') 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. impo ...