Lasagne:神经网络图像(字符)分类.选择大小output_num_units



我在danielnouri博客文章中使用的神经网络的帮助下进行分类。训练数据的总大小为6300个样本。数据为20*20大小的字符图片。我不知道如何选择output_num_units的大小。唯一类的总数为63。提取物的形状为(6283L,400L(。yTrain的形状为(6283L,(。下面是网络的代码。

net1 = NeuralNet(
           layers=[  # three layers: one hidden layer
                   ('input', layers.InputLayer),
                   ('hidden', layers.DenseLayer),
                   ('output', layers.DenseLayer),
               ],
           # layer parameters:
           input_shape=(None, 400),  # 20x20 input pixels per batch
           hidden_num_units=100,  # number of units in hidden layer
           # output layer uses identity function
           output_nonlinearity=lasagne.nonlinearities.softmax,
           output_num_units=63,
           # optimization method:
           update=nesterov_momentum,
           update_learning_rate=0.01,
           update_momentum=0.9,
           # flag to indicate we're dealing with regression problem
           regression=False,
           max_epochs=400,  # we want to train this many epochs
           verbose=1,
)
net1.fit(xTrain, yTrain)

如果我选择大小为63,我会得到以下错误:

net1.fit(xTrain,yTrain(文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\nolearn\lasagne\base.py",第539行,适合self.train_loop(X,y,划时代=划时代(文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\nolearn\lasagne\base.py",第597行,在train_loop中self.apply_batch_func(self.train_iter_,Xb,yb(文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\nolearn\lasagne\base.py",第687行,在apply_batch_func中如果yb为None else func(Xb,yb(,则返回func调用中的文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\theano\compile\function_module.py",第879行storage_map=getattr(self.fn,'storage_map',无((文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\theano\gof\link.py",第325行,在raise_with_op中重新评估(exc_type、exc_value、exc_trace(文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\theano\compile\function_module.py",第866行,在调用中self.fn((如果output_subet为None else\ValueError:y_i值越界应用导致错误的节点:CrossentropySoftmaxArgmax1HotWithBias(Dot22.0,output.b,y_batch(拓扑索引:11输入类型:[TensorType(float64,matrix(,TensorType(float 64,vector(,TensorType(int32,vector输入形状:[(128L、63L(、(63L,(、(128L,(]输入步幅:[(504L,8L(,(8L,(,(4L,(]输入值:[未显示,未显示,没有显示]输出客户端:[[Sum{acc_dtype=float64}(CrossentropySoftmaxArgmax1HotWithBias.0。这可以通过设置Theano标志"优化器=fast_compile"来完成。如果不起作用,则可以使用"优化器=无"禁用Theano优化。提示:使用Theano标志"exception_verbosity=high"用于此应用节点的调试打印和存储映射封装。

如果我更改

output_nonlinearity=lasagne.nonlinearities.rectify

我得到以下错误:

文件"C:\Users\FTS.FTS gnosis\Anaconda2\lib\site packages\theano\ttensor\net\net.py",第1453行,执行y[i]=-numpy.log(编码[i,one_of_n[i]](IndexError:索引107超出了大小为63的轴1的界限应用导致错误的节点:CrossentropyCategory1Hot(Elemwise{Composite{(i0*(Abs(i1(+i2+i3((}}[(0,2(].0,y_batch(拓扑索引:14输入类型:[TensorType(float64,matrix(,TensorType(int32,vector(]输入形状:[(128L,63L(,(128L(]输入步幅:[(504L,8L(,(4L,(]输入值:[未显示,未显示]输出客户端:[[Sum{acc_dtype=float64}(CrossentropyCategory1Hot.0(]]创建节点时的回溯(使用Theano标志traceback.limit=N使其更长(:文件"C:\Users\FTS.FTS gnosis\workspace\hello1\facialrec.py",第200行,位于net1.fit(xTrain,yTrain(

我怀疑您的类没有被编码为整数0-62,在这种情况下,您可以将use_label_encoder=True传递给NeuralNet,让它自动进行编码。

最新更新