(3)深度学习学习笔记-简单线性模型

news/2024/2/28 2:06:05

文章目录

  • 一、线性模型
  • 二、实例
    • 1.pytorch求导功能
    • 2.简单线性模型(人工数据集)
  • 来源


一、线性模型

一个简单模型:假设一个房子的价格由卧室、卫生间、居住面积决定,用x1,x2,x3表示。
那么房价y就可以认为y=w1x1+w2x2+w3x3+b,w为权重,b为偏差。
第一步
在这里插入图片描述
线性模型可以看做是单层(带权重的层是1层)神经网络。
在这里插入图片描述
第二步:
定义loss,衡量预估质量:真实值和预测值的差距
在这里插入图片描述
这里带1/2是方便求导的时候把2消去。
训练数据:收集数据来决定权重和偏差
训练损失:loss=1/n∑[(真实值-预测值(xi和权重的内积-偏差))平方]。目标是找到最小的loss
在这里插入图片描述
第三步:优化
优化方法:梯度下降。先挑选一个初值w0,之后不断更新w0使他接近最优解。更新方法是wt=wt-1 - 学习速率
梯度。
在这里插入图片描述
Learning rate不能太小(到达一个点要走很多步),也不能太大(一直震荡没有真的下降)
在这里插入图片描述
在这里插入图片描述
在整个训练集上梯度下降太贵,跑一次模型可能要数分钟/小时。所以采用小批量随机梯度下降,随机采样b个样本用这b个样本来近似损失。b不能太大也不能太小
在这里插入图片描述

二、实例

1.pytorch求导功能

代码如下:

# 自动求导
import torch
# 假设对函数y=2xT x关于列向量求导
x = torch.arange(4.0)
# 算y关于x的梯度之前,需要一个地方来存储梯度
x.requires_grad_(True)  # 等价于x=torch.arange(4.0,requires_grad=True)
print(x.grad)  # 默认值是None y关于x的导数存在这里y=2*torch.dot(x,x)
y.backward() # 求导
print(x.grad)
print(x.grad==4*x)# 在默认情况下,PyTorch会累积梯度,需要清除之前的值
x.grad.zero_()y = x.sum()
y.backward()
print(x.grad)x.grad.zero_()
y=x*x
u=y.detach()# 把y当成常数而不是x的函数
z=u*x
z.sum().backward()
print(x.grad==u)

2.简单线性模型(人工数据集)

代码如下:

# 构建人工数据集(好处是知道w和b)
# 根据w=[2,-3.4] b=4.2 和噪声生成数据集和标签 y=Xw+b+噪声
import numpy as np
import torch
from torch import nn
from torch.utils import data# 生成数据
def synthetic_data(w, b, num_examples):"""生成y=Xw+b+噪声"""X = np.random.normal(0, 1, (num_examples, len(w)))  # 均值为0,方差为1,num_ex个样本,列数=w的个数y = np.dot(X, w) + b  # y=Xw+by += np.random.normal(0, 0.01, y.shape)  # 加上随机噪音x1 = torch.tensor(X, dtype=torch.float32)  # 把np转化为torchy1 = torch.tensor(y, dtype=torch.float32)return x1, y1.reshape((-1, 1))  # 列向量反馈# 读取数据
def load_array(data_arrays, batch_size, is_train=True):"""构造一个PyTorch数据迭代器"""dataset = data.TensorDataset(*data_arrays)return data.DataLoader(dataset, batch_size, shuffle=is_train)  # shuffle:是否需要随机打乱true_w = torch.tensor([2, -3.4])
true_b = 4.2
features, labels = synthetic_data(true_w, true_b, 1000)batch_size = 10
data_iter = load_array((features, labels), batch_size)
# 使用iter构造Python迭代器,并使用next从迭代器中获取第一项。
print(next(iter(data_iter)))# 定义模型
# nn是神经网络的缩写
net = nn.Sequential(nn.Linear(2, 1))  # 输入维度是2 输出是1 sequential相当于一个list of layer# 初始化参数 net[0]访问这个layer
net[0].weight.data.normal_(0, 0.01)  # normal:使用正态分布替换weight的值,均值为0,方差为0.01
net[0].bias.data.fill_(0)  # bias直接设为0# 定义loss:mseloss类
loss = nn.MSELoss()# 定义优化算法
trainer = torch.optim.SGD(net.parameters(), lr=0.03)  # net.patameters():所有参数  ,lr:learning rate# 训练
num_epochs = 3
for epoch in range(num_epochs):  # 对所有数据扫一遍for X, y in data_iter:  # 拿出一个批量大小的x和yl = loss(net(X), y)  # x和y的小批量损失trainer.zero_grad()  # 梯度清零l.backward()  # 计算梯度trainer.step()  # 模型更新l = loss(net(features), labels)  # 计算损失print(f'epoch {epoch + 1}, loss {l:f}')

