用Tensorflow进行线性回归和逻辑回归(九)

用TensorFlow训练线性和逻辑回归模型

这一节结合前面介绍的所有TensorFlow概念来训练线性和逻辑回归模型,使用玩具数据集。

用TensorFlow训练模型

假如我们指明了数据点和标签的容器,定义了张量操作的损失函数。添加了优化器节点到计算图,它可以用来计算梯度下降。我们如何重复进行梯度下降来学习数据集呢?

答案是用Python for-循环。代码块 Example 3-10说明这个简单的学习过程。注意为了简化教学我们不使用 minibatches 。后面训练大数据集时会用minibatches

使用TensorFlow的线性回归

这一节我们用Tensor‐Flow 定义线性回归,并学习它的权重。任务很直接,你可以不用TensorFlow完成。但是,使用TensorFlow 是很好的练习因为它可以将我们学习过的概念一起使用。

用TensorFlow定义和训练线性回归

线性回归模型很简单:

y = wx + b

这里 w 和 b 是我们要学习的权重。我们转换这些权重至tf.Variable对象。然后用张量操作来构建损失函数 L2 loss:

ℒ( x, y)=( y − wx − b) 2

List3-24的代码用TensorFlow实现这些数学操作。添加tf.train.AdamOp 优化器来学习以及tf.summary操作来合用TensorBoard。

#List3-24. Defining a linear regression model

#定义模型函数

def model(x,w,b):

    return tf.multiply(x,w)+b

def loss_fun(x,y,w,b):

    err = model(x,w,b)-y

    squared_err = tf.square(err)

    return tf.reduce_mean(squared_err)

def grad(x,y,w,b):

    with tf.GradientTape() as tape:

        loss_ = loss_fun(x,y,w,b)

    return tape.gradient(loss_,[w,b])

List3-25 训练模型 (不用 minibatches).

#List3-25. Training the linear regression model

w = tf.Variable(np.random.randn(),tf.float32)

b = tf.Variable(0.0,tf.float32)

#设置迭代次数和学习率

train_epochs = 100

learning_rate = 0.01

loss = []

y_pred=[]

count = 0

display_count = 10 #控制显示粒度的参数,每训练10个样本输出一次损失值

#开始训练,轮数为epoch,采用SGD随机梯度下降优化方法

for epoch in range(train_epochs):

    for xs,ys in zip(x_np,y_np):

        #计算损失,并保存本次损失计算结果

        #rand_index = np.random.choice(100)

        #rand_x = tf.cast([x_vals[rand_index]],dtype=tf.float32)

        #rand_y =  tf.cast([y_vals[rand_index]],dtype=tf.float32)

        loss_ =loss_fun(xs,ys,w,b)

        loss.append(loss_)

        #计算当前[w,b]的梯度

        delta_w,delta_b = grad(xs,ys,w,b)

        change_w = delta_w * learning_rate

        change_b = delta_b * learning_rate

        w.assign_sub(change_w)

        b.assign_sub(change_b)

        #训练步数加1

        count = count +1

        if count % display_count == 0:

            print('train epoch : ','%02d'%(epoch+1),'step:%03d' % (count),'loss= ','{:.9f}'.format(loss_))

为线性回归取梯度

线性回归模型的方程为 y = wx + b

其中 w, b是可学习权重。我们前面提过,这个系统的损失是 ℒ =( y − wx − b)2。可以用上些矩阵微积分来计算可学习参数的梯度:

                 

以及

                   

这些方程仅给有好奇心读者参考。我们不会系统的教如何求损失函数的微分。

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

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

相关文章

使用 vue vxe-table 实现复选框禁用,根据行规则来禁用是否允许被勾选选中

使用 vue vxe-table 实现复选框禁用,根据行规则来禁用是否允许被勾选选中 查看官网:https://vxetable.cn 禁用选中 通过 checkMethod 方法控制 checkbox 是否允许用户手动勾选,如果被禁用,可以调用 setCheckboxRow 方法手动设置…

【Linux-网络】深入拆解TCP核心机制与UDP的无状态设计

🎬 个人主页:谁在夜里看海. 📖 个人专栏:《C系列》《Linux系列》《算法系列》 ⛰️ 道阻且长,行则将至 目录 📚引言 📚一、UDP协议 📖 1.概述 📖 2.特点 &#x1…

(nice!!!)(LeetCode 每日一题) 2081. k 镜像数字的和 (枚举)

题目:2081. k 镜像数字的和 思路:枚举10进制的回文串,然后来判断对应的k进制数是否是回文串。直到有n个满意即可。 而枚举10进制的回文串,从基数p(1、10、100… )开始,长度为奇数的回文串,长度为偶数的回文…

Java面试题027:一文深入了解数据库Redis(3)

Java面试题025:一文深入了解数据库Redis(1) Java面试题026:一文深入了解数据库Redis(2) 本节我们整理一下Redis高可用和消息队列使用场景的重点原理,让大家在面试或者实际工作中遇到这类问题时…

算法打卡 day4

4 . 高精度算法 性质:数组或者容器从低位往高位依次存储大整数,方便进位。 4.1 高精度加法 给定两个正整数(不含前导 0),计算它们的和。 输入格式 共两行,每行包含一个整数。 输出格式 共一行,…

