IT评测·应用市场-qidao123.com技术社区

标题: 【机器学习】机器学习的基本分类-半监督学习-Ladder Networks [打印本页]

作者: 灌篮少年    时间: 2025-1-4 00:14
标题: 【机器学习】机器学习的基本分类-半监督学习-Ladder Networks
Ladder Networks 是一种半监督学习模型,通过将无监督学习与监督学习相结合,在标志数据较少的情况下实现高效的学习。它最初由 A. Rasmus 等人在 2015 年提出,特别适合深度学习任务,如图像分类或自然语言处理。

核心头脑

Ladder Networks 的目标是利用标志和未标志数据来优化网络性能。其关键头脑是引入噪声对网络举行练习,同时通过解码器恢复被粉碎的数据结构。它主要由以下三部分组成:
通过联合优化这两部分,网络能够同时举行监督学习和无监督学习。

模型架构

Ladder Networks 的架构如下:

模型使用跳跃连接(Skip Connections)来资助解码器更好地恢复无噪声表示。

丧失函数

丧失函数分为两部分:
总丧失是两者的加权和:


上风


应用



示例代码

以下是基于 TensorFlow 的 Ladder Networks 简化实现:
  1. import tensorflow as tf
  2. from tensorflow.keras.layers import Dense, Dropout
  3. from tensorflow.keras.models import Model, Sequential
  4. # 噪声函数
  5. def add_noise(x, noise_std=0.3):
  6.     return x + tf.random.normal(tf.shape(x), stddev=noise_std)
  7. # 编码器
  8. def encoder(input_dim, latent_dim, noise_std=0.3):
  9.     model = Sequential([
  10.         Dense(128, activation='relu', input_dim=input_dim),
  11.         Dropout(0.3),
  12.         Dense(latent_dim, activation='relu'),
  13.         tf.keras.layers.Lambda(lambda x: add_noise(x, noise_std=noise_std))
  14.     ])
  15.     return model
  16. # 解码器
  17. def decoder(latent_dim, output_dim):
  18.     model = Sequential([
  19.         Dense(128, activation='relu', input_dim=latent_dim),
  20.         Dense(output_dim, activation='sigmoid')  # 重建输入
  21.     ])
  22.     return model
  23. # 输入维度
  24. input_dim = 784  # MNIST 数据集
  25. latent_dim = 64
  26. output_dim = input_dim
  27. # 构建模型
  28. encoder_model = encoder(input_dim, latent_dim)
  29. decoder_model = decoder(latent_dim, output_dim)
  30. # 输入数据
  31. input_data = tf.keras.Input(shape=(input_dim,))
  32. latent_repr = encoder_model(input_data)
  33. reconstructed = decoder_model(latent_repr)
  34. # 定义完整模型
  35. ladder_network = Model(inputs=input_data, outputs=reconstructed)
  36. ladder_network.compile(optimizer='adam', loss='mse')
  37. # 示例训练
  38. (X_train, _), (_, _) = tf.keras.datasets.mnist.load_data()
  39. X_train = X_train.reshape(-1, 784).astype('float32') / 255.0
  40. ladder_network.fit(X_train, X_train, epochs=10, batch_size=128)
复制代码

输出结果
  1. Epoch 1/10
  2. 469/469 [==============================] - 2s 3ms/step - loss: 0.0471
  3. Epoch 2/10
  4. 469/469 [==============================] - 1s 3ms/step - loss: 0.0271
  5. Epoch 3/10
  6. 469/469 [==============================] - 2s 3ms/step - loss: 0.0233
  7. Epoch 4/10
  8. 469/469 [==============================] - 1s 3ms/step - loss: 0.0215
  9. Epoch 5/10
  10. 469/469 [==============================] - 1s 3ms/step - loss: 0.0204
  11. Epoch 6/10
  12. 469/469 [==============================] - 1s 3ms/step - loss: 0.0197
  13. Epoch 7/10
  14. 469/469 [==============================] - 1s 3ms/step - loss: 0.0191
  15. Epoch 8/10
  16. 469/469 [==============================] - 1s 3ms/step - loss: 0.0186
  17. Epoch 9/10
  18. 469/469 [==============================] - 1s 3ms/step - loss: 0.0182
  19. Epoch 10/10
  20. 469/469 [==============================] - 1s 3ms/step - loss: 0.0178
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 IT评测·应用市场-qidao123.com技术社区 (https://dis.qidao123.com/) Powered by Discuz! X3.4