来源

b站 跟李沐学AI 动手学深度学习v2 08


http://www.ppmy.cn/news/635425.html

相关文章

用python写一个麻将游戏

嗯,写一个麻将游戏的Python代码并不是什么困难的事情。首先,你需要准备一些基本的Python编程知识,然后写出一个基本的麻将游戏框架,包括设置游戏规则和定义玩家的行为。接着,你需要制作一些麻将牌,实现游戏…

麻将的规则是什么?

转自https://www.zhihu.com/question/50126080

给麻将游戏算番数

麻将游戏越来越受到大家喜爱,也在网络上盛行。本题目是给定一组已经和牌的麻将,编写一个函数计算这组麻将的番数。 为简化题目,假设麻将只有筒子和条子两种花型,能翻番的规则也只有以下三种,当一组牌中没有下述三种情况…

麻将游戏-协议实现 笔记

协议分为 Header 和 Body Header 中主要存储版本号、请求 ID、命令字,这里的命令字又可以称为操作码或者序列化类型等 主要是用来反查 Body 的真正类型,对于每一条消息,它们的命令字必须保证唯一性。 因此,我们可以定义协议如下…

扑克牌游戏

扑克牌游戏&#xff0c;比大小。分为两个类。 第一个创造扑克牌的内容&#xff1a; package abount_collection.poke_game; public class PokeCard implements Comparable<PokeCard> { public int rank; public String suit; public PokeCard(int rank,St…

四川麻将胡牌算法

其中char *as1 "1W1W2T2D3W3W5W5W7W7W8W8W9W9W"; char *as2 "1W1W1W2W3W4W4W5W6W7W8W9W9W9W"; 主要思想是&#xff1a; 1&#xff09;给牌分组&#xff0c;并排序&#xff1b;检查是否打缺了&#xff0c;只有缺了一门才能胡牌哦&#xff1b; 在排序的时…

[麻将] 麻将的一些概率计算

麻将的一些概率计算 文章目录 麻将的一些概率计算骰子开牌摸牌和牌加码和牌买码 本文所用麻将规则是笔者家族内部的规则 庄家为一位, 庄家的下家为二位, 二位的下家为三位, 三位的下家为四位, 四位的下家为庄家. 骰子 开局前庄家投两个骰子开牌, 大的确定牌墙, 两个的和确定墩…

麻将游戏(mahjong)题解

题目描述&#xff1a; 在一种"麻将"游戏中&#xff0c;游戏是在一个有wh格子的矩形平板上进行的。每个格子可以放置一个麻将牌&#xff0c;也可以不放&#xff08;如图所示&#xff09;。玩家的目标是将平板上的所有可通过一条路径相连的两张相同的麻将牌&#xff0…

手机麻将java开发_2019手机麻将游戏是怎么开发出来的

现在的手机麻将游戏市场只要有地方资源就能做&#xff0c;进入门槛非常低。那么2019手机麻将游戏是怎么开发出来的? 1、撰写基本设计文档。在编写程序前&#xff0c;你可以撰写一些关于开发过程的文档。设计文档需要列出程序目标&#xff0c;并详细描述程序功能。这些文档可以…

多人麻将 开始游戏 (后台)

当客户端所有人都进入大厅&#xff0c;并且都点了准备完毕 按钮&#xff0c;那么服务器这边就触发开始游戏 RoomLogic类 /*** 开始一回合新的游戏*/private void startGameRound(){if(count < 0){//房间次数用完了,通知所有玩家for (Avatar avatar : playerList) {try {ava…

