卷积神经网络聚类效果图
时间: 2025-01-03 13:38:59 浏览: 9
### 卷积神经网络聚类效果的可视化
卷积神经网络(CNN)不仅擅长于分类任务,还能够通过其学习到的特征表示来进行有效的聚类分析。为了展示CNN在不同应用中的聚类能力,下面介绍几种常见的可视化方法及其应用场景。
#### t-SNE降维可视化
t-Distributed Stochastic Neighbor Embedding (t-SNE) 是一种常用的高维数据降维技术,特别适合用来观察多维度空间内的样本分布情况。当应用于经过预训练后的 CNN 提取出来的深层特征向量时,可以直观地看到来自同一类别的样本聚集在一起形成簇状结构[^1]。
```python
import matplotlib.pyplot as plt
from sklearn.manifold import TSNE
import seaborn as sns
def plot_tsne(features, labels):
tsne = TSNE(n_components=2).fit_transform(features)
df = pd.DataFrame()
df["y"] = labels
df["comp-1"] = tsne[:,0]
df["comp-2"] = tsne[:,1]
fig, ax = plt.subplots(figsize=(7,5))
sns.scatterplot(x="comp-1", y="comp-2", hue=df.y.tolist(),
palette=sns.color_palette("hls", 10),
data=df).set(title="T-SNE projection of the CNN features")
```
此代码片段展示了如何利用 `sklearn` 库中的 `TSNE` 函数对由 CNN 得到的特征进行两维投影,并使用 Seaborn 绘制散点图来呈现这些特征之间的关系。不同的颜色代表不同的类别,可以看到同类项倾向于集中在特定区域附近。
#### 自编码器中间层激活热力图
另一种方式是查看自编码器架构下的中间隐藏层单元对于输入图片响应强度的变化趋势。这种方法可以帮助理解模型内部是如何捕捉图像局部特性以及它们之间相互作用的方式。通常情况下,随着层数加深,所关注的信息会逐渐从边缘轮廓过渡至更抽象的概念层次[^2]。
```python
import numpy as np
import matplotlib.pyplot as plt
def show_heatmap(model, img_array):
layer_outputs = [layer.output for layer in model.layers[:8]]
activation_model = tf.keras.models.Model(inputs=model.input, outputs=layer_outputs)
activations = activation_model.predict(img_array[np.newaxis,...])
first_layer_activation = activations[0][0,:,:,:].mean(axis=-1)
plt.matshow(first_layer_activation, cmap='viridis')
plt.show()
```
上述 Python 代码定义了一个辅助函数 `show_heatmap()` ,它接收一个 Keras 模型实例和一张测试用的单通道灰度图像作为参数,返回该图像穿过指定数量前几层之后产生的平均激活值矩阵,并将其绘制成热度图形式显示出来。这种图形有助于解释哪些部分受到了更多注意从而影响最终决策过程。
阅读全文