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

Fleshed out README and design goals #342

Merged
merged 2 commits into from
Aug 6, 2015
Merged

Fleshed out README and design goals #342

merged 2 commits into from
Aug 6, 2015

Conversation

f0k
Copy link
Member

@f0k f0k commented Jul 22, 2015

This fleshes out the README file to show an example upfront so you know what to expect, and to point to installation instructions, documentation and contribution guidelines (although the latter should probably be fleshed out in the documentation).

See https://github.com/f0k/Lasagne/tree/readme for how it would look.

Closes #86 in passing.

@ebenolson
Copy link
Member

Looks good, but I think the installation and documentation sections should be closer to the top. A blurb about Recipes would be nice also.

@f0k
Copy link
Member Author

f0k commented Jul 22, 2015

Agreed, the example scrolls other important aspects out of view. It's usually nice to have it on top, but for most projects it's a lot shorter. I can add a link to "Recipes" to the Example section. What'd be your suggested order of sections then?

@ebenolson
Copy link
Member

I'd go with something like

  • Lasagne
  • Installation
  • Documentation
  • Examples
  • Design Goals
  • Development

@f0k f0k force-pushed the readme branch 2 times, most recently from 35a9760 to f87130c Compare July 22, 2015 16:52
@f0k
Copy link
Member Author

f0k commented Jul 22, 2015

Reordered. Maybe move "Design Goals" before "Installation"? It looks a bit lost where it is. (But it also is quite long and would push other sections outside the view.)

@benanne
Copy link
Member

benanne commented Jul 22, 2015

Very nice work! Had a quick look at it but couldn't find anything to nitpick at :)

@f0k
Copy link
Member Author

f0k commented Jul 23, 2015

I'm thinking about removing "Design Goals" (but linking to it, they're in the documentation anyway) and adding some bullet points about Lasagne's features instead. I'll try that later.

@f0k f0k force-pushed the readme branch 2 times, most recently from df8b482 to 27b4b64 Compare July 23, 2015 16:39
@f0k
Copy link
Member Author

f0k commented Jul 23, 2015

I've removed the design goals and added a list of features instead. What do you think? Is there anything wrong/misleading/missing? (See https://github.com/f0k/Lasagne/blob/readme/README.rst for a nicely rendered version.)

* Support for architectures of multiple inputs and multiple outputs, including
auxiliary classifiers
* Support for many optimization methods including Nesterov momentum, RMSprop
and ADAM
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'd drop the 4x "Support for", it's repetitive.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's right, but it felt weird to list "feed-forward networks" and "architectures" as features. We need a different introduction for the list then, one which fits "Feed-forward networks", "Optimization methods", but also "Designed to be easy to use and easy to extend". I'll figure something out.

@f0k f0k force-pushed the readme branch 3 times, most recently from 24aa417 to dcd2a84 Compare July 24, 2015 13:57
@f0k
Copy link
Member Author

f0k commented Jul 24, 2015

Didn't find a good way to drop the repeated "support for", there's no unifying introductory sentence for all the bullet points then (especially the last one sticks out). Instead I merged the first two and reworded the other two. I dropped the explicit list of "Multi-Layer Perceptrons (MLPs), Convolutional Neural Networks (CNNs), Long Short-Term Memory (LSTM) and Gated Recurrent Units (GRUs)" because it was long and not exactly aesthetic, but I think these would be good keywords for google. Maybe we can later add a bullet point with "Includes examples for ..., ..., ..., ..." along with links once we have them.

I've also extended the example to include training and testing.

Any objections against squashing and merging?

@f0k f0k force-pushed the readme branch 2 times, most recently from 2f09041 to 0c5884a Compare July 24, 2015 14:30
@benanne
Copy link
Member

benanne commented Jul 24, 2015

I kind of liked having the design goals up on the front page of the github repo, because I think they're really important and basically what set Lasagne apart from many other neural network libraries. This also ensures that everyone considering contributing has at least seen them. But I guess we should probably be shifting to catering towards users of the library, and not necessarily to contributors. So I'm okay with getting rid of them if most of you think that's better.

@dnouri
Copy link
Member

dnouri commented Jul 25, 2015

I kind of liked having the design goals up on the front page of the github repo, because I think they're really important and basically what set Lasagne apart from many other neural network libraries.

I had the same thought. +1 to putting design goals back.

@ebenolson
Copy link
Member

Focus: follow the Unix philosophy of “do one thing and do it well”, with a strong focus on feed-forward neural networks.

I think this at least should be revised in light of #294.

@benanne
Copy link
Member

benanne commented Jul 25, 2015

I guess so :) Although the design of the library is still pretty much focused on feedforward architectures, and RNNs were sort of built on top of that. I feel that some alternative libraries treat RNNs more like first-class citizens than we do, e.g. Blocks. But I'm okay with rephrasing it nevertheless.

@f0k
Copy link
Member Author

f0k commented Jul 28, 2015

Ok, but where would you put the goals then? I think they're quite long in their current form, taking the focus from what I think are more important parts (the example and the installation instructions). I tried to include the most important design goals in the features list, namely the focus not only on easy usage (which doesn't set us apart), but also on extensibility (this is important when we're targeting researchers) and modularity (that's important for users coming from Theano and not wanting to completely switch over to a new library). Shall we continue that route, or include a somewhat shorter description list of design goals? Shall we put it after the list of features, or into the "development" section? Finally, does anybody of you want to help with this? (Copying and pasting the design goals from the Sphinx documentation is something I can easily do myself, but I don't think that's a good solution.)