麻将游戏 题解

麻将游戏 题目 在一种"麻将"游戏中&#xff0c;游戏是在一个有W&#xff0a;H格子的矩形平板上进行的。每个格子可以放置一个麻将牌&#xff0c;也可以不放&#xff08;如图所示&#xff09;。玩家的目标是将平板上的所有可通过一条路径相连的两张相同的麻将牌&…

长沙麻将

长沙麻将共108张牌面&#xff0c;包括筒索万&#xff0c;不带东西南北风和中发白&#xff0c;和其它地方麻将相比增加了四喜、板板胡、六六顺、缺一色四种牌型。结合“扎鸟”后让长沙麻将变得更加刺激与独特&#xff0c;适合大众文化娱乐。 摸牌规则 游戏开始只有庄家可摸14张…

java写的麻将小游戏

过年回家在家打麻将&#xff0c;觉得蛮有趣的&#xff0c;就用java写了一个麻将小游戏&#xff08;没有界面&#xff0c;只能在控制台玩&#xff09;。 说明&#xff1a; 使用语言&#xff1a;java&#xff08;jdk1.7&#xff09;开发工具&#xff1a;eclipse项目集成&#x…

麻将番型计算(二人麻将)

上一篇文章序数了关于使用索引查表法进行麻将胡牌判定&#xff0c;这篇文章&#xff0c;我们将会对胡牌的番型进行计算&#xff0c;这里的番型指的是国标下的麻将番型&#xff0c;文章中的代码&#xff0c;暂时只考虑了二人麻将&#xff08;只有万牌和字牌&#xff09;&#xf…

微信小游戏开发-麻将游戏界面(一)

界面效果如下&#xff1a; 主程序入口问game.js import ./js/libs/weapp-adapter import ./js/libs/symbolimport Main from ./js/main console.log(GameGlobal) GameGlobal.wsServerUrl "ws://127.0.0.1:7397"; GameGlobal.httpServerUrl "http://127.0.0.1…

实现简单的麻将游戏

实现简单的麻将游戏 描述&#xff1a;实现功能点实现麻将的准备牌、洗牌、发牌、看牌知识点集合知识项目思路思路介绍Icon麻将的功能需求分析 具体规则&#xff1a; 组装136张麻将条、筒、万加到一起的数目是108张东、西、南、北风、红中、白皮、发财是28张&#xff0c;总共…

麻将游戏设计

这几天断断续续的在写代码&#xff0c;时间有点碎片化&#xff0c;所以并没有跟进这里的东西。 原本也只是进行简单的记录&#xff0c;所以不重要啦&#xff08;手动微笑&#xff09;&#xff0c;这几天的东西改来改去有点混乱这里先记录一下进度&#xff0c;过几天有时间进行…

麻将游戏

题目 在一种"麻将"游戏中&#xff0c;游戏是在一个有W&#xff0a;H格子的矩形平板上进行的。每个格子可以放置一个麻将牌&#xff0c;也可以不放&#xff08;如图所示&#xff09;。玩家的目标是将平板上的所有可通过一条路径相连的两张相同的麻将牌&#xff0c;从平…

麻将游戏算法深入解析

以此文奠我那些年中无意删除而删除的代码工程&#xff0c;另&#xff1a;本工作室承接棋牌算法研发合作业务&#xff0c;有兴趣可联系本QQ&#xff1a;285421210或微信honghaier_game 欢迎加入红孩儿【麻将研发】群&#xff1a; 605024890 敬请关注微信共众号&#xff1a;红孩儿…

四人麻将 java版下载_四人麻将下载-四人打麻将免费版手机最新下载

四人麻將創新結合國標麻將和四川省血液之戰多種玩法&#xff0c;花式魔幻的國家標准番型和胡牌&#xff0c;連胡不斷的血流成河&#xff0c;一站到底的血流成河&#xff0c;讓你high爆整場爽翻天。點卷送不斷&#xff0c;開展活動更有手機話費、手機等豐富獎賞! 四人麻將特色&a…
最新文章