neurolab-0.3.5版本newlvq()创建LVQ时,出现“TypeError: slice indices must be integers or None or have ”的解决方法

在学习neurolab,创建LVQ神经网络时,出现了“TypeError: slice indices must be integers or None or have ”问题,第一反应就是复制错误提示在网上找找有没有这个问题的解决方法,结果优点令人沮丧,在网上没有关于这个问题的解决方法。本以为我的创建方式有问题,可是查看官方文档,发现也是这样创建的,官方文档代码如下: 

"""
Example of use LVQ network
==========================

"""
import numpy as np
import neurolab as nl

# Create train samples
input = np.array([[-3, 0], [-2, 1], [-2, -1], [0, 2], [0, 1], [0, -1], [0, -2], 
                                                        [2, 1], [2, -1], [3, 0]])
target = np.array([[1, 0], [1, 0], [1, 0], [0, 1], [0, 1], [0, 1], [0, 1], 
                                                        [1, 0], [1, 0], [1, 0]])

# Create network with 2 layers:4 neurons in input layer(Competitive)
# and 2 neurons in output layer(liner)
net = nl.net.newlvq(nl.tool.minmax(input), 4, [.6, .4])
# Train network
error = net.train(input, target, epochs=1000, goal=-1)

在没有现成的解决方法之下,无可奈何!只能Debugger,一行一行的排查错误,经排查发现问题bug出现在neurolab的官方源文件net.py上,
代码如下:
 

for n, i in enumerate(inx):
    st = 0 if n == 0 else inx[n - 1]
    layer_out.np['w'][n][st:i].fill(1.0)   
net = Net(minmax, cn1, [layer_inp, layer_out],
                        [[-1], [0], [1]], train.train_lvq, error.MSE())

 

我根据错误提示,把layer_out.np['w'][n][st:i].fill(1.0)改成layer_out.np['w'][n][int(st):int(i)].fill(1.0)后,bug解决了。

所以写了这个博客,希望能对踩到相同坑的小伙伴有所帮助。

PS:
这是我的代码:

import numpy as np
import neurolab as nl

# 定义输入数据
input_file = 'data_vq.txt'
input_text = np.loadtxt(input_file)
data = input_text[:, 0:2]
labels = input_text[:, 2:]

# 定义一个两层的学习向量量化(Learning Vector Quantization, LVQ)神经网络:输入含10个神经元,输出含4个神经元
# 最后一个参数的数组指定了每个输出的加权百分比
net = nl.net.newlvq(nl.tool.minmax(data), 10, [0.25, 0.25, 0.25, 0.25])

# 训练神经网络
error = net.train(data, labels, epochs=100, goal=-1)
 

你可能感兴趣的:(neurolab-0.3.5版本newlvq()创建LVQ时,出现“TypeError: slice indices must be integers or None or have ”的解决方法)