Auto-Encoder&VAE_完整代码_CodingPark编程公园

本文介绍了Autoencoder的基本概念,作为一种非监督学习方法,用于数据降维和压缩,有助于模型简化和数据可视化。文章通过代码ae.py和main_ae.py展示了Autoencoder的实现。随后,探讨了VAE(变分自编码器),解释了KL散度和ELBO在VAE中的作用,提供代码vae.py和main_vae.py以展示VAE的实现。

Autoencoder 的基本概念

机器学习中包含监督学习和非监督学习,其中非监督学习简单来说就是学习人类没有标记过的数据

对于没有标记的数据最常见的应用就是通过聚类(Clustering)的方式将数据进行分类。对于这些数据来说通常有非常多的维度或者说Features。如何降低这些数据的维度或者说“压缩”数据,从而减轻模型学习的负担,我们就要用到Autoencoder了。
用Autoencoder 给数据“压缩”和降维不仅能够给机器“减压”,同时也有利于数据的可视化。
Autoencoder 实际上跟普通的神经网络没有什么本质的区别,分为输入层,隐藏层和输出层。唯一比较特殊的是,输入层的输入feature的数量(也就是神经元的数量)要等于输出层。同时要保证输入和输出相等。
结构大概如图所示
在这里插入图片描述

ae.py


import torchvision
import torch

from torch 
为了实现根据速度范围(`high_speed` 和 `low_speed`)动态切换 PID 参数的功能,可以在 `sudu` 函数中引入条件判断逻辑,根据当前目标速度选择不同的 PID 参数集。通过这种方式,系统可以在不同速度区间采用不同的控制策略,从而提高控制精度和响应性能。 ### 动态切换 PID 参数的实现 在 `sudu` 函数中,可以设置两个速度阈值:`high_speed` 和 `low_speed`,并定义两组 PID 参数(例如 `pid_high` 和 `pid_low`)。根据 `target_speed` 与这两个阈值的关系,选择合适的参数进行 PID 控制计算。 以下是修改后的函数实现: ```c float sudu(float target_speed) { float encoder_avg; float filtered_encoder; float pid_out; // 计算左右编码器平均值 encoder_avg = (float)(encoder_left + encoder_right) / 2.0f; // 一阶低通滤波处理编码器数据 filtered_encoder = (1.0f - ENCODER_FILTER_FACTOR) * encoder_avg + ENCODER_FILTER_FACTOR * last_filtered_encoder; last_filtered_encoder = filtered_encoder; // 根据目标速度选择不同的PID参数 if (target_speed > high_speed_threshold) { pid_out = PID_position(filtered_encoder, target_speed, &pid_high); } else if (target_speed < low_speed_threshold) { pid_out = PID_position(filtered_encoder, target_speed, &pid_low); } else { // 在中间速度区域使用默认PID参数 pid_out = PID_position(filtered_encoder, target_speed, &pid_default); } return pid_out; } ``` 上述代码中,`high_speed_threshold` 和 `low_speed_threshold` 分别表示高速和低速的切换阈值。当目标速度超过高速阈值时,使用 `pid_high` 参数组;低于低速阈值时,使用 `pid_low` 参数组;在两者之间时则使用默认参数 `pid_default` [^1]。 ### 参数配置示例 可以在程序初始化阶段配置不同速度区间的 PID 参数: ```c PID_Instance pid_high = { .Kp = 2.0f, .Ki = 0.5f, .Kd = 0.1f }; PID_Instance pid_default = { .Kp = 1.5f, .Ki = 0.3f, .Kd = 0.05f }; PID_Instance pid_low = { .Kp = 1.0f, .Ki = 0.2f, .Kd = 0.01f }; ``` 这样可以确保在不同速度区间采用不同的控制增益,提升系统的动态响应能力和稳定性。 ### 系统优化建议 - **速度阈值设定**:应根据系统实际响应曲线确定合适的切换阈值,避免频繁切换 PID 参数导致控制不稳定。 - **参数整定**:不同速度区间的 PID 参数应分别进行整定,确保在高速和低速状态下均能保持良好的控制性能。 - **过渡区域处理**:可以引入渐进式切换逻辑,例如使用加权平均或模糊控制策略,使 PID 参数在高低速之间平滑过渡,减少突变带来的扰动 [^2]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

TEAM-AG

编程公园:输出是最好的学习方式

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值