当前位置: 首页 > news >正文

1.线性神经网络--线性回归

1.1 从零实现线性回归

import random
import torch
#from d2l import torch as d2l
import matplotlib.pyplot as plt
def train_data_make(batch_size,X,y):num_examples=len(X)idx=list(range(num_examples))#生成0-999random.shuffle(idx)#样本需要打乱for i in range(0,num_examples,batch_size):batch_idx=torch.tensor(idx[i:min(i+batch_size,num_examples)])yield X[batch_idx],y[batch_idx]#生成器语句
def linear_reg(X,w,b):return torch.matmul(X,w)+b
def mse_loss(y_pred,y):return (y_pred-y)**2/2
def sgd(params, lr, batch_size):  with torch.no_grad():for param in params:param -= lr * param.grad / batch_sizeparam.grad.zero_()
#生成数据
def make_data(w,b,num_exmamples):"y=wx+b+e"X=torch.normal(0,1,(num_exmamples,len(w)))y=torch.matmul(X,w)+b y+=torch.normal(0,0.01,y.shape)return X,y.reshape((-1,1))#-1直接推到出模型的大小
#生成训练数据
w1=torch.tensor([2,-3.4])
b1=torch.tensor([4.2])
X,y=make_data(w1,b1,1000)
#初始化参数
batch_size=10
num_epochs=300
lr=0.05
w = torch.normal(0, 0.01, size=(2,1), requires_grad=True)
b = torch.zeros(1, requires_grad=True)for epoch in range(num_epochs):for X,y in train_data_make(batch_size,X,y):loss=mse_loss(linear_reg(X,w,b),y)loss.sum().backward()sgd([w,b],lr,batch_size)with torch.no_grad():trian_loss=mse_loss(linear_reg(X,w,b),y)print(f"epoch {epoch+1}|Loss {float(trian_loss.mean()):.4f}|w:[{float(w[0]):.4f},{float(w[1]):.4f}]|b:[{float(b):.4f}]")print(f'w的估计误差: {w1 - w.reshape(w1.shape)}')
print(f'b的估计误差: {b1- b}')
print(f"最终的线性回归表达式:F(X1,X2)={float(w[0]):.4f}X1{float(w[1]):.4f}X2+{float(b):.4f}")

1.2 简洁实现线性回归

import numpy as np
import torch
from torch.utils import data
import matplotlib.pyplot as plt
def make_data(w,b,num_exmamples):"y=wx+b+e"X=torch.normal(0,1,(num_exmamples,len(w)))y=torch.matmul(X,w)+b y+=torch.normal(0,0.01,y.shape)return X,y.reshape((-1,1))#-1直接推到出模型的大小
def load_data(data_arrays,batch_size,is_Train=True):dataset=data.TensorDataset(*data_arrays)return data.DataLoader(dataset,batch_size,shuffle=is_Train)
##########################################################################################
batch_size=10   
num_epochs=10
w1=torch.tensor([2,-3.4])
b1=torch.tensor([4.2])
X,y=make_data(w1,b1,1000)
dataset=load_data((X,y),batch_size,is_Train=True)
loss=nn.MSELoss()
model=nn.Sequential(nn.Linear(2,1))
model[0].weight.data.normal_(0,0.01)#第一层的w服从正态分布
model[0].bias.data.fill_(0)#第一层的bias赋值为0
optimizer=torch.optim.SGD(model.parameters(),lr=0.05)
###########################################################################################
for epoch in range(num_epochs):for X_train,y_train in dataset:train_loss=loss(model(X_train),y_train)optimizer.zero_grad()train_loss.backward()optimizer.step()all_loss=loss(model(X),y)print(f"epoch {epoch+1}|Loss {float(all_loss):.6f}")
###########################################################################################
wr0=model[0].weight[0,0].item()
wr1=model[0].weight[0,1].item()
b0=model[0].bias[0].item()
print(f'w的估计误差: {w1 - model[0].weight}')
print(f'b的估计误差: {b1- model[0].bias}')
print(f"最终的线性回归表达式:F(X1,X2)={float(wr0):.4f}X1{float(wr1):.4f}X2+{float(b0):.4f}")
http://www.lryc.cn/news/581468.html

相关文章:

  • 华为云 银河麒麟 vscode远程连接
  • 前端开发问题:SyntaxError: “undefined“ is not valid JSON
  • Flutter 每日翻译之 Widget
  • Vue+Openlayers加载OSM、加载天地图
  • java学习——guava并发编程练习
  • 【Guava】1.0.设计虚拟机的方向
  • 第一个Flink 程序:词频统计 WordCount(流处理)
  • LeetCode--41.缺失的第一个正数
  • 《Redis》缓存与分布式锁
  • AGV选型指南:AGV智能搬运车智能问答系统助力从技术参数到供应商选择的完整方案
  • Flutter 项目开启 UI 层级虚线(UI Guides)
  • 深度学习篇---简单果实分类网络
  • JAVA 项目找不到符号
  • 零依赖Web数据管理系统:midb轻松管理
  • Node.js EventEmitter 深入解析
  • 数据挖掘:从理论到实践的深度探索
  • C++学习之STL学习:list的模拟实现
  • DTW模版匹配:弹性对齐的时间序列相似度度量算法
  • 处理GET请求:在Web开发中如何处理GET请求
  • 【C语言指南】深入剖析 C 语言递归函数
  • 爬虫-浏览器工具简介
  • ch03 部分题目思路
  • Qt实战:使用QSqlDatabase连接MySQL,并实现增删改查
  • 使用Python将PDF转换成word、PPT
  • 网络编程底层通信(socket)
  • 人工智能安全基础复习用:隐私保护
  • 力扣网编程45题:跳跃游戏II之正向查找方法(中等)
  • 群晖(Synology)存储ext4视频文件删除的恢复方法
  • 基于Pandas和FineBI的昆明职位数据分析与可视化实现(五) - 基于随机森林算法预测职位分类
  • MySQL主从复制与读写分离概述