--- Log opened Wed Mar 27 00:00:09 2019 | ||
-!- sighingnow_ [~sighingno@2001:da8:203:81:28db:2637:2de1:25fa] has joined #shogun | 06:28 | |
-!- sighingnow_ [~sighingno@2001:da8:203:81:28db:2637:2de1:25fa] has quit [Remote host closed the connection] | 07:34 | |
-!- sighingnow [~sighingno@2001:da8:203:81:6dfb:4249:eea9:6b43] has quit [Read error: Connection reset by peer] | 07:34 | |
-!- HeikoS [~heiko@70.pool85-52-163.static.orange.es] has joined #shogun | 09:00 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 09:00 | |
-!- gf712 [9052085a@gateway/web/freenode/ip.144.82.8.90] has joined #shogun | 09:03 | |
gf712 | HeikoS: hey | 09:04 |
---|---|---|
@wiking | lisitsyn: pityputy | 09:45 |
@wiking | :) | 09:45 |
@wiking | gf712: yo | 09:45 |
-!- geektoni [973e46de@gateway/web/freenode/ip.151.62.70.222] has joined #shogun | 10:10 | |
@wiking | geektoni: yoza | 10:16 |
@wiking | geektoni: got a second? | 10:16 |
geektoni | wiking: hi there, sure | 10:17 |
@wiking | ok so | 10:17 |
@wiking | i wanna do a simple demo with param observers | 10:17 |
@wiking | say i have liblinear | 10:17 |
@wiking | and i wanna observe w and b | 10:18 |
@wiking | (weight vector and bias) | 10:18 |
@wiking | HELP! :D | 10:18 |
geektoni | ahah okay, straight to the point | 10:18 |
geektoni | so | 10:18 |
@wiking | and can i do it in develop or atm its only in branches? | 10:19 |
@wiking | and there's a twist in this one but that you'll see later ;) | 10:19 |
@wiking | btw anybody works with reactjs here? | 10:19 |
@wiking | i need a stupid react extension for drawing plots | 10:19 |
geektoni | I guess you can do it in develop since it is all there atm | 10:19 |
@wiking | ok so | 10:19 |
@wiking | tell me then | 10:19 |
@wiking | what are the sgobj methods | 10:19 |
geektoni | wiking: https://github.com/shogun-toolbox/shogun/pull/4592/files#diff-bf63664b191d73bbd6c8ac7f1ed127a1R96 | 10:20 |
geektoni | that is the method needed | 10:20 |
geektoni | currently, you need to manually add those lines to the algos you want to observe | 10:20 |
@wiking | aha | 10:21 |
geektoni | we are trying to extend put() to do it manually | 10:21 |
@wiking | ok that's no biggy for me | 10:21 |
@wiking | as it's demo | 10:21 |
geektoni | cool then | 10:21 |
@wiking | ok and how do i subscribe? | 10:21 |
@wiking | i mean observe | 10:21 |
@wiking | and then this might be the jackshit | 10:21 |
geektoni | let me dig out the example | 10:21 |
@wiking | thnx | 10:22 |
gf712 | wiking: hey | 10:22 |
@wiking | gf712: reactjs? >) | 10:22 |
@wiking | or no? ) | 10:22 |
gf712 | nope :D | 10:22 |
gf712 | you mean if I know anything? | 10:23 |
geektoni | wiking: https://github.com/shogun-toolbox/shogun/blob/develop/examples/meta/src/evaluation/cross_validation_multiple_kernel_learning_weights_storage.sg#L36 | 10:23 |
@wiking | subscribe_to_parameters is sgobject? | 10:23 |
@wiking | ye | 10:23 |
@wiking | ok | 10:23 |
@wiking | lemme see now if i can do that :))) | 10:23 |
@wiking | as i'm in javascript :) | 10:23 |
@wiking | ok i need then ParameterObserverInterface | 10:24 |
@wiking | so i need to implement my own paramobserver | 10:25 |
@wiking | that's fine | 10:25 |
geektoni | wiking: btw those methods are gonna change pretty soon | 10:25 |
@wiking | okok no worries | 10:25 |
geektoni | yeah, if you need custom things yes | 10:25 |
@wiking | i mean i just need to emit stuff | 10:25 |
@wiking | that is observed | 10:25 |
@wiking | and since its an interface | 10:26 |
@wiking | i need an implementation | 10:26 |
geektoni | the emit thing is done already by the SGObject, the observers just receive the emitted values and they does things with it | 10:27 |
@wiking | yeah i mean i just need the values | 10:28 |
@wiking | sgobjects to a ParameterObserverInterface | 10:28 |
@wiking | no? | 10:28 |
geektoni | not sure I understand | 10:29 |
@wiking | porco dio | 10:30 |
@wiking | so | 10:30 |
@wiking | i need the emitted values | 10:30 |
@wiking | i get those by adding to the sgobj a ParameterObserverInterface right? | 10:30 |
@wiking | or the emitted values could be received somehow else | 10:31 |
@wiking | ? | 10:31 |
@wiking | btw | 10:32 |
@wiking | class CParameterObserverCV : public ParameterObserverInterface, | 10:32 |
@wiking | public CSGObject | 10:32 |
@wiking | this should be addressed in the next refactor | 10:32 |
@wiking | as i dunno how that thing (meta exmaple) works in java/c# | 10:32 |
geektoni | yeah, that's how it works. You can only "receive" it using a ParameterObserverInterface | 10:33 |
geektoni | the multiple inheritance mess is already solved in a PR which needs a bit of refactoring before it gets merged | 10:33 |
geektoni | ;) | 10:33 |
@wiking | kk | 10:34 |
@wiking | cool | 10:34 |
@wiking | ok lemme see if i can do this | 10:34 |
@wiking | geektoni: btw why is that multi inheritance? | 11:06 |
@wiking | meaning if i would need that as well | 11:06 |
@wiking | for my inheritance | 11:06 |
@wiking | or it's more for swig? | 11:07 |
geektoni | wiking: i think it was for SWIG and for making some unit-tests pass | 11:25 |
@wiking | ok | 11:30 |
@wiking | but the paramobserverinterface doesnt need it | 11:31 |
@wiking | it'll just call the on_next etc | 11:31 |
@wiking | lets see :)))) | 11:31 |
@wiking | if this works | 11:33 |
@wiking | what i'm trying now i'll shit my pants | 11:33 |
@wiking | :D | 11:33 |
geektoni | wiking: lol best of luck then | 11:36 |
@wiking | almost :) | 11:44 |
geektoni | wiking: did it almost work? | 11:47 |
@wiking | yeah typedefs are missing from js | 11:47 |
@wiking | need to generate more code :s | 11:49 |
@wiking | but maybe some will be a bit of a problem :( | 11:49 |
@wiking | :S typedef std::pair<Some<ObservedValue>, time_point> TimedObservedValue; | 11:50 |
geektoni | those should be hidden from swig | 11:51 |
geektoni | I mean, they are just internal representation | 11:51 |
@wiking | eh? | 11:51 |
@wiking | no | 11:51 |
@wiking | virtual void on_next(const TimedObservedValue& value) = 0; | 11:51 |
@wiking | but i'm not working with swig | 11:51 |
@wiking | so it's ok | 11:51 |
@wiking | :) | 11:51 |
@wiking | i wanna have ObservedValue | 11:51 |
@wiking | :DDD | 11:51 |
geektoni | ahh I see | 11:51 |
geektoni | I thought you were trying to build an observer using js :/ | 11:52 |
@wiking | yes | 11:52 |
@wiking | but i'm not using js | 11:52 |
@wiking | i mean | 11:52 |
@wiking | swig for js | 11:52 |
@wiking | :D | 11:52 |
geektoni | i see isee :D | 11:52 |
@wiking | its native js my friend ;) | 11:53 |
@wiking | ok so i either hackomacko | 11:53 |
@wiking | the interface | 11:53 |
@wiking | and all the way down there | 11:53 |
@wiking | :) | 11:53 |
@wiking | or i try to do some binding for this typedef | 11:53 |
@wiking | :) | 11:53 |
@wiking | geektoni: how hard is it to change the interface u think? | 11:54 |
@wiking | *what do u think | 11:54 |
@wiking | i mean that paramobserver now just passes an observevalue | 11:54 |
@wiking | to on_next | 11:54 |
@wiking | ah no fucker! | 11:54 |
@wiking | i think i can do a crazy stuff | 11:54 |
@wiking | geektoni: wait wait | 12:01 |
@wiking | i get back the value in Any? :) | 12:01 |
geektoni | wiking: you can use get<the_correct_type>("value") to extract the value contained inside ObservedValue. | 12:08 |
geektoni | because ObservedValue uses the Tag framework to store the emitted value | 12:08 |
@wiking | yeye | 12:09 |
@wiking | i know | 12:09 |
@wiking | it's just makes things more complex :) | 12:09 |
geektoni | regarding the interface, if you want to get rid of that typedef it shouldn't be a big deal | 12:09 |
geektoni | we wanted to have everything with a uniform interface in the end :) | 12:09 |
@wiking | lets see | 12:10 |
@wiking | i did a hack now | 12:10 |
@wiking | maybe works | 12:10 |
geektoni | no more getters/setters | 12:10 |
@wiking | in python we have getVector i guess | 12:11 |
@wiking | right? | 12:11 |
geektoni | mmh maybe get_RealVector? | 12:12 |
geektoni | but yeah, there is some utility indeed | 12:12 |
@wiking | lets see if my haxor at least helped the timedobserved shit | 12:14 |
geektoni | lol | 12:14 |
geektoni | need to go now | 12:14 |
geektoni | wiking: keep me updated ;) | 12:15 |
-!- geektoni [973e46de@gateway/web/freenode/ip.151.62.70.222] has quit [Quit: Page closed] | 12:16 | |
@wiking | \o/ | 12:21 |
@wiking | works | 12:21 |
-!- gf712 [9052085a@gateway/web/freenode/ip.144.82.8.90] has quit [Ping timeout: 256 seconds] | 13:01 | |
-!- HeikoS [~heiko@70.pool85-52-163.static.orange.es] has quit [Ping timeout: 250 seconds] | 13:14 | |
-!- HeikoS [~heiko@152.pool85-52-163.static.orange.es] has joined #shogun | 13:49 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 13:49 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 13:50 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 14:04 | |
-!- mode/#shogun [+o wiking] by ChanServ | 14:04 | |
-!- gf712 [9052085a@gateway/web/freenode/ip.144.82.8.90] has joined #shogun | 14:07 | |
@wiking | toooni! | 14:14 |
@wiking | HeikoS: | 14:15 |
@wiking | do u have a pingable endpoint for Toni? | 14:16 |
@wiking | i need him | 14:16 |
-!- HeikoS [~heiko@152.pool85-52-163.static.orange.es] has quit [Quit: Leaving.] | 14:18 | |
-!- gf712 [9052085a@gateway/web/freenode/ip.144.82.8.90] has quit [Ping timeout: 256 seconds] | 14:57 | |
-!- geektoni [973e46de@gateway/web/freenode/ip.151.62.70.222] has joined #shogun | 14:58 | |
geektoni | wiking: here | 14:59 |
@wiking | ok | 14:59 |
@wiking | so | 14:59 |
@wiking | it all works | 14:59 |
@wiking | :D | 14:59 |
@wiking | but | 14:59 |
@wiking | may be it's the algo's fault | 15:00 |
@wiking | but i'm getting sometimes undefined stuff | 15:00 |
@wiking | got 0.43298082219779355 | 15:00 |
@wiking | vector=[-0.98559447595784222,0.559442371132646166] | 15:00 |
@wiking | got undefined | 15:00 |
@wiking | got 1.0000000000000007 | 15:00 |
geektoni | mmh | 15:00 |
geektoni | what are you trying to get? just vectors? | 15:00 |
@wiking | nono | 15:01 |
@wiking | it's 1 vector | 15:01 |
@wiking | and one double | 15:01 |
@wiking | but the other shitty part is this | 15:01 |
@wiking | on_next: function(v) { | 15:01 |
@wiking | if (v.value().get_string("name") == "bias") { | 15:01 |
@wiking | console.log(`got ${v.value().get_any().asDouble()}`); | 15:01 |
@wiking | } else if (v.value().get_string("name") == "w") { | 15:01 |
@wiking | console.log(`got ${v.value().get_any().asRealVector()}`); | 15:01 |
@wiking | } | 15:01 |
@wiking | 15:01 | |
@wiking | } | 15:01 |
@wiking | this is my js observerinterface implementation for onnext | 15:01 |
@wiking | it's a bit shitty :S | 15:01 |
@wiking | especially coz of the strcmp | 15:02 |
@wiking | :) | 15:02 |
@wiking | anyhow | 15:02 |
@wiking | i'll do a debugging why sometimes either the vector or the double is undefined | 15:02 |
@wiking | :S | 15:02 |
geektoni | ideally you can pass a list of names to the observer to obtain only ObservedValues with a specific name | 15:03 |
geektoni | but yeah | 15:03 |
geektoni | if you want to do it all together | 15:03 |
geektoni | that is what happens :/ | 15:03 |
@wiking | ah | 15:03 |
@wiking | ok yeah so | 15:03 |
@wiking | 1 observer per value | 15:03 |
geektoni | anyway, for the undefined, it may be the algo's fault | 15:03 |
@wiking | or something | 15:03 |
@wiking | that's fine | 15:03 |
@wiking | other shitty stuff | 15:03 |
@wiking | unsubscribe | 15:04 |
@wiking | ;D | 15:04 |
@wiking | i cannot unscubscribe | 15:04 |
@wiking | *unsubscribe | 15:04 |
geektoni | lol | 15:04 |
@wiking | and if my subscriber is fucked up | 15:04 |
@wiking | then i need to create a new obj | 15:04 |
geektoni | i guess we need to add an helper to SGObject | 15:04 |
@wiking | yes | 15:04 |
@wiking | :) | 15:04 |
@wiking | this is all then | 15:06 |
@wiking | :) | 15:06 |
@wiking | thnx for coming around | 15:06 |
@wiking | i'll share u the reactjs app when its ready | 15:06 |
@wiking | :P | 15:06 |
geektoni | cool! Looking forward to seeing it ;) | 15:07 |
@wiking | man | 15:08 |
@wiking | i'm super suprised | 15:08 |
@wiking | that this works | 15:08 |
@wiking | look at this | 15:08 |
@wiking | var JSParamObserver = Module.ParameterObserverInterface.extend("ParameterObserverInterface", { | 15:08 |
@wiking | // __construct and __destruct are optional. They are included | 15:08 |
@wiking | // in this example for illustration purposes. | 15:08 |
@wiking | // If you override __construct or __destruct, don't forget to | 15:08 |
@wiking | // call the parent implementation! | 15:08 |
@wiking | __construct: function() { | 15:08 |
@wiking | this.__parent.__construct.call(this); | 15:08 |
@wiking | }, | 15:08 |
@wiking | __destruct: function() { | 15:08 |
@wiking | this.__parent.__destruct.call(this); | 15:08 |
@wiking | }, | 15:08 |
@wiking | on_next: function(v) { | 15:08 |
@wiking | if (v.value().get_string("name") == "bias") { | 15:08 |
@wiking | console.log(`got ${v.value().get_any().asDouble()}`); | 15:08 |
@wiking | } else if (v.value().get_string("name") == "w") { | 15:08 |
@wiking | console.log(`got ${v.value().get_any().asRealVector()}`); | 15:08 |
@wiking | } | 15:08 |
@wiking | 15:09 | |
@wiking | }, | 15:09 |
@wiking | on_error: function() { | 15:09 |
@wiking | console.log("error"); | 15:09 |
@wiking | }, | 15:09 |
@wiking | on_complete: function() { | 15:09 |
@wiking | console.log("complete"); | 15:09 |
@wiking | }, | 15:09 |
@wiking | }); | 15:09 |
@wiking | this is a js observer | 15:09 |
@wiking | for shogun objects | 15:09 |
@wiking | and it works! | 15:09 |
@wiking | :) | 15:09 |
geektoni | I am a bit surprised too! | 15:10 |
@wiking | wasm man wasm | 15:10 |
@wiking | :) | 15:10 |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Remote host closed the connection] | 15:11 | |
geektoni | since I've never tested the idea of coding observers in a target language != C++ | 15:11 |
-!- geektoni [973e46de@gateway/web/freenode/ip.151.62.70.222] has quit [Ping timeout: 256 seconds] | 15:15 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 15:18 | |
-!- mode/#shogun [+o wiking] by ChanServ | 15:18 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 268 seconds] | 15:23 | |
-!- wiking [~wiking@2001:67c:10ec:5784:8000::3ff] has joined #shogun | 15:26 | |
-!- wiking [~wiking@2001:67c:10ec:5784:8000::3ff] has quit [Changing host] | 15:26 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 15:26 | |
-!- mode/#shogun [+o wiking] by ChanServ | 15:26 | |
-!- wiking_ [~wiking@bmi-airport-1.inf.ethz.ch] has joined #shogun | 16:59 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Ping timeout: 240 seconds] | 17:02 | |
-!- wiking_ [~wiking@bmi-airport-1.inf.ethz.ch] has quit [Remote host closed the connection] | 17:44 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 17:56 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 17:56 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 17:56 | |
-!- mode/#shogun [+o wiking] by ChanServ | 17:56 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Client Quit] | 17:56 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 18:32 | |
-!- wiking [~wiking@c-185-45-237-122.customer.ggaweb.ch] has quit [Changing host] | 18:32 | |
-!- wiking [~wiking@huwico/staff/wiking] has joined #shogun | 18:32 | |
-!- mode/#shogun [+o wiking] by ChanServ | 18:32 | |
-!- HeikoS [~heiko@108.pool85-52-163.static.orange.es] has joined #shogun | 21:57 | |
-!- mode/#shogun [+o HeikoS] by ChanServ | 21:57 | |
-!- wiking_ [~wiking@c-185-45-237-122.customer.ggaweb.ch] has joined #shogun | 22:31 | |
-!- wiking [~wiking@huwico/staff/wiking] has quit [Read error: Connection reset by peer] | 22:31 | |
-!- HeikoS [~heiko@108.pool85-52-163.static.orange.es] has quit [Ping timeout: 246 seconds] | 23:00 | |
--- Log closed Thu Mar 28 00:00:11 2019 |
Generated by irclog2html.py 2.10.0 by Marius Gedminas - find it at mg.pov.lt!