Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The sum of the weights of the core is not 1? #4410

Open
zym-wade opened this issue Nov 4, 2018 · 12 comments
Open

The sum of the weights of the core is not 1? #4410

zym-wade opened this issue Nov 4, 2018 · 12 comments

Comments

@zym-wade
Copy link

zym-wade commented Nov 4, 2018

I use two-category MKL training, why always there is a segmentation error, and the sum of the weights of the core is not 1?

@karlnapf
Copy link
Member

karlnapf commented Nov 5, 2018

Thanks for the report
Could you post a stand-alone example to reproduce this, minimally if possible. Thanks

@zym-wade
Copy link
Author

zym-wade commented Nov 5, 2018

Thanks for the report
Could you post a stand-alone example to reproduce this, minimally if possible. Thanks

print('Using mkl vector machine')
import shogun as sg

try:
	from shogun import SVMLight
except ImportError:
	print("SVMLight not available")
	exit(0)



# create combined train features
feats_train = sg.CombinedFeatures()
feats_train.append_feature_obj( sg.RealFeatures(sg.LongIntFeatures(x_tr.T )))
feats_test = sg.CombinedFeatures()
feats_test.append_feature_obj( sg.RealFeatures(sg.LongIntFeatures(x_te.T )) )

# and corresponding combined kernel
kernel = sg.CombinedKernel()
kernel.append_kernel(sg.GaussianKernel(3.0))
kernel.append_kernel(sg.PolyKernel(10, 1))
ret = kernel.init(feats_train, feats_train)
print(ret)
for i in range(np.size(y_tr)):
	if y_tr[i] == 0:
		y_tr[i] = -1
for i in range(np.size(y_te)):
	if y_te[i] == 0:
		y_te[i] = -1
#train mkl

labels = sg.BinaryLabels(y_tr)
label_te = sg.BinaryLabels(y_te)

mkl = sg.MKLClassification(sg.LibSVM());
mkl.set_interleaved_optimization_enabled(False);

# which norm to use for MKL
mkl.set_mkl_norm(2)  # 2,3

# set cost (neg, pos)
mkl.set_C(1, 1)

# set kernel and labels
mkl.set_kernel(kernel)
mkl.set_labels(labels)

# train
mkl.train()
w = kernel.get_subkernel_weights()
print(w)
kernel.set_subkernel_weights(w)

kernel.init(feats_train, feats_test)
mkl.set_kernel(kernel)
out = mkl.apply_binary()
evaluator = sg.MulticlassAccuracy()
accuracy = evaluator.evaluate(out, label_te)
print("Accuracy = %2.2f%%" % (100 * accuracy))

------------------------------------------------------

[0.60014169 0.79989371]
experiments.py:267: RuntimeWarning: [WARN] In file /home/zym/shogun/src/shogun/labels/MulticlassLabels.cpp line 225: Converting non-contiguous multiclass labels to contiguous version:

  accuracy = evaluator.evaluate(out, label_te)
experiments.py:267: RuntimeWarning: [WARN] In file /home/zym/shogun/src/shogun/labels/MulticlassLabels.cpp line 230: Converting -1 to 0.

  accuracy = evaluator.evaluate(out, label_te)
experiments.py:267: RuntimeWarning: [WARN] In file /home/zym/shogun/src/shogun/labels/MulticlassLabels.cpp line 230: Converting 1 to 1.

  accuracy = evaluator.evaluate(out, label_te)
Accuracy = 98.50%
*** Error in `python3': corrupted size vs. prev_size: 0x00000000021e08bf ***
======= Backtrace: =========
/lib/x86_64-linux-gnu/libc.so.6(+0x777e5)[0x7f6d19e0b7e5]
/lib/x86_64-linux-gnu/libc.so.6(+0x7e913)[0x7f6d19e12913]
/lib/x86_64-linux-gnu/libc.so.6(+0x80678)[0x7f6d19e14678]

I would like to ask you to help me see if there are other problems.Thanks!

@karlnapf
Copy link
Member

karlnapf commented Nov 7, 2018

It seems like a recently introduced bug. I will try to fix it

@zym-wade
Copy link
Author

zym-wade commented Nov 8, 2018

It seems like a recently introduced bug. I will try to fix it

And this segment error is only after the end of the program run, is there no free space?

@karlnapf
Copy link
Member

karlnapf commented Nov 8, 2018

No this has to do with a recent re-factoring and comes from a missed reference counter increase ...

@zym-wade
Copy link
Author

zym-wade commented Nov 8, 2018

No this has to do with a recent re-factoring and comes from a missed reference counter increase ...

I also want to ask, it takes a long time to save and download the svm model. Is there any way to improve it?

@karlnapf
Copy link
Member

karlnapf commented Nov 9, 2018

No this has to do with a recent re-factoring and comes from a missed reference counter increase ...

I also want to ask, it takes a long time to save and download the svm model. Is there any way to improve it?

That is more for a discussion on the mailing list or IRC, rather than here. But short answer: this is probably because the whole training set is stored (downside of kernel methods). You could try calling store_model_features which prunes all data that have zero coefficients. Not sure that works for MKL, feel free to issue a feature request

@karlnapf
Copy link
Member

Your code snippet is incomplete. Could you provide a minimal stand-alone example that I can just copy paste to run? I need to fill so many gaps here that it is not clear what the error would be

@zym-wade
Copy link
Author

Your code snippet is incomplete. Could you provide a minimal stand-alone example that I can just copy paste to run? I need to fill so many gaps here that it is not clear what the error would be

ok,I will sort it out on Monday, thank you.

@zym-wade
Copy link
Author

Your code snippet is incomplete. Could you provide a minimal stand-alone example that I can just copy paste to run? I need to fill so many gaps here that it is not clear what the error would be
What is your email address, I also need to send the data set to you together.

@karlnapf
Copy link
Member

Does it also crash with minimal random data?
Like x_tr = np.random.randn(100,10) etc? email is on our website

@karlnapf
Copy link
Member

Ok I figured there is a memory bug in CombinedKernel that is at least contributing to your problem.

Reproducible with

import shogun as sg

import numpy as np
x_tr = np.random.randn(10, 2)

temp = sg.RealFeatures(x_tr)
feats_train = sg.CombinedFeatures()
feats_train.append_feature_obj( temp)

kernel = sg.CombinedKernel()
kernel.append_kernel(sg.GaussianKernel(3.0))
kernel.append_kernel(sg.PolyKernel(10, 1))

kernel.init(feats_train, feats_train)

sg.get_global_io().set_loglevel(0)
del kernel
print temp # segfaults as object's refcounter decreases to zero when destroying the kernel

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants