Создать однослойную нейронную сеть с помощью pylearn2
Pylearn2 обычно предлагается в качестве ресурса Python для нейронных сетей.
Я хотел бы создать нейронную сеть с одним скрытым слоем и обучить ее с помощью алгоритма обратного распространения.
Это должно быть что-то базовое, но я не понимаю, как это сделать с помощью pylearn2. Я нашел это руководство по многослойному персептрону, но, тем не менее, я все еще потерялся. ( http://nbviewer.ipython.org/github/lisa-lab/pylearn2/blob/master/pylearn2/scripts/tutorials/multilayer_perceptron/multilayer_perceptron.ipynb)
n = 200
p = 20
X = np.random.normal(0, 1, (n, p))
y = X[:,0]* X[:, 1] + np.random.normal(0, .1, n)
Я хотел бы создать однослойную нейронную сеть с 40 скрытыми узлами и функцией активации сигмоида.
Кто-нибудь может мне помочь?
РЕДАКТИРОВАТЬ:
Я был в состоянии написать этот код, но он все еще не работает
ds = DenseDesignMatrix(X=X, y=y)
hidden_layer = mlp.Sigmoid(layer_name='hidden', dim=10, irange=.1, init_bias=1.)
output_layer = mlp.Linear(1, 'output', irange=.1)
trainer = sgd.SGD(learning_rate=.05, batch_size=10,
termination_criterion=EpochCounter(200))
layers = [hidden_layer, output_layer]
ann = mlp.MLP(layers, nvis=1)
trainer.setup(ann, ds)
while True:
trainer.train(dataset=ds)
ann.monitor.report_epoch()
ann.monitor()
if not trainer.continue_learning(ann):
break
2 ответа
Это мое текущее решение:
n = 200
p = 2
X = np.random.normal(0, 1, (n, p))
y = X[:,0]* X[:, 1] + np.random.normal(0, .1, n)
y.shape = (n, 1)
ds = DenseDesignMatrix(X=X, y=y)
hidden_layer = mlp.Sigmoid(layer_name='hidden', dim=10, irange=.1, init_bias=1.)
output_layer = mlp.Linear(dim=1, layer_name='y', irange=.1)
trainer = sgd.SGD(learning_rate=.05, batch_size=10,
termination_criterion=EpochCounter(200))
layers = [hidden_layer, output_layer]
ann = mlp.MLP(layers, nvis=2)
trainer.setup(ann, ds)
while True:
trainer.train(dataset=ds)
ann.monitor.report_epoch()
ann.monitor()
if not trainer.continue_learning(ann):
break
inputs = X
y_est = ann.fprop(theano.shared(inputs, name='inputs')).eval()
pylearn2 можно использовать, создавая экземпляры объектов и используя их, как вы это обычно делаете, или определяя топологию сети и параметры через файл конфигурации Yaml и позволяя pylearn2 позаботиться обо всем остальном. Хороший способ понять, как все работает, - это посмотреть на pylearn2/scripts/train.py
чтобы увидеть операцию, которая выполняется. Также в pylearn2/train.py
(неудачный выбор имен, я полагаю) вы найдете "объект поезда", который содержит всю информацию об обучении. В основном, когда вы используете файл конфигурации, парсер yaml создаст объект поезда с информацией из файла конфигурации, а затем начнет обучение. Есть множество примеров в pylearn2/scripts/papers
что вы можете посмотреть, если хотите.
Я также предлагаю вам прочитать эту статью, чтобы лучше понять, как работает pylearn2: ваши модели в Pylearn2
Наконец, вы также можете попробовать Blocks, новую платформу для нейронных сетей, которая разрабатывается в той же лаборатории, что и pylearn2. Он находится в стадии активной разработки и имеет меньше возможностей, чем pylearn2, но вам это может понравиться, особенно если вы что-то знаете о Theano.