MATLAB AutoEncoder 如何对数据进行缩放?
MATLAB中AutoEncoder的数据缩放机制详解
AutoEncoder的核心目标是让输出尽可能复刻输入,这就要求输入数据的范围必须和解码器激活函数的输出范围完全匹配——这就是它需要做数据缩放的根本原因。下面具体拆解它的缩放逻辑:
1. 自动缩放的触发与规则
- 当你调用
trainAutoencoder时,默认会启用'ScaleData',true参数,函数会自动完成训练数据的缩放:- 如果解码器用的是默认的
sigmoid激活函数(输出范围[0,1]),训练数据会被线性缩放到[0,1]区间; - 如果解码器用的是
tanh函数(输出范围[-1,1]),数据就会对应缩到[-1,1]。
- 如果解码器用的是默认的
- 这个自动缩放是基于训练集的全局最小值和最大值做线性变换的,大致公式是:
其中scaled_data = (original_data - min_train) / (max_train - min_train) * (target_upper - target_lower) + target_lowertarget_upper和target_lower就是解码器激活函数的输出上下限。
2. 手动缩放时的注意事项
如果你在训练前已经自己对数据做了预处理,并且确保输入范围和解码器激活函数的输出范围完全一致,那一定要设置
'ScaleData',false,避免重复缩放导致数据分布变形。
举个实际例子:你已经把数据集归一化到[0,1],而解码器用的是默认的sigmoid函数,这时候关掉自动缩放就很有必要。
要是你还有具体场景的疑问(比如自定义激活函数下的缩放适配),随时可以再探讨~
内容的提问来源于stack exchange,提问作者Eghbal
相关产品推荐
相关产品推荐