【笔记】Docker 配置阿里云镜像加速(公共地址即开即用,无需手动创建实例)

2025年06月25日记 【好用但慎用】Windows 系统中将所有 WSL 发行版从 C 盘迁移到 非系统 盘的完整笔记(附 异常处理)-CSDN博客 【笔记】解决 WSL 迁移后 Docker 出现 “starting services: initializing Docker API Proxy: setting up docker ap” 问题…

day35-Django(1)

day35-Django 3.2 前言 之前我们介绍过web应用程序和http协议,简单了解过web开发的概念。Web应用程序的本质 接收并解析HTTP请求,获取具体的请求信息处理本次HTTP请求,即完成本次请求的业务逻辑处理构造并返回处理结果——HTTP响应import socketserver = socket.socket() …

PostgreSQL全栈部署指南:从零构建企业级高可用数据库集群

PostgreSQL全栈部署指南:从零构建企业级数据库集群 前言: 本文详解了**PostgreSQL**所有的部署方式,如 yum 安装、源码编译安装、RPM包手动安装,以及如何选择适合的安装方式。适合不同的场景应用。通过高可用部署详细了解安装思路及过程,包括内网环境下的配置、主节点的创…

MQTT 和 HTTP 有什么本质区别?

MQTT 和 HTTP 的本质区别在于它们设计的初衷和核心工作模式完全不同。它们是为解决不同问题而创造的两种工具。 简单来说: HTTP 就像是去图书馆问问题:你(客户端)主动去找图书管理员(服务器),…

GtkSharp跨平台WinForm实现

文章目录 跨平台架构设计跨平台项目配置GtkSharp串口通讯实现跨平台部署配置Linux系统配置macOS系统配置 相关学习资源GTK#跨平台开发跨平台.NET开发Linux开发环境macOS开发环境跨平台UI框架对比容器化部署开源项目参考性能优化与调试 跨平台架构设计 基于GTKSystem.Windows.F…

【闲谈】对于c++未来的看法

对于C未来看法 C 作为一门诞生于上世纪的编程语言,在软件工业发展史上扮演了不可替代的角色。尽管近年来诸如 Rust、Go、Swift、Kotlin 等现代语言相继崛起,C 依然在系统软件、高性能服务、嵌入式等关键领域中发挥着主力作用。本文将从 C 的当前应用前景…

【论文】云原生事件驱动架构在智能风控系统中的实践与思考

摘要 2023年6月至2024年3月,我作为某头部证券公司新一代极速交易系统的首席架构师,主导设计并落地了基于云原生事件驱动架构的全新交易风控平台。该项目旨在攻克原有系统无法支撑峰值20万笔/秒交易量、风控延迟超过3秒以及行情剧烈波动时系统崩溃等核心痛点。通过构建以Kube…

opensbi从0到1入门学习

最近要在RV64的平台上把Linux给bringup起来,由于当下的工作主要集中在底层硬件接口驱动、CPU的操作及RTOS应用等,虽然之前搞过Arm Linux的开发工作,但是比较基础的玩的比较少,所以真正要搞把系统bringup起来,我之前的知…

Python打卡:Day36

复习日 浙大疏锦行

开发过程中的时空权衡:如何优雅地平衡时间与空间效率

文章目录 恒的开发者困境一、理解时间与空间的基本概念1. 时间复杂度2. 空间复杂度 二、时空权衡的基本原则1. 硬件环境决定优先级2. 应用场景决定策略3. 数据规模的影响 三、实际开发中的权衡策略1. 缓存为王:用空间换时间2. 压缩数据:用时间换空间3. 预…

RAG 应用实战指南:从商业目标到系统落地与运营 E2E 实践

专栏入口 前言 在当今信息爆炸的时代,如何高效地从海量数据中提取有用信息并提供智能问答服务,成为众多企业关注的焦点。检索增强生成(Retrieval-Augmented Generation, RAG)技术以其结合了检索模型的精准性和生成模型的灵活性&a…

关于晨脉的概念解释

晨脉(Resting Morning Pulse)是指​​人体在清晨清醒后、未进行任何活动前​​,于卧床状态下测量的每分钟脉搏或心率次数。它反映了人体在无运动消耗、无神经干扰时的基础代谢状态,是评估心脏功能、身体恢复情况及运动适应性的重要…

自然语言处理入门

一、概念 自然语言处理(Natural Language Processing, 简称NLP)是计算机科学与语言中关注于计算机与人类语言间转换的领域。 二、发展史 2012年:深度学习的崛起 Word2Vec的提出(Mikolov等,2013年正式发表&#xff0c…

【算法 day12】LeetCode 226.翻转二叉树 |101. 对称二叉树 |104.二叉树的最大深度|111.二叉树的最小深度

226.翻转二叉树 (前序,后序) 题目链接 | 文档讲解 |视频讲解 : 链接 1.思路: 翻转的是指针,不是数值 前序遍历和后序遍历都可以 中序不行,中序遍历的顺序是左中右,反转左指针后,到根节点,…

Spring Boot 整合 Swagger3 如何生成接口文档?

前后端分离的项目,接口文档的存在十分重要。与手动编写接口文档不同,swagger是一个自动生成接口文档的工具,在需求不断变更的环境下,手动编写文档的效率实在太低。与新版的swagger3相比swagger2配置更少,使用更加方便。…