首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用于多标签分类的诺尔学习

用于多标签分类的诺尔学习
EN

Stack Overflow用户
提问于 2015-08-24 16:26:20
回答 2查看 2.5K关注 0票数 2

我尝试使用从nolearn导入的DBN函数,下面是我的代码:

代码语言:javascript
复制
from nolearn.dbn import DBN
import numpy as np
from sklearn import cross_validation

fileName = 'data.csv'
fileName_1 = 'label.csv'

data = np.genfromtxt(fileName, dtype=float, delimiter = ',')
label = np.genfromtxt(fileName_1, dtype=int, delimiter = ',')

clf = DBN(
    [data, 300, 10],
    learn_rates=0.3,
    learn_rate_decays=0.9,
    epochs=10,
    verbose=1,
    )

clf.fit(data,label)
score = cross_validation.cross_val_score(clf, data, label,scoring='f1', cv=10)
print score

由于我的数据具有形状(1231,229)和带有形状的标签(1231,13),标签集看起来类似于(0 0 1 0 1 0 1 0 0 1 0.,.),当我运行代码时,我得到了以下错误消息:错误的输入形状(1231,13)。我想知道这里可能发生了两个问题:

  1. DBN不支持多标签分类。
  2. 我的标签不适合用于DBN fit功能。
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-08-25 07:52:39

正如Francisco所提到的,nolearn.dbn是不推荐的,您应该使用nolearn.lasagne (如果可以的话)。

如果您想在千层面中进行多标签分类,那么您应该将regression参数设置为True,定义验证分数和自定义损失。

下面是一个例子:

代码语言:javascript
复制
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)
票数 5
EN

Stack Overflow用户

发布于 2015-08-24 17:26:57

Fit调用BuildDBN --这里可以找到这里 --需要注意的是,dbn已被废弃,您只能找到提交。无论如何,如果您正在寻找额外的信息,那么从我在您的代码片段中可以看到的是,DBN的第一个参数,即[data, 300, 10],应该是基于文档和源代码的[data.shape[1], 300, 10]。希望这能有所帮助。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32187175

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档