@craffel
Copy link
Member

craffel commented Jul 29, 2015

I guess so :) Although the design of the library is still pretty much focused on feedforward architectures, and RNNs were sort of built on top of that. I feel that some alternative libraries treat RNNs more like first-class citizens than we do, e.g. Blocks. But I'm okay with rephrasing it nevertheless.

At this point I don't think there's any way that RNNs are not as much of first-class-citizens in lasagne, aside from the fact that you and @f0k don't use them ;) Given in particular that we have made a good handful of design decisions motivated by them (and will probably make a few more ).

@benanne
Copy link
Member

benanne commented Jul 29, 2015

Depends how you look at it, really. I feel that the whole 'layer' paradigm is just inherently more suited to feedforward architectures than recurrent ones. You can nest recurrence within a layer, but that's not quite the same as treating it as a "first class citizen" imo.

Please don't get me wrong, this is not a value judgement of having recurrence in the library or anything, just an observation. I am in fact very happy that we have some high-quality code for supporting recurrent nets!

@craffel
Copy link
Member

craffel commented Jul 29, 2015

Depends how you look at it, really. I feel that the whole 'layer' paradigm is just inherently more suited to feedforward architectures than recurrent ones. You can nest recurrence within a layer, but that's not quite the same as treating it as a "first class citizen" imo.

Yes, but I think treating recurrence in another way is likely cumbersome; I see the layer architecture as just a straightforward way of building hierarchical networks in general - feedforward or recurrent.

Please don't get me wrong, this is not a value judgement of having recurrence in the library or anything, just an observation. I am in fact very happy that we have some high-quality code for supporting recurrent nets!

No worries, I see your point. I think the risk of stating that the main focus of the library is feedforward networks is that it will turn away people who are interested in recurrent networks needlessly, which is I think what @ebenolson is getting at.

@f0k f0k force-pushed the readme branch 2 times, most recently from e651e72 to 1423491 Compare August 4, 2015 14:17
@f0k
Copy link
Member Author

f0k commented Aug 4, 2015

I kind of liked having the design goals up on the front page of the github repo, because I think they're really important and basically what set Lasagne apart from many other neural network libraries.

Okay, I've put a shortened version of the design goals back in: https://github.com/f0k/Lasagne/tree/readme
They capture what I think is the essence of each of the goals. I like the look now, but I think the goals are not thought out well yet. I'll add some comments to the diff (although this PR is getting a bit out of hands).

Lasagne is a work in progress, input is welcome.
* **Simplicity**: Be easy to use and easy to extend, with as few abstractions
as possible, to facilitate research
* **Small interfaces**: Have as few classes and methods as possible
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is very closely related to "Simplicity". In the long version, it even says "This should make it easier to both use the library and extend it". I'd merge it with Simplicity or drop it.

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I'm okay with merging them :)

@f0k f0k changed the title Fleshed out README Fleshed out README and design goals Aug 5, 2015
@f0k
Copy link
Member Author

f0k commented Aug 5, 2015

Thanks for the feedback, Sander! I've rewritten the design goals a bit (both in the README and in the documentation). I'm quite satisfied with the result.
The only thing I'm slightly unsure about is finding a noun capturing what was previously called Don't get in the way. For now I've chosen Restraint, in the sense that we try to constrain the effect of features on users, or in the sense that the library doesn't put every feature in every user's face. I was actually looking for something that describes how the interface is supposed to be clean and unobtrusive until you need something. Like being in a room with curtained walls, and you only pull aside the ones you want. I'm open to suggestions, but very keen on keeping it a noun, to go well with the others, or a single adjective.

In any case, I'd like to bring this PR to an end, squash and merge it, it wasn't intended to run forever! :)

@benanne
Copy link
Member

benanne commented Aug 5, 2015

I thought "don't get in the way" was a little more immediately obvious. I'm not sure if there's a nice noun that captures the same essence (and that most people would understand). But the description is unambiguous so I think 'restraint' is fine for now :)

@f0k
Copy link
Member Author

f0k commented Aug 6, 2015

I thought "don't get in the way" was a little more immediately obvious.

It sure is, but stylistically it sticks out too much for my taste :)

Sooo... any objections against merging from anybody involved in the discussion? (I'll squash the first 6 commits into one before merging.)

@ebenolson
Copy link
Member

I think it would look better without the bold, it contrasts with the feature list above and draws focus.

I also think there's still a lot of overlap among the principles, but I don't have any very useful suggestions for that.

@f0k
Copy link
Member Author

f0k commented Aug 6, 2015

I think it would look better without the bold, it contrasts with the feature list above and draws focus.

Okay, I can take care of that when squashing. (I'll also remove the "[coming soon]".)

I also think there's still a lot of overlap among the principles

Yes, but I think it's better than before, and some overlap may make things easier to understand. For example, what we have for "Transparency" is already implied by "Simplicity" and "Modularity", but I think it's still useful to write it out. And what we have for "Restraint" is an aspect of "Pragmatism", but for some design decisions it may be easier to point to the former than to the latter.

but I don't have any very useful suggestions for that.

Good, let's leave it at that then! We can always change it later, PRs are for free on github ;)

f0k added a commit that referenced this pull request Aug 6, 2015
Fleshed out README and design goals
@f0k f0k merged commit b078170 into Lasagne:master Aug 6, 2015
@f0k f0k deleted the readme branch August 6, 2015 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

None yet

5 participants