上下文
我对神经网络比较陌生,想学习能够在学习表示后进行类预测的聚类方法.
一些关于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)
您还可以使用隐藏表示甚至编码器层来生成另一种算法的输入(例如受监督的算法)