从MLPRegressor提取激活函数及自编码器降维技术问询
嘿,我来帮你搞定从MLPRegressor里提取激活函数的问题,顺便结合你用Hinton那篇论文的自编码器做降维的场景说清楚细节~
提取MLPRegressor的激活函数
1. 获取激活函数的名称(字符串形式)
如果你只是想确认训练时用的激活函数是什么,直接访问模型的activation属性就行:
# 输出激活函数名称,比如'relu'、'sigmoid'等 print(m_ann.activation)
2. 获取可调用的激活函数对象
要是你需要实际调用激活函数(比如手动实现前向传播,拆分网络得到中间2节点的二维特征),可以用sklearn内部的ACTIVATIONS字典来映射:
from sklearn.neural_network._base import ACTIVATIONS # 获取和训练时完全一致的激活函数 activation_func = ACTIVATIONS[m_ann.activation]
结合你的自编码器降维场景:手动生成二维特征
既然你要拆分自编码器取中间层输出,这里给你完整的代码示例,用提取到的激活函数来实现前向传播:
import numpy as np from sklearn.neural_network._base import ACTIVATIONS # 提取模型的权重和偏置(你的网络结构是(4,2,4),所以前两层是输入→4节点→2节点) # 输入层到第一个隐藏层(4节点)的权重和偏置 w1, b1 = m_ann.coefs_[0], m_ann.intercepts_[0] # 第一个隐藏层到中间2节点层的权重和偏置 w2, b2 = m_ann.coefs_[1], m_ann.intercepts_[1] # 获取激活函数 activation = ACTIVATIONS[m_ann.activation] # 定义函数生成二维降维特征 def get_latent_representation(X): # 第一层前向计算 hidden1 = activation(np.dot(X, w1) + b1) # 第二层前向计算,得到中间2节点的输出 latent = activation(np.dot(hidden1, w2) + b2) return latent # 用法:把你的输入数据X传进去,得到二维结果 latent_data = get_latent_representation(X) # 现在就可以用latent_data做绘图、KNN等操作啦
补充说明
m_ann.coefs_是一个列表,按层顺序存储权重矩阵:coefs_[0]是输入到第一个隐藏层的权重,coefs_[1]是第一个到第二个隐藏层的权重,以此类推m_ann.intercepts_对应各层的偏置向量,顺序和coefs_完全匹配ACTIVATIONS字典确保你用的激活函数和模型训练时完全一致,避免手动指定出错
内容的提问来源于stack exchange,提问作者Mohammad Athar
相关产品推荐
相关产品推荐

