线性回归从零实现

《李沐动手学深度学习》P30

import numpy as np
import matplotlib.pyplot as plt
import random# y = x * w + b + noise
# x dimension: (num_samples, 2)
# w dimension: (2, 1)
# b dimension: (1, 1)
# noise dimension: (num_samples, 1)
def generate_data(num_samples, w, b):x = np.random.rand(num_samples, 2)w = np.array(w).reshape(2, 1)b = np.array(b).reshape(1, 1)noise = np.random.normal(0, 0.01, (num_samples, 1))y = np.dot(x, w) + b + noisereturn x, ydef data_iter(x, y, batch_size):num_samples = len(x)indices = list(range(num_samples))random.shuffle(indices)for i in range(0, num_samples, batch_size):j = indices[i: min(i + batch_size, num_samples)]yield x[j], y[j]def model(x, w, b):return np.dot(x, w) + b# squared loss
def loss(y_hat, y):return np.mean((y_hat - y) ** 2) / 2# calculate the gradient of loss function
def gradient(x, y, y_hat):num_samples = len(x)dw = np.dot(x.T, (y_hat - y)) / num_samplesdb = np.sum(y_hat - y) / num_samplesreturn dw, dbdef sgd(params, grads, lr):for param, grad in zip(params, grads):param -= lr * grad # 注意这里不需要再除以bacth_size了,因为上面的gradient()已经对梯度做了平均def train(x, y, w, b, lr, batch_size, num_epochs):for epoch in range(num_epochs):for data, label in data_iter(x, y, batch_size):y_hat = model(data, w, b)l = loss(y_hat, label)dw, db = gradient(data, label, y_hat)sgd([w, b], [dw, db], lr)print('epoch %d, loss %f' % (epoch + 1, l))def main():num_samples = 1000x, y = generate_data(num_samples, [2, -3], 5)w = np.random.normal(0, 0.01, (2, 1))b = np.zeros((1, 1))lr = 0.1batch_size = 10num_epochs = 5train(x, y, w, b, lr, batch_size, num_epochs)print(w, b)if __name__ == '__main__':main()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/51181.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

汽车长翅膀:GPU 是如何加速深度学习模型的训练和推理过程的?

编者按:深度学习的飞速发展离不开硬件技术的突破,而 GPU 的崛起无疑是其中最大的推力之一。但你是否曾好奇过,为何一行简单的“.to(‘cuda’)”代码就能让模型的训练速度突飞猛进?本文正是为解答这个疑问而作。 作者以独特的视角&…

数仓架构解析(第45天)

