Python Theano/Lasagne/Nolearn神经网络图像输入

Python Theano/Lasagne/Nolearn神经网络图像输入,python,machine-learning,theano,deep-learning,Python,Machine Learning,Theano,Deep Learning,我正在从事图像分类任务,并决定使用Lasagne+Nolearn作为神经网络原型。 所有标准示例,如MNIST数字分类,都运行良好,但当我尝试处理自己的图像时,会出现问题 我想使用3通道图像,而不是灰度图像。 下面是我试图从图像中获取数组的代码: img = Image.open(item) img = ImageOps.fit(img, (256, 256), Image.ANTIALIAS) img = np.asarray(img, dtype = 'float64') / 255.

我正在从事图像分类任务,并决定使用Lasagne+Nolearn作为神经网络原型。 所有标准示例,如MNIST数字分类,都运行良好,但当我尝试处理自己的图像时,会出现问题

我想使用3通道图像,而不是灰度图像。 下面是我试图从图像中获取数组的代码:

 img = Image.open(item)
 img = ImageOps.fit(img, (256, 256), Image.ANTIALIAS)
 img = np.asarray(img, dtype = 'float64') / 255.
 img = img.transpose(2,0,1).reshape(3, 256, 256)   
 X.append(img)
以下是NN及其配件的代码:

X, y = simple_load("new")

X = np.array(X)
y = np.array(y)


net1 = NeuralNet(
    layers=[  # three layers: one hidden layer
        ('input', layers.InputLayer),
        ('hidden', layers.DenseLayer),
        ('output', layers.DenseLayer),
        ],
    # layer parameters:
    input_shape=(None, 65536),  # 96x96 input pixels per batch
    hidden_num_units=100,  # number of units in hidden layer
    output_nonlinearity=None,  # output layer uses identity function
    output_num_units=len(y),  # 30 target values

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

    regression=True,  # flag to indicate we're dealing with regression problem


       max_epochs=400,  # we want to train this many epochs
        verbose=1,
        )

  net1.fit(X, y)
我收到的例外情况如下:

Traceback (most recent call last):
  File "las_mnist.py", line 39, in <module>
    net1.fit(X[i], y[i])
  File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 266, in fit
    self.train_loop(X, y)
  File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 273, in train_loop
    X, y, self.eval_size)
  File "/usr/local/lib/python2.7/dist-packages/nolearn/lasagne.py", line 377, in train_test_split
    kf = KFold(y.shape[0], round(1. / eval_size))
IndexError: tuple index out of range
回溯(最近一次呼叫最后一次):
文件“las_mnist.py”,第39行,在
net1.fit(X[i],y[i])
文件“/usr/local/lib/python2.7/dist packages/nolearn/lasagne.py”,第266行,适合
自循环列车(X,y)
文件“/usr/local/lib/python2.7/dist packages/nolearn/lasagne.py”,第273行,列车循环中
十、 y,自我评估(尺寸)
文件“/usr/local/lib/python2.7/dist packages/nolearn/lasagne.py”,第377行,列车内测试
kf=KFold(y形[0],圆形(1./eval_尺寸))
索引器错误:元组索引超出范围
那么,您用哪种格式向网络“提供”图像数据?
谢谢你的回答或任何提示

我也在lasagne用户论坛上问过,Oliver Duerr在代码示例方面帮了我很多忙:

如果要进行分类,则需要修改以下几项:

  • 在您的代码中,您已经设置了
    回归=True
    。要进行分类,请删除此行
  • 如果要输入3个不同的通道,请确保您的输入形状与X的形状匹配
  • 因为您正在进行分类,所以需要使用softmax非线性输出(目前您的身份无法帮助您进行分类)

    )

  • X, y = simple_load("new")
    
    X = np.array(X)
    y = np.array(y)
    
    net1 = NeuralNet(
        layers=[  # three layers: one hidden layer
            ('input', layers.InputLayer),
            ('hidden', layers.DenseLayer),
            ('output', layers.DenseLayer),
            ],
        # layer parameters:
        input_shape=(None, 3, 256, 256),  # TODO: change this
        hidden_num_units=100,  # number of units in hidden layer
        output_nonlinearity=lasagne.nonlinearities.softmax, # TODO: change this
        output_num_units=len(y),  # 30 target values
    
        # optimization method:
        update=nesterov_momentum,
        update_learning_rate=0.01,
        update_momentum=0.9,
    
        max_epochs=400,  # we want to train this many epochs
        verbose=1,