Форум сайта python.su
Здравствуйте! Недавно начал изучать нейролаб, до этого делал нейронные сети в Матлаб. Охота в Python'e сделать. Мне нужно сделать Каскадную сеть.
http://python.su/forum/topic/11179/?page=1#post-70676 - Здесь автор приводил пример, как сеть Элмана сделать.
from neurolab import core, layer, trans, train, error def newelm(minmax, size): net_ci = len(minmax) net_co = size[1] li = layer.Perceptron(net_ci + size[0], size[0], trans.TanSig()) lo = layer.Perceptron(size[0], net_co, trans.PureLin()) connect = [[-1, 0], [0], [1]] net = core.Net(minmax, net_co, [li, lo], connect, train.train_gdx, error.MSE()) return net
connect = [[i - 1] if not i else [-1, i-1] for i in range(len(layers) + 1)]
connect = [[-1, 0], [-1, 0], [-1, 1]]
Traceback (most recent call last): File "brain.py", line 22, in <module> [input[:,4].min(), input[:,4].max()], [input[:,5].min(), input[:,5].max()]], [11, 1] , [nl.trans.TanSig(), nl.trans.PureLin()]) File "D:\NeuralNetworksPy\funcs\cascade.py", line 50, in newcf net = core.Net(minmax, net_co, layers, connect, train.train_bfgs, error.MSE()) File "D:\NeuralNetworksPy\WinPython-32bit-2.7.10.3\python-2.7.10\lib\site-packages\neu rolab\core.py", line 91, in __init__ raise ValueError("Connect error: on layer " + str(l - 1)) ValueError: Connect error: on layer 1
Офлайн
Согласно вот этой доке, вы описали параметры:
-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 0
-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 1
-1, 1 - -1 - input, 1 - выходные данные с первого слоя. output
а надо:
[[-1], [-1, 0], [1]]
Отредактировано noob_saibot (Май 11, 2016 09:26:34)
Офлайн
noob_saibot
Согласно вот этой доке, вы описали параметры:-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 0-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 1-1, 1 - -1 - input, 1 - выходные данные с первого слоя. outputа надо:
#coding=utf-8 import numpy as np import numpy as np from neurolab import init, core, layer, trans, train, error def newcf(minmax, size, transf=None): net_ci = len(minmax) net_co = size[-1] if transf is None: transf = [trans.TanSig()] * len(size) assert len(transf) == len(size), "Количество функций не соответствует количеству слоев" layers = [] for i, nn in enumerate(size): layer_ci = size[i - 1] if i > 0 else net_ci l = layer.Perceptron(layer_ci, nn, transf[i]) l.initf = init.initnw layers.append(l) connect = [[i - 1] if not i else [-1, i-1] for i in range(len(layers) + 1)] # connect = [[-1], [-1, 0], [-1, 1]] print(connect) net = core.Net(minmax, net_co, layers, connect, train.train_bfgs, error.MSE()) return net input = np.random.uniform(-0.5, 0.5, (10, 2)) target = (input[:, 0] + input[:, 1]).reshape(10, 1) net = newcf([[-0.5, 0.5], [-0.5, 0.5]], [5, 1]) err = net.train(input, target, show=15) print(net.sim([[0.2, 0.1]]))
Офлайн
Пока не разобрался что не так, документация не ахти. Мне удобно было произвольную сетку строить на pybrain там все гораздо удобнее и понятнее, но скорость схождения у меня выходила ниже чем в neurolab.
PS. А вообще начните сразу с правильного это theano. И поддержка gpu есть и вообще уже на серьёзный инструмент похоже
Отредактировано noob_saibot (Май 12, 2016 08:55:52)
Офлайн
Сейчас использовал лазанью (lasagne) - надстройку над theano. Всё устраивало. Elektronn тоже выглядит перспективным.
Офлайн
ShamanА pylearn2 пользовали?
lasagne
Офлайн
Она вродь померла - не смотрел.
Офлайн