You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Pre-built architectures are dropped. Examples will be provided and should be used instead.
They are actually an examples of "how-to" and so they are usually useless for real projects.
biggest API parts (activate, train etc) are async now.
Every "moving part" used by an API is placed separately, and so if NN is simply created and loaded - there will be no need in trainer, optimization objectives, optimizers and everything else required for training. This is very useful for a client run, when only activation is needed without any training.
Multiple back-ends are supported. Each of them has its own strengths and weaknesses.
API fingerprint is as small as possible now.
Lot of stuff is configurable, lot of staff is pre-built.
I guess that depends on the underlying implementation. Neuron and Layers can be replaced by just Networks that handle everything. The fact that Synaptic has Neurons is because when I first read Derek Monner's paper he described a generalized unit, that could use the same algorithm and behave differently according just to their position in the topology of the network (i.e. a self-connected neuron acts as a memory cell, a neuron gating that self-connection acts as a forget gate but the same neuron gating the input of the memory cell would act as an input gate filtering the noise. And all those neurons would essentially follow the same algorithm internally). That's what I found really cool about that paper and that's why I coded first the Neuron. Then the Layer is just an array of them, and a Network is an array of Layers. The advantage of having the individual units is that you can connect them in any way easily and try new topologies (Like LSTM w/wo forget gates, w/wo peepholes, w/wo connections among the memory cells, etc). But I know that the approach that other NN libraries take is more like matrix math at network level, instead of having the individual units. This is probably way better for optimization/parallelization so I'm up for it, as long as we can keep an easy and intuitive API, that allows the user to create flexible/complex topologies.
Reacted by Franco Rabaglia, Zetta Flow, Olivier Kaisin, Maximilian Berkmann and Cesar Anton Dorantes
I'm not totally clear on what it means to expose a neuron, but it was extremely important for my application to be able to clearly see the neurons (using toJSON). I trained the network using synaptic and implemented the results in another program (excel).
From my understanding it would be more important to expose an ability to override/specify neurones' activation function than to have direct access to neurones. In that way a developer can concentrate on implementing higher level functionality, e.g. by stacking layers or networks and having access to neurones' activation functions to implement custom networks.
That assumed there are basic networks are implemented (convolutional, recurrent, Bayesian etc).
I would love to contribute to the new version if any additional help is still required.
I'm not totally clear on what it means to expose a neuron, but it was extremely important for my application to be able to clearly see the neurons (using toJSON). I trained the network using synaptic and implemented the results in another program (excel).
—
You are receiving this because you are subscribed to this thread.
Reply to this email directly, view it on GitHub, or mute the thread.
@jocooler That's a great note. From my point of view - removal of Neuron will significantly reduce memory consumption. However, this is a good reminder that we do need a human-readable export.
Thanks for spearheading this thread @Jabher. From a user's perspective, I might add having improved documentation and examples. Especially since the site is down now (#141), it's harder to reference back to examples I've found in the past.
Specifically, I think for my use case an LSTM may be a more natural approach, but I am hesitant to test it because I have not trained one before and the mechanism for RNNs seems quite different. Having more than 1 example (preferably 3+) would help as users can pick the one that best matches their use-case. It might help to encourage users to contribute their own examples as well (maybe something I can do if I figure this out myself).
Another point should be on optimizations. I think a big reason people are using other libraries is due to limitations, especially in memory. It could help to have a short guide on the Wiki discussing how to set Node to allocate more memory before getting OOM, or using a mini batch approach for strategies that support it. Also, regarding exposing the Neuron, I may suggest something similar to compilers where the toJSON method can be human-friendly in debug mode and machine-friendly otherwise. I'm seeing my memory filled with Neurons when conducting a heap analysis.
@olehf Convolutional (1d and 2d + max/avg pooling for them) are mentioned in design document, same for RNN - I think GRU and LSTM would be enough for average user.
Activation functions should definitely be passable to any layer, only issue we can encounter is a custom implementation of them (as we will need multiple implementations of one function) so we should keep as much as possible in design.
Help is (as usual) always appreciated. It is a lot of work to do, and any contribution will be significant. As soon as we will decide that we're good with this design, GH project board will be created with tasks to do.
Speaking about examples - this is a good concern, but first we should implement an API itself.
Good set of examples can be a https://github.com/fchollet/keras/tree/master/examples (did I mention that Keras is documented in a great way?).
Another point should be on optimizations. I think a big reason people are using other libraries is due to limitations, especially in memory. It could help to have a short guide on the Wiki discussing how to set Node to allocate more memory before getting OOM, or using a mini batch approach for strategies that support it.
That's totally correct, but we should keep in mind that Node.js is not the only runtime target. Multiple browsers (latest Edge, Firefox and Chrome) with WebGL/WebCL and workers are also a runtime targets, and nodejs-chakra is also a preferrable option as it looks like it do not have memory limitations at all (it should be checked).
About Neuron exposion and keeping human-readable output - I totally agree.
Hey, thanks for this great library! It is really nice that its development is still running.
I am not an ML expert, and synaptic has helped me so much to understand how the neural networks work ,thanks especially to the prebuilt architectures. If you are dropping them from the core repo, please move them to a separate one, maybe with the examples, because it makes really simple for ML non-experts to get initiated and running.
Cheers
Reacted by Kristian Tolleshaug Mørch, Chris Jaynes, matt, Thomas Mullen, Breno Jesus, Patrick I. Oliveras, Franco Rabaglia, Marius Pop, hydroid7, Oleksandr Tolochko and 2 more
Most JavaScript related libraries are not actively maintained any more. Hope this one can keep going!
Hope one day I can have enough knowledge contributing on this library.
Cheers!
Over time, we hope that the TensorFlow community will develop front ends for languages like Go, Java, JavaScript, Lua, R, and perhaps others. With SWIG, it's relatively easy to develop a TensorFlow interface for your favorite language.
ASAP we actually need only few functions, some incomplete port of TF would not be so hard to use, and it will deal with most of server-side performance issues, so we will actually be able to train with good speed, I think.
More utils will be cool - I couldn't even find any npm module that normalize numbers. JS is missing many important tools to work with data.
In this section I could happily contribute.
some options:
normalizeNum(min,max,num)=>0->1// (curried?),deNormalizeNum(min,max,0->1)=>num// (curried?), normalizeNumericalArray([num])=>[0->1]// min and max from arraynormalizeCategoricalArr([string])=>[0|1]//based on uniqueness. etc...
Reacted by Cristiano Belloni, Dr_PJ, joelbasson-spotzer and Maximilian Berkmann
Also there is a new Math library being built for JavaScript for machine learning because the default Math library in JavaScript and NodeJS is very erroneous. And it only offers a few mathematical functions and advanced trigonometric functions and other n-dimentional functions are not present and the ones that are present are using the default math library in JavaScript and NodeJS and hence every library on npm on mathematics is erroneous and not safe for Machine Learning. And they only use upto float32 which is pretty limited when it comes to ML. So, check out this math library which is being built very industry standard. And every mathematical functions have a citation paper associated with it to prove its accuracy.
Hello and Thanks for the library,
I'm porting the underlying algorithm on microcontroller (c language), supporting Perceptron an LSTM. The goal is to build and train a network using synaptic over decent cpu for pattern recognition and/or time series analysis. And finally upload the trained model to the edge. In this process, the exchange format will be central. I'm quite happy with json, but wanted to know how the json v2 will look like. Also, if you can introduce a Version properties such { version:"2.x", neurons:[...],..}.
Ready to help with somes topics if you need.
if i understand correctly, you want to reproduce the demo on localhost. For the purpose, you have the code of the demo at http://caza.la/synaptic/scripts/controllers/paint-an-image.js
you simply have to embed/modify it into local html page within synaptic lib referenced locally.
The graphical presentation or the use of any framework such Angular is up to you.
Overall, I was thoroughly impressed with the implementations provided in Synaptic in v1.
However, I didn't see any documentation in regards to Tensors.
Obviously, Tensors are not necessary, but, do help you follow the correct rules when implementing models. I think it would be a nice thing to add as a backlog, lower priority item.
Maybe even a configuration setting where you can configure Tensors on or off for added flexibility...
I feel this suggestion may be adding unneeded scope creep though.
Reacted by Max Clayton Clowes, buckle2000, Travis Burandt, Sam Chalela, wallabra, Promoresolution, Michael, Buleandra Cristian, Brandonn, Ten Bitcomb and 13 more
Activity
Jabher commentedon Sep 12, 2016
Important question btw. Do we actually need Neuron as an exposed entity?
cazala commentedon Sep 13, 2016
I guess that depends on the underlying implementation. Neuron and Layers can be replaced by just Networks that handle everything. The fact that Synaptic has Neurons is because when I first read Derek Monner's paper he described a generalized unit, that could use the same algorithm and behave differently according just to their position in the topology of the network (i.e. a self-connected neuron acts as a memory cell, a neuron gating that self-connection acts as a forget gate but the same neuron gating the input of the memory cell would act as an input gate filtering the noise. And all those neurons would essentially follow the same algorithm internally). That's what I found really cool about that paper and that's why I coded first the Neuron. Then the Layer is just an array of them, and a Network is an array of Layers. The advantage of having the individual units is that you can connect them in any way easily and try new topologies (Like LSTM w/wo forget gates, w/wo peepholes, w/wo connections among the memory cells, etc). But I know that the approach that other NN libraries take is more like matrix math at network level, instead of having the individual units. This is probably way better for optimization/parallelization so I'm up for it, as long as we can keep an easy and intuitive API, that allows the user to create flexible/complex topologies.
jocooler commentedon Sep 16, 2016
I'm not totally clear on what it means to expose a neuron, but it was extremely important for my application to be able to clearly see the neurons (using toJSON). I trained the network using synaptic and implemented the results in another program (excel).
olehf commentedon Sep 16, 2016
From my understanding it would be more important to expose an ability to override/specify neurones' activation function than to have direct access to neurones. In that way a developer can concentrate on implementing higher level functionality, e.g. by stacking layers or networks and having access to neurones' activation functions to implement custom networks.
That assumed there are basic networks are implemented (convolutional, recurrent, Bayesian etc).
I would love to contribute to the new version if any additional help is still required.
Regards,
Oleh Filipchuk
Jabher commentedon Sep 18, 2016
@jocooler That's a great note. From my point of view - removal of Neuron will significantly reduce memory consumption. However, this is a good reminder that we do need a human-readable export.
schang933 commentedon Sep 19, 2016
Thanks for spearheading this thread @Jabher. From a user's perspective, I might add having improved documentation and examples. Especially since the site is down now (#141), it's harder to reference back to examples I've found in the past.
Specifically, I think for my use case an LSTM may be a more natural approach, but I am hesitant to test it because I have not trained one before and the mechanism for RNNs seems quite different. Having more than 1 example (preferably 3+) would help as users can pick the one that best matches their use-case. It might help to encourage users to contribute their own examples as well (maybe something I can do if I figure this out myself).
Another point should be on optimizations. I think a big reason people are using other libraries is due to limitations, especially in memory. It could help to have a short guide on the Wiki discussing how to set Node to allocate more memory before getting OOM, or using a mini batch approach for strategies that support it. Also, regarding exposing the Neuron, I may suggest something similar to compilers where the toJSON method can be human-friendly in debug mode and machine-friendly otherwise. I'm seeing my memory filled with Neurons when conducting a heap analysis.
Jabher commentedon Sep 19, 2016
@olehf Convolutional (1d and 2d + max/avg pooling for them) are mentioned in design document, same for RNN - I think GRU and LSTM would be enough for average user.
Activation functions should definitely be passable to any layer, only issue we can encounter is a custom implementation of them (as we will need multiple implementations of one function) so we should keep as much as possible in design.
Help is (as usual) always appreciated. It is a lot of work to do, and any contribution will be significant. As soon as we will decide that we're good with this design, GH project board will be created with tasks to do.
Jabher commentedon Sep 20, 2016
@schang933 there's new temp website - http://caza.la/synaptic/. Old one will be back soon.
Speaking about examples - this is a good concern, but first we should implement an API itself.
Good set of examples can be a https://github.com/fchollet/keras/tree/master/examples (did I mention that Keras is documented in a great way?).
That's totally correct, but we should keep in mind that Node.js is not the only runtime target. Multiple browsers (latest Edge, Firefox and Chrome) with WebGL/WebCL and workers are also a runtime targets, and nodejs-chakra is also a preferrable option as it looks like it do not have memory limitations at all (it should be checked).
About Neuron exposion and keeping human-readable output - I totally agree.
arqex commentedon Sep 20, 2016
Hey, thanks for this great library! It is really nice that its development is still running.
I am not an ML expert, and synaptic has helped me so much to understand how the neural networks work ,thanks especially to the prebuilt architectures. If you are dropping them from the core repo, please move them to a separate one, maybe with the examples, because it makes really simple for ML non-experts to get initiated and running.
Cheers
hongbo-miao commentedon Sep 24, 2016
Most JavaScript related libraries are not actively maintained any more. Hope this one can keep going!
Hope one day I can have enough knowledge contributing on this library.
Cheers!
menduz commentedon Sep 25, 2016
I think those shall be separated packages. In order to keep the original package as small and simple as possible.
yogevizhak commentedon Sep 25, 2016
I agree but it should be both options for easy installation
On Sep 25, 2016 16:10, "Agustin Mendez" [email protected] wrote:
Jabher commentedon Sep 25, 2016
@menduz I'd suggest multiple modules + 1 meta-module ("synaptic" itself) to expose them all in that case?
Jabher commentedon Oct 3, 2016
There's a nice line in TensorFlow docs:
https://www.tensorflow.org/versions/r0.11/api_docs/index.html
ASAP we actually need only few functions, some incomplete port of TF would not be so hard to use, and it will deal with most of server-side performance issues, so we will actually be able to train with good speed, I think.
yonatanmn commentedon Oct 8, 2016
In this section I could happily contribute.
some options:
58 remaining items
vickylance commentedon Sep 3, 2017
@playground As of right now I don't have anything with those libraries.
@buckle2000 ok.
Also there is a new Math library being built for JavaScript for machine learning because the default Math library in JavaScript and NodeJS is very erroneous. And it only offers a few mathematical functions and advanced trigonometric functions and other n-dimentional functions are not present and the ones that are present are using the default math library in JavaScript and NodeJS and hence every library on npm on mathematics is erroneous and not safe for Machine Learning. And they only use upto float32 which is pretty limited when it comes to ML. So, check out this math library which is being built very industry standard. And every mathematical functions have a citation paper associated with it to prove its accuracy.
https://github.com/stdlib-js/stdlib
pandaGaume commentedon Jan 11, 2018
Hello and Thanks for the library,
I'm porting the underlying algorithm on microcontroller (c language), supporting Perceptron an LSTM. The goal is to build and train a network using synaptic over decent cpu for pattern recognition and/or time series analysis. And finally upload the trained model to the edge. In this process, the exchange format will be central. I'm quite happy with json, but wanted to know how the json v2 will look like. Also, if you can introduce a Version properties such { version:"2.x", neurons:[...],..}.
Ready to help with somes topics if you need.
vickylance commentedon Jan 21, 2018
So this project is officially dead?
dhrubesh commentedon Jan 22, 2018
Can someone help me on how to run the "paint an image" demo locally on my system?
pandaGaume commentedon Jan 22, 2018
if i understand correctly, you want to reproduce the demo on localhost. For the purpose, you have the code of the demo at
http://caza.la/synaptic/scripts/controllers/paint-an-image.js
you simply have to embed/modify it into local html page within synaptic lib referenced locally.
The graphical presentation or the use of any framework such Angular is up to you.
freelogic commentedon Mar 19, 2018
is it support cuda or gpu?
ChrisCates commentedon Aug 3, 2019
Overall, I was thoroughly impressed with the implementations provided in Synaptic in v1.
However, I didn't see any documentation in regards to Tensors.
Obviously, Tensors are not necessary, but, do help you follow the correct rules when implementing models. I think it would be a nice thing to add as a backlog, lower priority item.
Maybe even a configuration setting where you can configure Tensors on or off for added flexibility...
I feel this suggestion may be adding unneeded scope creep though.
ChrisCates commentedon Aug 3, 2019
@freelogic, check issue #245.
I believe this is pretty up in the air at the moment. But good integration with GPUs would be make or break for me migrating my work over to Synaptic.
Berkmann18 commentedon Aug 20, 2019
@Jabher What's the current situation with v2?
rumax commentedon Mar 9, 2020
Is project still alive?
martinmaroyan commentedon Sep 6, 2021
is there gonna be a version 2...? ;-;
yogevizhak commentedon Sep 6, 2021
martinmaroyan commentedon Sep 14, 2021
That's a URL to a bidirectional rpc library...