Уведомления

Группа в Telegram: @pythonsu

#1 Май 11, 2016 08:40:10

mann
Зарегистрирован: 2016-05-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Python Neurolab

Здравствуйте! Недавно начал изучать нейролаб, до этого делал нейронные сети в Матлаб. Охота в 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

Офлайн

#2 Май 11, 2016 09:22:05

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Python Neurolab

Согласно вот этой доке, вы описали параметры:
-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. А по поводу ошибки, можно весь ваш код?

Отредактировано noob_saibot (Май 11, 2016 09:26:34)

Офлайн

#3 Май 11, 2016 10:36:39

mann
Зарегистрирован: 2016-05-11
Сообщения: 3
Репутация: +  0  -
Профиль   Отправить e-mail  

Python Neurolab

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]]))

Офлайн

#4 Май 12, 2016 08:54:04

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Python Neurolab

Пока не разобрался что не так, документация не ахти. Мне удобно было произвольную сетку строить на pybrain там все гораздо удобнее и понятнее, но скорость схождения у меня выходила ниже чем в neurolab.

PS. А вообще начните сразу с правильного это theano. И поддержка gpu есть и вообще уже на серьёзный инструмент похоже

Отредактировано noob_saibot (Май 12, 2016 08:55:52)

Офлайн

#5 Май 12, 2016 09:50:41

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Python Neurolab

Сейчас использовал лазанью (lasagne) - надстройку над theano. Всё устраивало. Elektronn тоже выглядит перспективным.

Офлайн

#6 Май 25, 2016 12:49:21

noob_saibot
Зарегистрирован: 2013-09-11
Сообщения: 495
Репутация: +  20  -
Профиль   Отправить e-mail  

Python Neurolab

Shaman
lasagne
А pylearn2 пользовали?

Офлайн

#7 Май 25, 2016 12:53:45

Shaman
Зарегистрирован: 2013-03-15
Сообщения: 1369
Репутация: +  88  -
Профиль   Отправить e-mail  

Python Neurolab

Она вродь померла - не смотрел.

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version