系列文章目录 经典数仓架构传统离线大数据架构 文章目录 系列文章目录烂橙子-终生成长群群主前言1. 经典数仓架构2. 传统离线大数据架构 烂橙子-终生成长群群主 前言 经典数仓架构 传统离线大数据架构 背景解析 1. 经典数仓架构 1991年,比尔恩门(Bill…

Python 中 Caffe 库的使用方法

Caffe 是一个由伯克利视觉与学习中心 (Berkeley Vision and Learning Center, BVLC) 开发的深度学习框架。它特别适用于图像分类和图像分割任务。以下是一个关于如何使用 Caffe 库的详细指南,包括安装、配置、构建和训练模型的步骤。 1. 安装 Caffe 安装 Caffe 可以…

Pinokio:一键安装开源 AI 应用

整合了几乎所有市面上开源的 AI 工具傻瓜式地一键安装AI 工具支持全平台:Windows、Mac、Linux官网:https://pinokio.computer项目仓库:GitHub - pinokiocomputer/pinokio: AI Browser文章地址:https://blog.i68.ltd/archives/Pino…

牛客算法题解:数字统计、两个数组的交集、点击消除

目录 BC153 [NOIP2010]数字统计 ▐ 题解 NC313 两个数组的交集 ▐ 题解 AB5 点击消除 ▐ 题解 BC153 [NOIP2010]数字统计 题目描述: 题目链接: [NOIP2010]数字统计_牛客题霸_牛客网 (nowcoder.com) ▐ 题解 题目要求统计出某段数组中一共有多少个…

关于Buffer和Channel的注意事项和细节

1.举例 package org.example.demo;import java.io.FileNotFoundException; import java.io.IOException; import java.io.RandomAccessFile; import java.nio.MappedByteBuffer; import java.nio.channels.FileChannel; import java.util.RandomAccess;/*** MappedByteBuffer可…

Linux入门级常用命令行(二)

目录 1、mv指令 2、rm指令 3、通配符* 4、chmod指令 5、tar指令 1、mv指令 功能 用于移动或重命名文件和目录的命令 基本用法 mv [选项] 源文件或目录 目标文件或目录 常用选项 -i:在覆盖文件之前提示用户确认。-f:强制移动或重命名&#xff0…

动量参数(Momentum Parameter)

动量参数(Momentum Parameter)在机器学习中指的是一种用于加速梯度下降算法的技术,特别是深度学习中优化神经网络权重时。简单来说,动量参数是一种帮助优化过程加速并减少震荡的技术。 具体来说,动量参数具有以下特点…

网络编程——wireshark抓包、tcp粘包

目录 一、前言 1.1 什么是粘包 1.2 为什么UDP不会粘包 二、编写程序 文件树 客户端程序 服务器程序 tcp程序 头文件 makefile 三、 实验现象 四、改进实验 五、小作业 一、前言 最近在做网络芯片的驱动,验证功能的时候需要借助wireshark这个工具&…

猫头虎分享:Numpy知识点一文带你详细学习np.random.randn()

🐯 猫头虎分享:Numpy知识点一文带你详细学习np.random.randn() 摘要 Numpy 是数据科学和机器学习领域中不可或缺的工具。在本篇文章中,我们将深入探讨 np.random.randn(),一个用于生成标准正态分布的强大函数。通过详细的代码示…

Android Studio 一键删除 Recent Projects信息的方法

Android Studio打开项目多了就一堆最近项目的记录,在IDE里面只能一个个手动删除。 File - Recent Projects 解决方案:修改配置文件 Note:方法不唯一。 Android Studio 存储了一个包含最近打开项目信息的配置文件。通过手动编辑或删除recentP…

会员管理系统需求文档示例

1. 引言 目的: 本需求文档旨在明确会员管理系统的目标、功能和非功能性需求,以指导系统的设计、开发和测试过程。 背景: 随着公司业务的不断增长,我们需要一个高效、可靠的会员管理系统来帮助我们更好地管理客户关系、提高服务质…

科普文:kubernets原理

kubernetes 已经成为容器编排领域的王者,它是基于容器的集群编排引擎,具备扩展集群、滚动升级回滚、弹性伸缩、自动治愈、服务发现等多种特性能力。 本文将带着大家快速了解 kubernetes ,了解我们谈论 kubernetes 都是在谈论什么。 一、背…

详细介绍BIO、NIO、IO多路复用(select、poll、epoll)

BIO、NIO、IO多路复用 BIO(Blocking IO)NIO(Non-blocking IO) 同步非阻塞IOIO多路复用selectpollepoll Redis的IO多路复用 BIO(Blocking IO) 最基础的IO模型,当进行IO操作时,线程会被阻塞,直到操作完成。 比如read和write,通常IO…

Python的输入规则

Python的输入特别有意思,它和C的输入不一样,它的输入的原型是类似于C的string类型,但是对于一些有意思的算法题来说,光是读入string型的内容并不容易解题,于是我们可以从两个方面来将输入给转化。 1. 先使用函数input…

SGLang 大模型推理框架 qwen2部署使用案例;openai接口调用、requests调用

参考: https://github.com/sgl-project/sglang 纯python写,号称比vllm、tensorRT还快 暂时支持模型 安装 可以pip、源码、docker安装,这里用的pip 注意flashinfer安装最新版,不然会可能出错误ImportError: cannot import name ‘top_k_top_p_sampling_from_probs’ fr…

ConcurrentHashMap 和 Hashtable 的区别

ConcurrentHashMap 概念 ConcurrentHashMap 和 Hashtable 的区别主要体现在实现线程安全的方式上不同JDK1.7的 ConcurrentHashMap 底层采用 分段的数组链表 实现JDK1.8 采用的数据结构是数组链表红黑二叉树在JDK1.7的时候,ConcurrentHashMap(分段锁&…

EtherNet/IP转Profinet协议网关(经典配置案例)

怎么样才能把EtherNet/IP和Profinet网络连接起来呢?这几天有几个朋友问到了这个问题,作者在这里统一为大家详细说明一下。其实有一个设备可以很轻松地解决这个问题,名为JM-PN-EIP,下面是详细介绍。 一,设备主要功能 1、捷米特J…

LLMs之Hallucinations :《Extrinsic Hallucinations in LLMs》翻译与解读

LLMs之Hallucinations :《Extrinsic Hallucinations in LLMs》翻译与解读 导读: >> 背景和痛点:LLMs中的幻觉指生成不真实、虚构(或捏造)、不一致或无意义的内容。这种现象被称为幻觉(hallucination)。这种现象可…

nodepad++已打开的文件怎么按照字母/文字顺序排列?

nodepad已打开的文件怎么按照字母/文字顺序排列? 点击菜单栏 “窗口” -> “排序方式” (可选择升序或降序)