我在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)
答案 0 :(得分:0)
我怀疑你的课程没有被编码为整数0-62,在这种情况下你可以将use_label_encoder=True
传递给NeuralNet
,让它自动进行编码。