请求示例:python 中的无监督深度学习
Example Request: unsupervised deep learning in python
上下文
我对神经网络比较陌生,想了解能够class预测在学习表示之后的聚类方法。
autoencoders/rbms/deep 信念网络的一些在线教程通常有一个 监督 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() 通过找到一个 'closest' class 来运行,这个 'closest' class 是由在 fit().
中学习到的表征所决定的。
我当然不希望有完整的实现,但希望能提供相关资源。
比如http://deeplearning.net/tutorial/DBN.html,好像可以建一个DBN。有对应的predict()方法吗?
附录
一个有点相关的问题:
Getting the learned representation of the data from the unsupervised learning in pylearn2
在 python 深度学习包中,您通常必须首先定义模型的架构,然后对其进行训练 (fit)。
我能想到的最简单的自动编码器应用是在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)
您还可以使用隐藏表示甚至编码层来生成另一种算法(例如监督算法)的输入
上下文
我对神经网络比较陌生,想了解能够class预测在学习表示之后的聚类方法。
autoencoders/rbms/deep 信念网络的一些在线教程通常有一个 监督 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() 通过找到一个 'closest' class 来运行,这个 'closest' class 是由在 fit().
中学习到的表征所决定的。我当然不希望有完整的实现,但希望能提供相关资源。
比如http://deeplearning.net/tutorial/DBN.html,好像可以建一个DBN。有对应的predict()方法吗?
附录
一个有点相关的问题:
Getting the learned representation of the data from the unsupervised learning in pylearn2
在 python 深度学习包中,您通常必须首先定义模型的架构,然后对其进行训练 (fit)。
我能想到的最简单的自动编码器应用是在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)
您还可以使用隐藏表示甚至编码层来生成另一种算法(例如监督算法)的输入