Neurolab случайно не может тренироваться

Я настроил нейронную сеть, используя пакет neurolab для Python 2.7, следующим образом (в основном по примеру https://pythonhosted.org/neurolab/ex_newff.html). Обычно, когда происходит тренировка (строка с net.train()), информация выводится на консоль, например: "Достигнуто максимальное количество эпох поездов". Обучение этой сети обычно занимает> 15 секунд. Однако, по-видимому, случайным образом и без малейшего изменения кода обучение завершается неудачно: выходные сообщения не выводятся на консоль, и классификация неверна.

import neurolab as nl
import numpy as np
import matplotlib.pyplot as plt
from mpl_toolkits.mplot3d import Axes3D

def f(v):
    if np.linalg.norm(v) < 0.35: return 1
    elif np.linalg.norm(v) < 0.75: return 0
    else: return -1

# Create training set
print 'sampling'
x = (np.random.rand(500, 3)*2)-1
y = np.asarray([f(i) for i in x])

size = len(x)

inp = x.reshape(size,3)
tar = y.reshape(size,1)

# Create network 
print 'creating net'
net = nl.net.newff([[-1.5, 1.5]]*3, [10, 1])

# Train network
print 'training net'
net.init()
net.train(inp, tar, epochs=500, show=100, goal=0.02)

# Simulate network
print 'simulating net'
out = net.sim(inp)
out = np.asarray([int(round(i)) for i in out])

# Plot network results
print 'plotting'
fig = plt.figure()
ax = fig.add_subplot(111, projection='3d')

for i in xrange(len(out)):
    cls = 'g'
    if out[i] == 1: cls = 'b'
    elif out[i] == -1: cls = 'r'    
    ax.scatter(x[i][0], x[i][1], x[i][2], c=cls)
    #plt.scatter(x[i][0], x[i][1], c=cls)

plt.show()

Почему это происходит и как мне это исправить?

0 ответов

Другие вопросы по тегам