You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Keras获取LSTM层输出值?用于Kmeans特征提取

如何获取Keras LSTM层的具体输出值用于Kmeans聚类

你遇到的问题很典型:layers[1].output返回的是TensorFlow计算图中的一个节点,它本身并不存储实际数值,必须喂入真实的输入数据才能触发计算,得到具体的特征值。下面给你两种简单有效的解决方案:


方法1:使用Keras后端的K.function

你可以用K.function定义一个从模型输入到目标层输出的计算函数,然后传入你的输入数据(比如训练集train_x)来获取特征:

from keras import backend as K

# 定义计算函数:输入是模型的输入,输出是lstm_67层(索引1)的输出
get_lstm_output = K.function([model.input], [model.layers[1].output])

# 传入训练数据,得到特征值(注意输入要符合模型的输入形状)
lstm_features = get_lstm_output([train_x])[0]

# 现在lstm_features就是形状为(样本数, 100)的numpy数组,可以直接用于Kmeans
print(lstm_features.shape)  # 应该输出 (训练样本数, 100)

方法2:用Keras的Model类构建特征提取器

这种方法更直观,适合需要重复提取特征的场景:

from keras.models import Model

# 构建新模型:输入和原模型一致,输出为lstm_67层的输出
feature_extractor = Model(inputs=model.input, outputs=model.layers[1].output)

# 用predict方法获取特征,和模型预测的用法完全一样
lstm_features = feature_extractor.predict(train_x)

# 查看特征形状
print(lstm_features.shape)  # (训练样本数, 100)

为什么你的之前代码无法得到数值?

你之前尝试的K.eval(layers[1].output)或者sess.run(layers[1].output)失败,是因为这些Tensor依赖于模型的输入数据,你没有提供输入,TensorFlow不知道要计算哪一批数据的输出。必须把输入数据作为参数传入计算函数或者predict方法,才能触发计算图的执行,得到实际的数值结果。


后续用于Kmeans聚类的示例

拿到lstm_features之后,就可以直接用sklearn的KMeans进行聚类了:

from sklearn.cluster import KMeans

# 初始化Kmeans模型,假设你要聚成3类
kmeans = KMeans(n_clusters=3, random_state=42)
cluster_labels = kmeans.fit_predict(lstm_features)

# cluster_labels就是每个样本对应的聚类标签
print(cluster_labels[:10])  # 打印前10个样本的聚类结果

内容的提问来源于stack exchange,提问作者shaojie

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:24:50