网站框架布局,深圳网络营销收费标准,软件库,营销型网站建设工资在从0开始深度学习#xff08;5#xff09;——线性回归的逐步实现中#xff0c;我们手动编写了数据构造模块、损失函数模块、优化器等#xff0c;但是在现代深度学习框架下#xff0c;这些已经包装好了 本章展示如果利用深度学习框架简洁的实现线性回归 0 导入头文件 
im… 在从0开始深度学习5——线性回归的逐步实现中我们手动编写了数据构造模块、损失函数模块、优化器等但是在现代深度学习框架下这些已经包装好了 本章展示如果利用深度学习框架简洁的实现线性回归 0 导入头文件 
import random
import torch
import matplotlib.pyplot as plt
from torch.utils import data
import numpy as np
from torch import nn#nn是神经网络的缩写1 生成数据集 
和之前的数据一样 
def synthetic_data(w, b, num_examples):  #save生成yXwb噪声X  torch.normal(0, 1, (num_examples, len(w)))y  torch.matmul(X, w)  by  torch.normal(0, 0.01, y.shape)return X, y.reshape((-1, 1))true_w  torch.tensor([2, -3.4])# 真实的W是个二维张量
true_b  4.2# 真实的b
features, labels  synthetic_data(true_w, true_b, 1000)# 生成1000个点# 绘制散点图
plt.scatter(features[:, 0].numpy(), labels.numpy(), 1.0)
plt.xlabel(Feature)
plt.ylabel(Label)
plt.title(Scatter Plot of Generated Data)
plt.show()2 读取数据 
直接使用torch中的TensorDataset和DataLoader 。 
TensorDataset 是 PyTorch 中的一个类它将数据和对应的标签组合成一个数据集对象。DataLoader 是 PyTorch 提供的一个迭代器可以用来批量加载数据并且能够处理多线程数据读取、数据打乱等任务。 
# 读取数据
def load_data(data_array,batch_size):datasetdata.TensorDataset(*data_array)return data.DataLoader(dataset,batch_size,shuffleTrue)batch_size10
data_iterload_data((features,labels),batch_size)3 定义模型 
直接使用torch自带的神经网络中的全连接层全连接层和线性回归模型都使用线性变换来生成输出 所以可以用全连接层来实现线性回归 
net  nn.Sequential(nn.Linear(2, 1))
# 第一个参数是输出的特征形状第二个是输出的特征形状
# 因为我们的w是个二维向量所以这里的形状是24 初始化参数 
我们的函数是 y  w x  b ywxb ywxb所以有一个权重 w w w和偏置项 b b b 
#初始化权重通常情况下权重可以从一个正态分布中初始化这样可以确保权重的初始值既不是太大也不是太小有助于模型的收敛。
net[0].weight.data.normal_(0,0.01)# 从均值为 0、标准差为 0.01 的正态分布中初始化权重。
#初始化偏置项偏置通常初始化为 0
net[0].bias.data.fill_(0)5 定义损失函数和优化器 
之前是手写的这里我们可以直接使用torch自带的 
# 定义损失函数
lossnn.MSELoss()
#定义优化算法
trainertorch.optim.SGD(net.parameters(),lr0.01)
#第一个参数是指返回所有需要更新的参数第二个是学习率6 训练模型 
注意 每次都要初始化梯度为0避免梯度累积每次反向传播之前将梯度清零可以确保每次更新都是基于当前批次的数据 
total_epochs3
for epoch in range(total_epochs):for X,y in data_iter:# X是特征数据y是标签lloss(net(X),y)# 前向传播生成预测并计算损失trainer.zero_grad()# 初始化梯度l.backward()# 反向传播计算梯度trainer.step()# 调用优化器更新参数lloss(net(features),labels)print(fepoch {epoch  1}, loss {l:f})7 评估模型 
最后和我们的真实权重 w w w和偏置项 b b b做差观察差距 
w  net[0].weight.data
print(w的估计误差, true_w - w.reshape(true_w.shape))
b  net[0].bias.data
print(b的估计误差, true_b - b)