使用Nolearn训练神经网络时引发的KeyError

时间:2015-12-01 21:59:57

标签: python scikit-learn lasagne nolearn

我正在尝试在虹膜数据集上训练神经网络。我找到了一个使用nolearn的神经网络教程,教师使用了mnist数据集。我试图“模仿”相同的算法但是引发了错误。这是代码:

 # Sklearn libraries
from sklearn.preprocessing import LabelEncoder

# Lasagne
import lasagne
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet

# Pandas and Numpy
import pandas as pd
import numpy as np


def load_data():
    labelenc = LabelEncoder()

# Loading of dataset
iris = pd.read_csv('/home/gunslinger/Desktop/IrisDataset.csv', header=None)
iris.iloc[:, 4] = labelenc.fit_transform(iris.iloc[:, 4])

iris = iris.iloc[np.random.permutation(np.arange(len(iris)))]

# Initialization
X = iris.iloc[:, :4]
y = iris.iloc[:, 4]
X = X.astype(np.float32)
y = y.astype(np.int32)

X_train = X[:100]
X_valid = X[100:125]
X_test  = X[125:150]

y_train = y[:100]
y_valid = y[100:125]
y_test  = y[125:150]

return dict(
    X_train=X_train,
    y_train=y_train,
    X_valid=X_valid,
    y_valid=y_valid,
    X_test=X_test,
    y_test=y_test,
)


def nn_func(data):
net1 = NeuralNet(
    layers=[('input', layers.InputLayer),
            ('hidden', layers.DenseLayer),
            ('output', layers.DenseLayer)
            ],
    # Layer parameters:
    input_shape=(None, 4),
    hidden_num_units=5,
    output_nonlinearity=lasagne.nonlinearities.softmax,
    output_num_units=3,

    # Optimization method:
    update=nesterov_momentum,
    update_learning_rate=0.01,
    update_momentum=0.9,

    max_epochs=10,
    verbose=1,
)

net1.fit(data['X_train'], data['y_train'])


def main():
data = load_data()
print("Got %i testing datasets." % len(data['X_train']))
nn_func(data)

if __name__ == '__main__':
main()

我运行代码时得到的错误: http://pastebin.com/9eccuzEQ

这是一个非常类似的问题。然而,为他解决问题的原因并不适合我。

1 个答案:

答案 0 :(得分:0)

我自己解决了这个问题。数据类型必须是numpy数组而不是pandas数据帧。