示例请求:python 中的无监督深度学习

Posted

技术标签:

【中文标题】示例请求:python 中的无监督深度学习【英文标题】:Example Request: unsupervised deep learning in python 【发布时间】:2017-02-17 09:58:07 【问题描述】:

上下文

我对神经网络比较陌生,想了解能够在学习表示之后进行类预测的聚类方法。

自动编码器/rbms/深度信念网络的一些在线教程通常有一个监督 fit() 调用,例如 fit(X,y) 或 Pipeline(rbm,logistic)。看: http://www.pyimagesearch.com/2014/09/22/getting-started-deep-learning-python/

http://scikit-learn.org/stable/auto_examples/neural_networks/plot_rbm_logistic_classification.html

我想探索隐藏层对未标记数据的影响,因此像 k-means 这样的算法还不够。

请求

很高兴看到一个调用类似于 fit(X) 和 predict(Y) 的 Python 示例,其中 X 和 Y 是 未标记 数据集。这个想法是 predict() 通过找到一个“最接近”的类来运行,该类由 fit() 中学习的表示确定。

我当然不指望一个完整的实施,但相关资源将不胜感激。

例如,在http://deeplearning.net/tutorial/DBN.html,似乎我们可以建立一个DBN。有对应的 predict() 方法吗?

附录

一个有点相关的问题:

Getting the learned representation of the data from the unsupervised learning in pylearn2

【问题讨论】:

如果没有标签,预测函数的输出应该是什么? 【参考方案1】:

在 python 深度学习包中,您通常必须先定义模型的架构,然后训练(fit)它。

我能想到的最简单的 Auto-Encoders 应用是在 keras 中

您首先需要定义隐藏(压缩)表示的大小。

hidden_dim = 32

进行必要的导入

from keras.layers import Input, Dense
from keras.models import Model

然后定义模型的架构

input = Input(shape=(xxx,))
encode = Dense(hidden_dim, activation='relu')(input)
decode = Dense(xxx, activation='sigmoid')(encode)

autoencoder = Model(input, decode)

上面的 xxx 是您输入的维度。例如,如果您想在 MNIST 数据集(包含 28x28 图像)上训练自动编码器,则 xxx 将为 28x28=784。

现在使用您选择的成本函数和优化器编译您的模型

autoencoder.compile(optimizer='adadelta', loss='binary_crossentropy')

现在要训练您的无监督模型,您应该将相同的图像放置为输入和输出。一些方法也会在输出中增加噪音,但我会留给你。假设 X 是您的训练数据并且 X_val 是您的验证数据。根据需要调整超参数。

autoencoder.fit(X, X, epochs=100, batch_size=32, shuffle=True, validation_data=(X_val, X_val)

然后假设你有一个名为 X_test 的测试集,你可以让你的模型尝试并重现它。

y_hat = autoencoder.predict(X_test)

TL;DR 这比使用 sklearn 更难做,但基本步骤是:

定义您的网络架构(层、激活、形状等) 编译模型(定义成本函数和优化器) 根据数据拟合模型(同时定义训练参数) 根据测试输入预测输出。

获取内部表示

为了现在回答您的第二个问题,您需要分别定义编码器和解码器

 encoder = Model(input, encode)
 encoded_input = Input(shape=(hidden_dim,))
 decoder_layer = autoencoder.layers[-1]
 decoder = Model(encoded_input, decoder_layer(encoded_input))

现在只需通过您的编码器和解码器传递一个测试输入(我们称之为原始

hidden_representation = encoder.predict(original)
recreation = decoder.predict(hidden_representation)

您还可以使用隐藏表示甚至编码器层来生成另一种算法(例如监督算法)的输入

【讨论】:

以上是关于示例请求:python 中的无监督深度学习的主要内容,如果未能解决你的问题,请参考以下文章

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》18 USAD:多元时间序列的无监督异常检测

《异常检测——从经典算法到深度学习》16 基于VAE和LOF的无监督KPI异常检测算法

内容感知非监督深度单应估计

深度学习之无监督训练