<p>正如Francisco Vargas提到的,<code>nolearn.dbn</code>是不推荐使用的,您应该使用<code>nolearn.lasagne</code>(如果可以的话)。在</p>
<p>如果您想在千层面中进行多标签分类,那么您应该将<code>regression</code>参数设置为<code>True</code>,定义验证分数和自定义损失。在</p>
<p>下面是一个例子:</p>
<pre><code>import numpy as np
import theano.tensor as T
from lasagne import layers
from lasagne.updates import nesterov_momentum
from nolearn.lasagne import NeuralNet
from nolearn.lasagne import BatchIterator
from lasagne import nonlinearities
# custom loss: multi label cross entropy
def multilabel_objective(predictions, targets):
epsilon = np.float32(1.0e-6)
one = np.float32(1.0)
pred = T.clip(predictions, epsilon, one - epsilon)
return -T.sum(targets * T.log(pred) + (one - targets) * T.log(one - pred), axis=1)
net = NeuralNet(
# customize "layers" to represent the architecture you want
# here I took a dummy architecture
layers=[(layers.InputLayer, {"name": 'input', 'shape': (None, 1, 229, 1)}),
(layers.DenseLayer, {"name": 'hidden1', 'num_units': 20}),
(layers.DenseLayer, {"name": 'output', 'nonlinearity': nonlinearities.sigmoid, 'num_units': 13})], #because you have 13 outputs
# optimization method:
update=nesterov_momentum,
update_learning_rate=5*10**(-3),
update_momentum=0.9,
max_epochs=500, # we want to train this many epochs
verbose=1,
#Here are the important parameters for multi labels
regression=True,
objective_loss_function=multilabel_objective,
custom_score=("validation score", lambda x, y: np.mean(np.abs(x - y)))
)
net.fit(X_train, labels_train)
</code></pre>