Найти - Пользователи
Полная версия: Python Neurolab
Начало » Python для новичков » Python Neurolab
1
mann
Здравствуйте! Недавно начал изучать нейролаб, до этого делал нейронные сети в Матлаб. Охота в 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.
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
noob_saibot
Согласно вот этой доке, вы описали параметры:
-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 0
-1, 0 - -1 - input, 0 - выходные с нулевого слоя. layer 1
-1, 1 - -1 - input, 1 - выходные данные с первого слоя. output

а надо:
[[-1], [-1, 0], [1]]
, согласно вашей схеме.

PS. А по поводу ошибки, можно весь ваш код?
mann
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]]))
noob_saibot
Пока не разобрался что не так, документация не ахти. Мне удобно было произвольную сетку строить на pybrain там все гораздо удобнее и понятнее, но скорость схождения у меня выходила ниже чем в neurolab.

PS. А вообще начните сразу с правильного это theano. И поддержка gpu есть и вообще уже на серьёзный инструмент похоже
Shaman
Сейчас использовал лазанью (lasagne) - надстройку над theano. Всё устраивало. Elektronn тоже выглядит перспективным.
noob_saibot
Shaman
lasagne
А pylearn2 пользовали?
Shaman
Она вродь померла - не смотрел.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB