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

上下文

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

一些关于autoencoders / rbms / deep belief网络的在线教程通常都有一个受监督的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这样的算法就不够了.

请求

很高兴看到Python示例的调用类似于fit(X)和predict(Y),其中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

最佳答案 在python深度学习包中,您通常必须首先定义模型的体系结构,然后训练(适合)它.

我能想到的最简单的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数据集(具有28×28图像)上训练自动编码器,则xxx将为28×28 = 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)

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

点赞