烤宽面条:神经网络图像(字符)分类。选择尺寸output_num_units

时间:2016-08-18 16:01:52

标签: python theano lasagne

我在danielnouri博客文章中使用的神经网络的帮助下进行分类。训练数据的总大小为6300个样本。数据是20 * 20大小的字符图片。我无法弄清楚如何选择output_num_units的大小。唯一类的总数是63.xtrain的形状是(6283L,400L)。 yTrain的形状是(6283L,)。以下是nueral网络的代码。

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,epochs = epochs)           在train_loop中输入文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ nolearn \ lasagne \ base.py”,第597行             self.apply_batch_func(self.train_iter_,Xb,yb))           在apply_batch_func中输入文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ nolearn \ lasagne \ base.py”,第687行             如果yb为None,则返回func(Xb)func(Xb,yb)           文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ theano \ compile \ function_module.py”,第879行,调用             storage_map = getattr(self.fn,'storage_map',None))           在raise_with_op中输入文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ theano \ gof \ link.py”,第325行             重新加注(exc_type,exc_value,exc_trace)           文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ theano \ compile \ function_module.py”,第866行,调用             self.fn()如果output_subset为None else         ValueError:y_i值超出范围         应用导致错误的节点:CrossentropySoftmaxArgmax1HotWithBias(Dot22.0,output.b,y_batch)         Toposort指数:11         输入类型:[TensorType(float64,matrix),TensorType(float64,vector),TensorType(int32,vector)]         输入形状:[(128L,63L),(63L,),(128L,)]         输入步幅:[(504L,8L),(8L,),(4L,)]         输入值:['未显示','未显示','未显示']         输出客户:[[Sum {acc_dtype = float64}(CrossentropySoftmaxArgmax1HotWithBias.0)],[CrossentropySoftmax1HotWithBiasDx(Elemwise {Inv} [(0,0)]。0,CrossentropySoftmaxArgmax1HotWithBias.1,y_batch)],[]]提示:重新运行大多数Theano优化禁用可以为您提供何时创建此节点的回溯。这可以通过设置Theano标志'optimizer = fast_compile'来完成。如果这不起作用,可以使用'optimizer = None'禁用Theano优化。提示:将Theano标志'exception_verbosity = high'用于此apply节点的调试打印和存储映射占用空间。

  

如果我改变了

output_nonlinearity=lasagne.nonlinearities.rectify

我收到以下错误:

  
    

文件“C:\ Users \ FTS.fts-gnosis \ Anaconda2 \ lib \ site-packages \ theano \ tensor \ nnet \ nnet.py”,第1453行,正在执行             y [i] = -numpy.log(coding [i,one_of_n [i]])         IndexError:索引107超出轴1的大小为63的范围         应用导致错误的节点:CrossentropyCategorical1Hot(Elemwise {Composite {(i0 *(Abs(i1)+ i2 + i3))}} [(0,2)]。0,y_batch)         Toposort指数:14         输入类型:[TensorType(float64,matrix),TensorType(int32,vector)]         输入形状:[(128L,63L),(128L,)]         输入步幅:[(504L,8L),(4L,)]         输入值:['未显示','未显示']         输出客户端:[[Sum {acc_dtype = float64}(CrossentropyCategorical1Hot.0)]]创建节点时的Backtrace(使用Theano标志traceback.limit = N使其更长):           文件“C:\ Users \ FTS.fts-gnosis \ workspace \ hello1 \ facialrec.py”,第200行,在             net1.fit(xTrain,yTrain)

  

1 个答案:

答案 0 :(得分:0)

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