从函数到神经网络
一、从函数到神经网络
所有一切的前提是,你要相信这个世界上的所有逻辑和知识,都可以用一个函数来表示。Functions describe the world !
比如输入物体的质量和加速度,根据牛顿第二定律,就可以得到物体施加的力,这就是人工智能早期的思路:符号主义。
但这条路走到头了,很多问题人类实在是想不出怎么写成一个明确的函数。比如说一个简简单单的识别,一张图片是否是猫对人类来说可能简单到爆炸,但是要让计算机运行一段程序来识别,一下子就变成了一个史诗级难题,就连有着明确语法规则和词典的翻译函数尚且没有办法做到足够丝滑,更别说复杂多变的人类智能了。
既然不知道这个函数长什么样,怎么办呢?换个思路:
假如我们一开始没有找到这个规律,我们先把这个x、y放到坐标轴上,先随便猜一下。比如说函数关系就是y等于x,也就是这里的w和b分别是一和零,然后我们一点点调整这个w和b,使得这条直线越来越贴近真实数据。
刚刚我们举的例子比较简单,只用直线方程就可以表示了。但假如数据稍稍变化一下,就会发现,不论怎么调整都无法接近真实的数据,这个时候就需要从原来的线性函数进化到非线性函数了,我们就来研究一下,怎么把原来这个原本线性的函数变成非线性的呢?
很简单,在这个函数最外层再套一个非线性的运算就可以了。比如平方、比如sin(wx+b)、比如e^wx+b,这就是激活函数。
它的目的就是把原本死气沉沉的线性关系给盘活了,变成了变化能力更强的非线性关系。
回到这个新的函数形式,我们之前仅仅有一个输入的变量就是x,但实际上可能有很多输入。所以这里的每一个x都要对应一个w,像这样:
再者,有的时候只套一层激活函数,还是没有办法达到很好的效果。也就是说这个曲线弯的还不够灵活,这要怎么办?
我们在此基础之上再进行一次线性变换,然后再套上一个激活函数,这样就可以无限的套娃下去了。通过这样的方式,我们就可以构造出非常非常复杂的线性关系,而且理论上可以逼近任意的连续函数。当然了,这样写下去实在是太让人头大了,普通人看个两层,估计脑子就炸了,所以我们得换一种更傻瓜的、更直观的形式,我们把这样一个线性变换套一个激活函数 画成下面这样:
左边是输入层,只有输入x,右边是输出层,只有一个输出y。我们把这里的每一个小圈圈叫做一个神经元。
每套一层就相当于神经元水平方向又扩展了一个。当然扩展之后,中间这一层就不再是最终的输出了,而是包裹在了一个很复杂的函数变换之中看不到,我们管它叫做隐藏层,而整个神经元互相连接形成的网络结构,就叫做神经网络。
好,接下来我们看一下函数和神经网络的对应关系。首先有两个输入变量,一个是x1,另一个是x2,它们构成了输入层,然后x1、x2二进行一次线性变换,再进行一次激活函数就得到了隐藏层a,这个a对应的就是上面这一大坨表达式,我们把它当做一个整体,继续进行一次线性变换和一次激活函数,这就计算出了最终的输出层y。从神经网络的这个图来看的话,似乎就像是一个信号,从左到右传播了过去,这个过程就叫做神经网络的前向传播。实际上就是一点点分步骤,把一个函数的值计算出来了而已。
神经网络的每一层神经元都可以无限增加。同时,隐藏层的层数也可以无限增加,进而就可以构成一个非常非常复杂的非线性函数了。虽然这个函数可能非常复杂,但是我们的目标却非常简单和明确,就是根据已知的一组x和y的值,猜出所有w和b各是多少。
神经网络训练过程示例:
举个最简单的2维例子,即2个隐藏层神经元。将词放入神经网络输入层,神经通道上用权重w和偏置b进行线性变换,激活函数用最简单的f(x)=x。
然后同样经过线性变换+激活函数到达输出层,想要预测下一个词的概率 ,输出前直接通过一个softmax激活函数将4个输出转化为0-1之前的概率,且总和为1,最大概率就是我们的结果。
二、如何计算神经网络参数
上面解释了神经网络的本质,其实就是线性变换,套上一个非线性激活函数,不断组合,对应就是一个非常复杂的非线性函数,计算出这里的w和b。
先从最简单的线性函数入手, 每个点上的数据是真实数据,落在直线上的点表示预测数据,那么这条线段的长度就是真实值与预测值的误差。
为了评估整体的拟合效果,我们可以将所有这些线段的长度相加,得到真实数据与预测数据的总误差,这个函数就叫所示函数。
然而,这个绝对值在数学优化时不太友好,那么改造下用平方来代替,既解决了绝对值不平滑的问题,也放大了误差较大的值的影响。然后我们再根据样本的数量平均一下,消除样本数量大小的影响,最终得到的公式即均方误差。
前面我们为了找到一组w和b来拟合真是数据,定义了损失函数。下面要做的就是制定让损失函数最小这个目标来计算w和b的值。
求解的方法,要用到的就是初中学过的知识,让其导数等于0,求极值点的过程。
举个简单的例子,线性模型只保留一个w:
代入损失函数:
化简后就是一个简单的关于w的二次函数,接下来对w求导,让其导数等于0,就可以求出w=1。
刚刚的步骤其实就在寻找这条抛物线的最低点。如果再加上b,损失函数图像就是1个三维图像。而多元函数求最小值的问题就不再是导数了,而是要让每个参数的偏导数等于0来求解。
在三维图像中,就是对应w和b两个切面上的二维函数来求导。这里不再展开。
通过寻找一个线性函数来拟合x和y的关系,就是机器学习中的最基本分析方法–线性回归。
具体的,每次调整一点w或b数值,使得损失函数会变化多少,这其实就是损失函数对w或b的偏导数。
我们要做的就是不断往偏导数的反方向去变化,具体变化的快慢,用一个系数来控制,叫做学习率,这些偏导数构成的向量叫做梯度。调整w或b数值,让损失函数逐渐减小,最终得到w和b值的过程,就叫做梯度下降。
那么现在关键就在于这个偏导数怎么求。之前的线性回归问题中,偏导数就是一个一元二次函数求导,非常简单。但是在神经网络中,层数较多,函数本身就是一个及其复杂的非线性函数,更别说损失函数了,直接求偏导数非常困难。
虽然神经网络整体代表的函数很复杂,但是层与层之间的关系还是很简单的,现在关键问题就是求出l对它们的偏导数。我们可以逐层求导,比如w1变化一个单位,看a变化多少,再看a变化一个单位,y变化多少,再看y变化一个单位,l变化多少,每一个都是一个简单的偏导数,那把三者乘起来,就可以得到w变化一个单位,会使l变化多少了。
这种偏导数的计算方式,就是链式法则。其实就是微积分中的复合函数求导。
由于我们可以通过链式法则从右往左依次求导,逐步更新每一层的参数,直到把所有神经网络的参数都更新一遍,在计算前一层时,用到的一些偏导数的值,后面也会用到,并不用全部计算,而是让这些值从右往左一点点传播过来就好了,这个过程就叫做 反向传播。
总结前面的知识,我们通过前向传播,根据输入x计算输出y,然后再通过反向传播,计算出损失函数关于每个参数的梯度,每个参数都向着梯度的反方向变化一点点。不断地前向传播、反向传播,这就构成了神经网络的训练过程。
参考:https://space.bilibili.com/325864133
相关文章:
从函数到神经网络
一、从函数到神经网络 所有一切的前提是,你要相信这个世界上的所有逻辑和知识,都可以用一个函数来表示。Functions describe the world ! 比如输入物体的质量和加速度,根据牛顿第二定律,就可以得到物体施加的力,这就是…...
Python 字符串格式化 print
Python 字符串格式化 print flyfish 1. 使用百分号(%)操作符进行字符串格式化 百分号(%)操作符是 Python 中比较传统的字符串格式化方式,它的使用方式类似于 C 语言中的 printf 函数。 # 格式化整数 num 10 print…...
LabVIEW 中的 Bluetooth.llb 库
Bluetooth.llb 库位于C:\Program Files (x86)\National Instruments\LabVIEW 2019\vi.lib\Platform目录,它是 LabVIEW 平台下用于蓝牙通信相关操作的重要库。该库为 LabVIEW 开发者提供了一系列工具,用于实现设备间的蓝牙连接、数据传输与交互等功能&…...
MySQL | MySQL库、表的基本操作01
MySQL库、表的基本操作01 一、库操作1.1 查看数据库1.2 创建数据库1.3 选择数据库1.4 查看创建数据库的SQL语句1.5 修改数据库1.6 删除数据库 二、表操作2.1 创建数据表2.2 查看表2.3 查看表结构2.4 查看创建数据库的SQL语句2.5 修改表2.6 删除表 ⚠️MySQL版本 8.0 一、库操作…...
抖音试水AI分身;腾讯 AI 战略调整架构;百度旗下小度官宣接入DeepSeek...|网易数智日报
抖音试水AI分身,字节旗下AI智能体平台扣子已与抖音打通,相关功能内测中 2月19日消息,钛媒体App独家获悉,字节旗下AI智能体开发平台扣子(Coze)已与抖音打通,抖音创作者可在扣子智能体平台打造AI分…...
RPC 框架项目剖析
RPC 框架项目剖析 说明 本文用于梳理一个 rpc项目的实现细节,此项目基于cpp语言 大概三千行左右,用于学习目的。 项目链接:rpc项目 项目底层类 1.抽象消息类 描述: 各种消息的基类 属性: 消息id,消息类型…...
前端 fetch API 调用 Tushare 的数据接口获取免费的基金股票信息数据
要在前端使用 JavaScript 的 fetch API 调用 Tushare 的数据接口,您需要遵循以下步骤: 1. 注册 Tushare 账号并获取 Token 首先,访问 Tushare 官网 注册账号。注册成功后,登录账号,在个人中心获取您的 API Token。 …...
【SpringMVC】十分钟跑起来一个SpringMVC项目
目录标题 1 项目概述1.项目结构解析2. MVC项目的结构和每个组件的作用:3. 项目的工作流程:4 后期可以扩展的点:2.源码学习1. HelloController 类,Spring MVC控制器2 springmvc-servlet.xml - Spring MVC的主要配置文件3.web 目录 …...
LeetCode 热题 100 11. 盛最多水的容器
LeetCode 热题 100 | 11. 盛最多水的容器 大家好,今天我们来解决一道经典的算法题——盛最多水的容器。这道题在LeetCode上被标记为中等难度,要求我们找到两条垂线,使得它们与 x 轴共同构成的容器可以容纳最多的水。下面我将详细讲解解题思路…...
Web自动化之Selenium实战案例1:论文pdf自动下载
在上一篇文章中,我们介绍了Selenium的基础用法和一些常见技巧。今天,我们将通过中国科学:信息科学网站内当前目录论文下载这一实战案例来进一步展示Selenium的web自动化流程。 目录 中国科学:信息科学当期目录论文下载 1.网页内…...
在VSCode中接入deepseek
注册就送14元2000万tokens。 https://cloud.siliconflow.cn/i/rnbA6i6U各种大模型 下面介绍我是如如接入vscode的 左边生成一个key,呆会vscode要用,不然401. 打开vscod,电脑能上网。下插件。 下好要配置 点它一下。 要配置,全…...
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望
CentOS停服后的替代选择:openEuler、Rocky Linux及其他系统的未来展望 引言CentOS停服的背景华为openEuler:面向未来的开源操作系统1. 简介2. 特点3. 发展趋势 Rocky Linux:CentOS的精神继承者1. 简介2. 特点3. 发展趋势 其他可选的替代系统1…...
vector的模拟实现
目录 一、构造和析构函数 二、插入删除访问迭代器 三、迭代器失效 四、拷贝构造和赋值 五、tip 一、构造和析构函数 namespace stn {template<class T>class vector{typedef T* iterator;public:vector():_start(nullptr);, _end(nullptr), _endofstorage(nullptr){…...
【高可用】keepalived的试用与学习笔记
版本日期修订人描述V1.02025/2/23nick huang创建文档 背景 最近,预研给现有的Nginx单点实例添加故障转移的功能,以备单实例故障时无法快速恢复。 本文记录Keepalived的学习笔记,供自己或同学日后参考。 Keepalived Keepalived是一个开源的…...
在Dify中实现联网检索功能(模拟DeepSeek)
跟着上一篇博客:Error response from daemon: Get “https://registry-1.docker.io/v2/“: request canceled while的解决办法-CSDN博客 DeepSeek发布之后,感觉联网检索功能变成标配了。这篇博客简单介绍一下怎么在Dify中配置初步的联网检索功能&#x…...
Deepseek-强化学习算法(通俗易懂版)
首先先贴一张Deepseek核心技术的梳理图: 上图详细了讲述了Deepseek主要在哪些阶段用了强化学习方法(GRPO) 1.GRPO算法 GRPO是一种用于提高语言模型推理能力的强化学习算法。它在DeepSeekMath论文中,在数学推理的背景下被提出。G…...
[展示]Webrtc NoiseSuppressor降噪模块嵌入式平台移植
最近在尝试把WebRtc的NoiseSuppressor模块移植到嵌入式平台,现在已经移植了,尝试了下效果,降噪效果很显著,噪声带被显著抑制了 降噪前: 降噪后:...
了解 RAG 第二部分:经典 RAG 的工作原理
在本系列的第一篇文章中,我们介绍了检索增强生成 (RAG) ,解释了扩展传统大型语言模型 (LLM)功能的必要性。我们还简要概述了 RAG 的核心思想:从外部知识库检索上下文相关的信息,以确保 LLM 生成准确且最新的信息,而不会…...
剖析IO原理和零拷贝机制
目录 1 Linux的五种IO模型1.1 模型调用的函数1.1.1 recv函数1.1.2 select函数1.1.3 poll函数1.1.4 epoll函数1.1.5 sigaction函数 1.2 IO模型1.2.1 阻塞IO模型1.2.2 非阻塞IO模型1.2.3 IO复用模型1.2.4 信号驱动IO模型1.2.5 异步IO模型1.2.6 IO模型比较 2 Java的BIO、NIO、AIO2…...
【论文精读】MapTR:用于在线矢量化高精地图构建的结构化建模与学习
论文地址: MAPTR: STRUCTURED MODELING AND LEARNING FOR ONLINE VECTORIZED HD MAP CONSTRUCTION 源代码:MapTR 摘要 High-definition(HD Map)map为自动驾驶场景提供了丰富且精确的环境信息,是自动驾驶系统规划中不…...
云图库平台(五)——后端图片模块开发
目录 一、需求分析二、库表设计三、图片的处理如何实现图片的上传和下载创建图片的业务流程如何对图片进行解析 四、创建并使用对象存储五、后端操作对象存储初始化客户端通用能力类文档上传文件下载 一、需求分析 管理员功能: 图片的上传和创建:仅管理…...
Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置
Linux红帽:RHCSA认证知识讲解(一)RedHat背景与环境配置 前言一、RedHat公司背景二、RedHat环境安装步骤三、windows使用远程工具连接环境并上传文件到redhat方法: 前言 在接下来的博客中,我们从基础开始将介绍红帽Linu…...
【Linux】基于UDP/TCP套接字编程与守护进程
目录 一、网路套接字编程 (一)基础概念 1、源IP地址与目的IP地址 2、端口号 3、TCP与UDP 4、网络字节序 (二)套接字编程接口 1、socket 常见API 2、sockaddr结构 (三)UDP套接字 1、UDP服务器创建…...
Linux CentOS 上 Ollama 的安装与部署:从入门到实践
Linux CentOS 上 Ollama 的安装与部署:从入门到实践 随着人工智能技术的快速发展,大语言模型(LLMs)的应用场景越来越广泛。Ollama 作为一个轻量级的 AI 模型管理工具,为开发者提供了便捷的模型部署和管理解决方案。本文将详细介绍如何在 Linux CentOS 系统上安装和部署 O…...
大数据学习之任务流调度系统Azkaban、Superset可视化系统
一.任务流调度系统Azkaban 1.课程介绍 2.为什么需要工作流调度系统 3.AZKABAN是什么 4.AZKABAN下载 5.制作安装包 6.tar包准备 7.MYSQL配置AZKABAN 8.配置EXECUTOR SERVER 9.配置WEBSERVER 10.单作业实战_yaml语言(今天稍晚更新) 11.单作业实战 12.多作业依赖实战 13.失败自动重…...
网络空间安全(2)应用程序安全
前言 应用程序安全(Application Security,简称AppSec)是一个综合性的概念,它涵盖了应用程序从开发到部署,再到后续维护的整个过程中的安全措施。 一、定义与重要性 定义:应用程序安全是指识别和修复应用程序…...
UDP、TCP的区别
UDP(用户数据报协议)和TCP(传输控制协议)是两种常用的传输层协议,它们在数据传输方式、可靠性和应用场景等方面有显著区别。以下是它们的主要区别: ### 1. 连接方式 - **TCP**:面向连接。通信前…...
Linux 第二次脚本作业
1、需求:判断192.168.1.0/24网络中,当前在线的ip有哪些,并编写脚本打印出来。 2、设计一个 Shell 程序,在/userdata 目录下建立50个目录,即 user1~user50,并设置每个目录的权限,其中其他用户的权…...
高清下载油管视频到本地
下载工具并安装: yt-dlp官网地址: GitHub - yt-dlp/yt-dlp: A feature-rich command-line audio/video downloader ffmpeg官网地址: Download FFmpeg 注:记住为其添加环境变量 操作命令: 该指令表示以720p码率下载VIDEO_UR…...
Linux 命令大全完整版(07)
2. linux 系统设置命令 ulimit 功能说明:控制 shell 程序的资源。语法:ulimit [-aHS][-c <core 文件上限>][-d <数据节区大小>][-f <文件大小>][-m <内存大小>][-n <文件数目>][-p <缓冲区大小>][-s <堆叠大小…...
基于CentOS7安装kubesphere和Kubernetes并接入外部ES收集日志
一、修改所有节点主机名 主节点就修改成master hostnamectl set-hostname master 然后输入bash刷新当前主机名 工作节点1就修改成node1 hostnamectl set-hostname node1 然后输入bash刷新当前主机名 二、全部节点安装依赖并同步时间 yum -y install socat conntrack ebta…...
Javascript网页设计案例:通过PDFLib实现一款PDF分割工具,分割方式自定义-完整源代码,开箱即用
功能预览 一、工具简介 PDF 分割工具支持以下核心功能: 拖放或上传 PDF 文件:用户可以通过拖放或点击上传 PDF 文件。两种分割模式: 指定范围:用户可以指定起始页和结束页,提取特定范围的内容。固定间距:用户可以设置间隔页数(例如每 5 页分割一次),工具会自动完成分…...
高速差分信号的布线
差分信号如何在PCB上布线? 1.差分信号必须保证线间距相等,禁止打过孔或者放置元器件 2.差分信号必须打孔时,必须要保证伴随屏蔽地过孔(缝合定位孔),减少信号干扰问题。 3.差分信号走线弯曲位置推荐&#…...
用openresty和lua实现壁纸投票功能
背景 之前做了一个随机壁纸接口,但是不知道大家喜欢对壁纸的喜好,所以干脆在实现一个投票功能,让用户给自己喜欢的壁纸进行投票。 原理说明 1.当访问http://demo.com/vote/时,会从/home/jobs/webs/imgs及子目录下获取图片列表&…...
智能测试执行 利用算法 利用图像识别、自然语言处理等技术实现自动化测试执行
以下将从Web应用和移动应用两个方面,给出利用图像识别、自然语言处理等技术实现自动化测试执行的实例,并附上部分代码示例。 Web应用自动化测试实例:模拟用户登录操作测试 需求理解 对于一个Web应用的登录功能进行自动化测试,我们可以结合自然语言处理理解测试用例描述,…...
AI学习之-阿里天池
阿里天池(Tianchi)是阿里巴巴集团旗下的一个数据科学与人工智能竞赛平台,致力于推动数据科学和人工智能的发展。在天池平台上,人们可以参与各种数据竞赛和挑战,解决实际问题,提升数据科学技能。天池平台提供…...
AGI觉醒假说的科学反驳:从数学根基到现实约束的深度解析
文章目录 引言:AGI觉醒论的核心迷思一、信息论视角:意识产生的熵约束1.1 香农熵的物理极限1.2 量子退相干的时间屏障二、数学根基:形式系统的自指困境2.1 哥德尔不完备定理的现代诠释三、概念解构:AGI觉醒假说的认知陷阱3.1 术语混淆的迷雾3.2 拟人化谬误的认知根源四、意识…...
SpringMVC的基本使用
controller标记一个类是控制器类 RequestMapping 进行路由映射可以是类也可以是方法,路由的/可以不加,但建议加上 1)简单的映射返回一个hello RequestMapping("/m1")public String m1() { return "hello";} 2&#x…...
【漫话机器学习系列】103.学习曲线(Learning Curve)
学习曲线(Learning Curve)详解 1. 什么是学习曲线? 学习曲线(Learning Curve)是机器学习和深度学习领域中用于评估模型性能随训练过程变化的图示。它通常用于分析模型的学习能力、是否存在过拟合或欠拟合等问题。 从…...
ubuntu-24.04.1-desktop 中安装 QT6.7
ubuntu-24.04.1-desktop 中安装 QT6.7 1 环境准备1.1 安装 GCC 和必要的开发包:1.2 Xshell 连接 Ubuntu2 安装 Qt 和 Qt Creator:2.1 下载在线安装器2.2 在虚拟机中为文件添加可执行权限2.3 配置镜像地址运行安装器2.4 错误:libxcb-xinerama.so.0: cannot open shared objec…...
MQTT实现智能家居------2、写MQTT程序的思路
举个最简单的例子: 手机------服务器-------家具 我们这里只看手机和家具的客户端: 手机:1)需要连接服务器 2)需要发布指令给服务器到家里的家具 3)接受来自于家里家具的异常状况 4)保持心…...
【个人开发】deepspeed+Llama-factory 本地数据多卡Lora微调【完整教程】
文章目录 1.背景2.微调方式2.1 关键环境版本信息2.2 步骤2.2.1 下载llama-factory2.2.2 准备数据集2.2.3 微调模式2.2.3.1 zero-1微调2.2.3.2 zero-2微调2.2.3.3 zero-3微调2.2.3.4 单卡Lora微调 2.2.4 实验2.2.4.1 实验1:多GPU微调-zero12.2.4.2 实验2:…...
DeepSeek 从入门到精通:全面掌握 DeepSeek 的核心功能与应用
引言 DeepSeek 是一款功能强大的工具(或平台/框架,具体根据实际定义),广泛应用于数据分析、人工智能、自动化任务等领域。无论你是初学者还是资深开发者,掌握 DeepSeek 的核心功能和应用场景都将为你的工作和学习带来…...
“国补”带火手机换新,出售旧手机应如何保护个人信息安全
在“国补”政策的推动下,手机换新热潮正席卷而来。“国补”以其诱人的补贴力度,成功激发了消费者更换手机的热情。无论是渴望体验最新技术的科技爱好者,还是对旧手机性能不满的普通用户,都纷纷投身到这场手机换新的浪潮之中。 随着大量消费者参与手机换新,二手手机市场迎来…...
驱动开发系列39 - Linux Graphics 3D 绘制流程(二)- 设置渲染管线
一:概述 Intel 的 Iris 驱动是 Mesa 中的 Gallium 驱动,主要用于 Intel Gen8+ GPU(Broadwell 及更新架构)。它负责与 i915 内核 DRM 驱动交互,并通过 Vulkan(ANV)、OpenGL(Iris Gallium)、或 OpenCL(Clover)来提供 3D 加速。在 Iris 驱动中,GPU Pipeline 设置 涉及…...
Windows使用docker部署fastgpt出现的一些问题
文章目录 Windows使用docker部署FastGPT出现的一些问题1.docker部署pg一直重启的问题2.重启MongoDB之后一直出现“Waiting for MongoDB to start...”3.oneapi启动不了failed to get gpt-3.5-turbo token encoder Windows使用docker部署FastGPT出现的一些问题 1.docker部署pg一…...
六十天前端强化训练之第一天HTML5语义化标签深度解析与博客搭建实战
欢迎来到编程星辰海的博客讲解 目录 一、语义化标签的核心价值 1.1 什么是语义化? 1.2 核心优势 二、语义标签详解与使用场景 2.1 布局容器标签 2.2 内容组织标签 三、博客结构搭建实战 3.1 完整HTML结构 3.2 核心结构解析 3.3 实现效果说明 四、学习要点…...
Oracle中补全时间的处理
在实际数据处理的过程中,存在日期不连续的问题,可能会导致数据传到前后端出现异常,为了避免这种问题,通常会从数据端进行日期不全的处理: 以下为补全年份的案例: with x as (select 开始年份 (…...
PHP课程预约小程序源码
📱 课程预约小程序:为您专属定制的便捷预约新体验 在这个快节奏的时代,我们深知每一位瑜伽爱好者、普拉提追随者以及培训机构管理者对高效、便捷服务的迫切需求。因此,我们匠心独运,推出了一款基于PHPUniApp框架开发的…...
(200): error: #29: expected an expression error: #40: expected an identifier
这是因为你乱加define导致你的define与变量名重复就会出现,他找不到错误只会抱着两个错...