给定维度 和位置 ,定义频率参数:
其中:
(1)梯度消失是深度神经网络训练过程中出现的一种现象,指的是在反向传播时,靠近输入层的梯度变得非常小,几乎趋近于零。这通常发生在使用如 Sigmoid 或 Tanh 等饱和激活函数的深层网络中,由于链式法则导致多个小于1的数连乘,使得梯度指数级衰减。
(2)梯度消失的现象主要表现为模型训练缓慢甚至停滞,靠近输入层的参数几乎不更新,导致网络无法有效学习特征。这会直接影响模型的收敛速度和最终性能,尤其在层数较多的情况下更为明显。
(3)缓解梯度消失的方法包括:使用如 ReLU 及其变体等非饱和激活函数;采用合适的参数初始化方法如 He 初始化 或 Xavier 初始化,保证信号传播的稳定性;引入 Batch Normalization 层来标准化每层输出;利用 残差连接(Residual Connection) 使梯度更容易回传;以及在必要时使用 梯度裁剪(Gradient Clipping) 防止梯度过小或过大带来的训练不稳定问题。
在当前Word按Alt+F11,然后输入代码:
vbaSub CheckIfDocumentHasPictures() Dim hasPictures As Boolean hasPictures = False ' 检查内联图片(InlineShapes) If ActiveDocument.InlineShapes.Count > 0 Then hasPictures = True End If ' 检查浮动图片(Shapes) If Not hasPictures Then If ActiveDocument.Shapes.Count > 0 Then hasPictures = True End If End If ' 显示结果 If hasPictures Then MsgBox "当前文档包含图片!", vbInformation, "检测结果" Else MsgBox "当前文档没有图片。", vbInformation, "检测结果" End If End Sub
pyimport numpy as np
import random
class KMeans:
def __init__(self, n_clusters=3, max_iter=300, tol=1e-4):
self.n_clusters = n_clusters # 聚类数量
self.max_iter = max_iter # 最大迭代次数
self.tol = tol # 收敛阈值
self.centroids = None # 聚类中心
self.labels = None # 样本标签
def fit(self, X):
# 1. 随机初始化聚类中心
n_samples = X.shape[0]
random_indices = random.sample(range(n_samples), self.n_clusters)
self.centroids = X[random_indices]
for _ in range(self.max_iter):
# 2. 分配样本到最近的聚类中心
distances = self._compute_distances(X)
self.labels = np.argmin(distances, axis=1)
# 3. 保存旧中心用于收敛判断
old_centroids = self.centroids.copy()
# 4. 更新聚类中心
for i in range(self.n_clusters):
# 获取属于当前聚类的所有样本
cluster_samples = X[self.labels == i]
if len(cluster_samples) > 0:
self.centroids[i] = np.mean(cluster_samples, axis=0)
# 5. 检查是否收敛
centroid_shift = np.linalg.norm(old_centroids - self.centroids)
if centroid_shift < self.tol:
break
def predict(self, X):
distances = self._compute_distances(X)
return np.argmin(distances, axis=1)
def _compute_distances(self, X):
# 计算每个样本到所有聚类中心的距离
distances = np.zeros((X.shape[0], self.n_clusters))
for i, centroid in enumerate(self.centroids):
distances[:, i] = np.linalg.norm(X - centroid, axis=1)
return distances
# 生成测试数据
np.random.seed(42)
X = np.vstack([
np.random.normal(loc=[0, 0], scale=1, size=(100, 2)),
np.random.normal(loc=[5, 5], scale=1, size=(100, 2)),
np.random.normal(loc=[-5, 5], scale=1, size=(100, 2))
])
# 训练K-Means
kmeans = KMeans(n_clusters=3)
kmeans.fit(X)
# 预测
labels = kmeans.predict(X)
print("聚类中心:\n", kmeans.centroids)