2016-10-08 7 views
2

КонтекстПример запрос: бесконтрольное глубоко обучение в питоне

Я относительно новый для нейронных сетей, и хотел бы узнать о методах кластеризации, которые способны делать прогнозы класса после обучения представления.

Некоторые обучающие онлайн-программы для сетей 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-средств не будет вполне достаточно.

Запрос

Было бы хорошо, чтобы увидеть пример Python, который имеет аналогичные вызовы, чтобы соответствовать (X) и предсказывать (Y), где X и Y является немаркированных наборов данных. Идея заключается в том, что pred() работает путем нахождения «ближайшего» класса, определяемого представлением, полученным в fit().

Я, конечно, не ожидаю полной реализации, но соответствующие ресурсы будут оценены.

Например, в http://deeplearning.net/tutorial/DBN.html, похоже, мы можем построить DBN. Есть ли соответствующий метод pred()?

Addenda

Несколько связанный с этим вопрос:

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

+0

Каким должен быть результат функции прогнозирования, если нет меток? – Framester

ответ

2

В питона глубоких пакетов обучения вы обычно должны сначала определить архитектуру вашей модели, а затем поезд (подходят) его ,

Самое простое применение Авто-кодеры я могу думать в 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) 

ххх выше размер вашего входа. Например, если вы хотите обучить автокодеру в наборе данных 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) 

Вы также можете использовать скрытое представление или даже слой кодировщика для генерации входов другого алгоритма (например, контролируемого)