潍坊高端网站建设,电子商务网站有哪些功能,百度移动点击排名软件,企业网站的建立不能缺少哪些细节文章目录 一、线性模型二、实例1.pytorch求导功能2.简单线性模型#xff08;人工数据集#xff09; 来源 一、线性模型
一个简单模型#xff1a;假设一个房子的价格由卧室、卫生间、居住面积决定#xff0c;用x1#xff0c;x2#xff0c;x3表示。 那么房价y就可以认为yw… 文章目录 一、线性模型二、实例1.pytorch求导功能2.简单线性模型人工数据集 来源 一、线性模型
一个简单模型假设一个房子的价格由卧室、卫生间、居住面积决定用x1x2x3表示。 那么房价y就可以认为yw1x1w2x2w3x3bw为权重b为偏差。 第一步 线性模型可以看做是单层带权重的层是1层神经网络。 第二步 定义loss衡量预估质量真实值和预测值的差距 这里带1/2是方便求导的时候把2消去。 训练数据收集数据来决定权重和偏差 训练损失loss1/n∑[真实值-预测值xi和权重的内积-偏差平方]。目标是找到最小的loss 第三步优化 优化方法梯度下降。先挑选一个初值w0之后不断更新w0使他接近最优解。更新方法是wtwt-1 - 学习速率梯度。 Learning rate不能太小到达一个点要走很多步也不能太大一直震荡没有真的下降 在整个训练集上梯度下降太贵跑一次模型可能要数分钟/小时。所以采用小批量随机梯度下降随机采样b个样本用这b个样本来近似损失。b不能太大也不能太小
二、实例
1.pytorch求导功能
代码如下
# 自动求导
import torch
# 假设对函数y2xT x关于列向量求导
x torch.arange(4.0)
# 算y关于x的梯度之前需要一个地方来存储梯度
x.requires_grad_(True) # 等价于xtorch.arange(4.0,requires_gradTrue)
print(x.grad) # 默认值是None y关于x的导数存在这里y2*torch.dot(x,x)
y.backward() # 求导
print(x.grad)
print(x.grad4*x)# 在默认情况下PyTorch会累积梯度需要清除之前的值
x.grad.zero_()y x.sum()
y.backward()
print(x.grad)x.grad.zero_()
yx*x
uy.detach()# 把y当成常数而不是x的函数
zu*x
z.sum().backward()
print(x.gradu)2.简单线性模型人工数据集
代码如下
# 构建人工数据集好处是知道w和b
# 根据w[2,-3.4] b4.2 和噪声生成数据集和标签 yXwb噪声
import numpy as np
import torch
from torch import nn
from torch.utils import data# 生成数据
def synthetic_data(w, b, num_examples):生成yXwb噪声X np.random.normal(0, 1, (num_examples, len(w))) # 均值为0方差为1num_ex个样本,列数w的个数y np.dot(X, w) b # yXwby np.random.normal(0, 0.01, y.shape) # 加上随机噪音x1 torch.tensor(X, dtypetorch.float32) # 把np转化为torchy1 torch.tensor(y, dtypetorch.float32)return x1, y1.reshape((-1, 1)) # 列向量反馈# 读取数据
def load_array(data_arrays, batch_size, is_trainTrue):构造一个PyTorch数据迭代器dataset data.TensorDataset(*data_arrays)return data.DataLoader(dataset, batch_size, shuffleis_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# 定义lossmseloss类
loss nn.MSELoss()# 定义优化算法
trainer torch.optim.SGD(net.parameters(), lr0.03) # net.patameters():所有参数 lrlearning 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(fepoch {epoch 1}, loss {l:f}) 来源
b站 跟李沐学AI 动手学深度学习v2 08