1、pytorch写的第一个Linear模型(原始版,不调用nn.Modules模块)
参考: 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模块)的更多相关文章
- 2、pytorch——Linear模型(最基础版,理解框架,背诵记忆)(调用nn.Modules模块)
#define y = X @ w import torch from torch import nn #第一模块,数据初始化 n = 100 X = torch.rand(n,2) true_w = ...
- Online Coding开发模式 (通过在线配置实现一个表模型的增删改查功能,无需写任何代码)
JEECG 智能开发平台. 开发模式由代码生成器转变为Online Coding模式 (通过在线配置实现一个表模型的增删改查功能,无需一行代码,支持用户自定义 ...
- GAN实战笔记——第三章第一个GAN模型:生成手写数字
第一个GAN模型-生成手写数字 一.GAN的基础:对抗训练 形式上,生成器和判别器由可微函数表示如神经网络,他们都有自己的代价函数.这两个网络是利用判别器的损失记性反向传播训练.判别器努力使真实样本输 ...
- Pytorch写CNN
用Pytorch写了两个CNN网络,数据集用的是FashionMNIST.其中CNN_1只有一个卷积层.一个全连接层,CNN_2有两个卷积层.一个全连接层,但训练完之后的准确率两者差不多,且CNN_1 ...
- pytorch入门2.1构建回归模型初体验(模型构建)
pytorch入门2.x构建回归模型系列: pytorch入门2.0构建回归模型初体验(数据生成) pytorch入门2.1构建回归模型初体验(模型构建) pytorch入门2.2构建回归模型初体验( ...
- 详解Pytorch中的网络构造,模型save和load,.pth权重文件解析
转载:https://zhuanlan.zhihu.com/p/53927068 https://blog.csdn.net/wangdongwei0/article/details/88956527 ...
- 【小白学PyTorch】1 搭建一个超简单的网络
文章目录: 目录 1 任务 2 实现思路 3 实现过程 3.1 引入必要库 3.2 创建训练集 3.3 搭建网络 3.4 设置优化器 3.5 训练网络 3.6 测试 1 任务 首先说下我们要搭建的网络 ...
- 手写数字识别 ----Softmax回归模型官方案例注释(基于Tensorflow,Python)
# 手写数字识别 ----Softmax回归模型 # regression import os import tensorflow as tf from tensorflow.examples.tut ...
- Anaconda+django写出第一个web app(二)
今天开始建立App中的第一个Model,命名为Tutorial. Model的定义在main文件夹下的models.py中通过类进行,我们希望Tutorial这个model包含三个属性:标题.内容和发 ...
随机推荐
- List/Set 泛型转换
Type typeSet = new TypeToken<Set<Long>>() {}.getType(); Type typeList = new TypeToken< ...
- JavaScript变量污染
定义过多的全局变量,有可能造成全局变量冲突,这种现象称为变量污染. 全局变量在全局作用域内外都是可见的.若是已经声明了一个全局变量,再以相同的关键字和标识符重新声明全局变量,后者的赋值会替代前者的赋值 ...
- 【JVM第五篇--运行时数据区】方法区
写在前面的话:本文是在观看尚硅谷JVM教程后,整理的学习笔记.其观看地址如下:尚硅谷2020最新版宋红康JVM教程 一.栈.堆.方法区的关系 虚拟机运行时的数据区如下所示: 即方法区是属于线程共享的内 ...
- 剑指offer刷题(算法类_1)
斐波那契数列 007-斐波拉契数列 题目描述 题解 代码 复杂度 008-跳台阶 题目描述 题解 代码 复杂度 009-变态跳台阶 题目描述 题解 代码 复杂度 010-矩形覆盖 题目描述 题解 代码 ...
- mysql语句的书写顺序和执行顺序
mysql语句的书写顺序和执行顺序有很大差异. 书写顺序,mysql的一般书写顺写为: select <要返回的数据列> from <表名> <join, left jo ...
- 06、MyBatis 逆向工程
1.MyBatis逆向简介 mybatis需要程序员自己编写sql语句,mybatis官方提供逆向工程,可以针对单表自动生成mybatis执行所需要的代码(mapper.java.mapper.x ...
- tp5 统一返回json格式
控制器调用 public function json(){ if (request()->isPost()) { return jsonData(1,'转换成功',数据(可不填)); } } 公 ...
- mac中怎么完成移动硬盘分区这个操作
移动硬盘在出厂时只有一个区,不方便我们存储和查阅文件,移动硬盘分区可以防止硬盘发生错误,以免造成资料丢失,也可以防止产生无用文件. 移动硬盘基本上都是用Windows系统进行分区的,但是现在很多人使用 ...
- 「CSP-S 2019」格雷码
[题目描述] 传送门 [题解] 题目中已经清楚地告诉你怎么用n位格雷码推n+1位格雷码, 直接二叉树模拟即可 注意要使用unsigned long long(如果这道题没有95分部分分,不知道有多少人 ...
- 蓝桥杯——快速排序(2018JavaB组第5题9分)
快速排序(18JavaB5,9') 以下代码可以从数组a[]中找出第k小的元素. 它使用了类似快速排序中的分治算法,期望时间复杂度是O(N)的. 请仔细阅读分析源码,填写划线部分缺失的内容. impo ...