gpt4 book ai didi

python - nolearn 用于多标签分类

转载 作者:行者123 更新时间:2023-11-28 21:50:12 25 4
gpt4 key购买 nike

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

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 0 1 1 0] ..., [....]),当我运行我的代码时,我收到了这条错误消息:输入形状错误 (1231,13)。我想知道这里可能会发生两个问题:

  1. DBN不支持多标签分类
  2. 我的标签不适合在 DBN 拟合函数中使用。

最佳答案

正如 Francisco Vargas 所提到的,nolearn.dbn 已被弃用,您应该改用 nolearn.lasagne(如果可以的话)。

如果你想在烤宽面条中进行多标签分类,那么你应该将你的regression参数设置为True,定义一个验证分数和一个自定义损失。

这是一个例子:

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)

关于python - nolearn 用于多标签分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187175/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com