CS230 Final Project Information

One of CS230's main goals is to prepare you to apply machine learning algorithms to real-world tasks, or to leave you well-qualified to start machine learning or AI research. The final project is intended to start you in these directions.

For group-specific questions regarding projects, please create a private post on Piazza, or email cs230-project@cs.stanford.edu. Please first have a look through the frequently asked questions.

Acknowledgement: This project description is using part of CS229 and Brunskill's CS234 project description, special thanks to CS229 and CS234 teaching staff.

Previous Projects

CS230 Spring 2018 Projects CS230 Winter 2018 Projects CS230 Fall 2017 Projects

Project Starter Package

The teaching team has put together a github repository with project code examples, including a computer vision and a natural language processing example (both in Tensorflow and Pytorch). There is also a series of posts to help you familiarize yourself with the project code examples, get ideas on how to structure your deep learning project code, and to setup AWS. The code examples posted are optional and are only meant to help you with your final project. The code can be reused in your projects, but the examples presented are not complex enough to meet the expectations of a quarterly project. For specific questions about the code/posts, please drop by Guillaume Genthial (Tensorflow NLP), Olivier Moindrot (Tensorflow Vision), Surag Nair (PyTorch) or Russell Kaplan's (AWS setup) office hours.

Project Topics

This quarter in CS230, you will learn about a wide range of deep learning applications. Part of the learning will be online, during in-class lectures and when completing assignments, but you will really experience hands-on work in your final project. We would like you to choose wisely a project that fits your interests. One that would be both motivating and technically challenging.

Most students do one of three kinds of projects:

  1. Application project. This is by far the most common: Pick an application that interests you, and explore how best to apply learning algorithms to solve it.
  2. Algorithmic project. Pick a problem or family of problems, and develop a new learning algorithm, or a novel variant of an existing algorithm, to solve it.
  3. Theoretical project. Prove some interesting/non-trivial properties of a new or an existing learning algorithm. (This is often quite difficult, and so very few, if any, projects will be purely theoretical.)
Some projects will also combine elements of applications and algorithms.

Many fantastic class projects come from students picking either an application area that they're interested in, or picking some subfield of machine learning that they want to explore more. So, pick something that you can get excited and passionate about! Be brave rather than timid, and do feel free to propose ambitious things that you're excited about. (Just be sure to ask us for help if you're uncertain how to best get started.) Alternatively, if you're already working on a research or industry project that deep learning might apply to, then you may already have a great project idea.

A very good CS230 project will be a publishable or nearly-publishable piece of work. Each year, some number of students continue working on their projects after completing CS230, submitting their work to a conferences or journals. Thus, for inspiration, you might also look at some recent deep learning research papers. Two of the main machine learning conferences are ICML and NIPS. You can find papers from recent ICML conferences online: (here). All NIPS papers are online: (here). Finally, looking at class projects from other machine learning/ deep learning classes is a good way to get ideas (CS229 Fall 2017, CS231N Spring 2017, CS224N Winter 2017).

Once you have identified a topic of interest, it can be useful to look up existing research on relevant topics by searching related keywords on an academic search engine such as: http://scholar.google.com. Another important aspect of designing your project is to identify one or several datasets suitable for your topic of interest. If that data needs considerable pre-processing  to suit your task, or that you intend to collect the needed data yourself, keep in mind that this is only one part of the expected project work, but can often take considerable time. We still expect a solid methodology and discussion of results, so pace your project accordingly.

Notes on a few specific types of projects:

Project Parts: Proposal, Milestone, Poster, & Final Report

This section contains the detailed instructions for the different parts of your project.

Submission: We’ll be using Gradescope for submission of all four parts of the final project. We’ll announce when submissions are open for each part. You should submit on Gradescope as a group: that is, for each part, please make one submission for your entire project group and tag your team members.


We will not be disclosing the breakdown of the 40% that the final project is worth amongst the different parts, but the poster and final report will combine to be the majority of the grade. Projects will be evaluated based on:

In order to highlight these components, it is important you present a solid discussion regarding the learnings from the development of your method, and summarizing how your work compares to existing approaches.

Project Proposals

Deadline: October 14th, Sunday 11:59 PM
In the project proposal, you'll pick a project idea to work on early and receive feedback from the TAs. If your proposed project will be done jointly with a different class' project, you should obtain approval from the other instructor and approval from us. Please come to the project office hours to discuss with us if you would like to do a joint project. You should submit your proposals on Gradescope. All students should already be added to the course page on Gradescope via your SUNet IDs. If you are not, please create an account with your Stanford email and enroll in CS230.

In the proposal, below your project title, include the project category. The category can be one of:

  • Computer Vision
  • Natural Language Processing
  • Generative Modeling
  • Others (Please specify!)
  • Speech Recognition
  • Reinforcement Learning
  • Healthcare

Project mentorsBased off of the topic you choose in your proposal, we’ll suggest a project mentor given the areas of expertise of the TAs. This is just a recommendation; feel free to speak with other TAs as well.

Your proposal should be a PDF document, giving the title of the project, the project category, the full names of all of your team members, the SUNet ID of your team members, and a 300-500 word description of what you plan to do.

Your project proposal should include the following information:
  • What is the problem that you will be investigating? Why is it interesting?
  • What are the challenges of this project?
  • What dataset are you using? How do you plan to collect it?
  • What method or algorithm are you proposing? If there are existing implementations, will you use them and how? How do you plan to improve or modify such implementations?
  • What reading will you examine to provide context and background? If relevant, what papers do you refer to?
  • How will you evaluate your results? Qualitatively, what kind of results do you expect (e.g. plots or figures)?Quantitatively, what kind of analysis will you use to evaluate and/or compare your results (e.g. what performance metrics or statistical tests)?
Presenting pointers to one relevant dataset and one example of prior research on the topic are a valuable (optional) addition.
GradingThe project proposal is mainly intended to make sure you decide on a project topic and get feedback from TAs early. As long as your proposal follows the instructions above and the project seems to have been thought out with a reasonable plan, you should do well on the proposal.
Submission Submit on Gradescope (see description under deadline for instructions)


Deadline: November 9th, Friday 11:59pm

The milestone will help you make sure you're on track, and should describe what you've accomplished so far, and very briefly say what else you plan to do. You should write it as if it's an “early draft" of what will turn into your final project. You can write it as if you're writing the first few pages of your final project report, so that you can re-use most of the milestone text in your final report. Please write the milestone (and final report) keeping in mind that the intended audience is Profs. Ng and Katanforoosh and the TAs. Thus, for example, you should not spend two pages explaining what logistic regression is. Your milestone should include the full names of all your team members and state the full title of your project. Note: We will expect your final writeup to be on the same topic as your milestone. In order to help you the most, we expect you to submit your running code. Your code should contain a baseline model for your application. Along with your baseline model, you are welcome to submit additional parts of your code such as data pre-processing, data augmentation, accuracy matric(s), and/or other models you have tried. Please clean your code before submitting, comment on it, and cite any resources you used. Please do not submit your dataset. However, you may include a few samples of your data in the report if you wish.

ContributionsPlease include a section that describes what each team member worked on and contributed to the project. This is to make sure team members are carrying a fair share of the work for projects.
Grading The milestone is mostly intended to get feedback from TAs to make sure you’re making reasonable progress. As long as your milestone follows the instructions and you seem to have tested any assumptions which might prevent your team from completing the project, you should do well on the milestone.
Format Your milestone should be at most 3 pages, excluding references. Similar to to the proposal, it should include
  • Title, Author(s)
  • Introduction: this section introduces your project, why it’s important or interesting.
  • Make sure to submit your code as well as your milestone report. Do not submit your dataset. It is okay to include a few samples though.
  • Details on the dataset
  • Approach: Describe the current steps you have done. If you are implementing an algorithm, you should have started implementation and ideally have some early stage results. Describe precisely the remaining work you expect to complete. We ideally would like to see a model description and a training strategy (loss function for instance).
Submission Submit on Gradescope. Code can either be a link to a github repository, or the relevant files themselves.

Poster Presentations

Date: December 14th, Friday (8:30am - 11:30am)
Location: ACSR Basketball Courts

The class projects will be presented at a poster presentation, at a location and time that will be announced later. Each team should prepare a poster, and be prepared to give a very short explanation, in front of the poster, about their work. At the poster session, you'll also have an opportunity to see what everyone else did for their projects. We will supply poster-boards and easels for displaying the posters.

FormatHere are some poster guidelines (please note that 36x24 in means 36 in wide by 24 in tall, i.e. it's better if your poster is formatted landscape). You can also look at posters from previous years in CS229/CS231N/CS224N. Note: Despite example given in guidelines, posters with nice, illustrative figures are preferred over posters with lots of text.
Grading We will be grading posters on the poster quality and clarity, the technical content of the poster, as well as the knowledge demonstrated by the team when discussing their work with teaching staff at the poster session.

Final Writeup

Deadline: December 16th, Sunday 11:59PM

Because the teaching staff will have only a few hours to see a large number of posters at the poster session, we'll only be able to get an overview of the work you did at the session. We know that most students work very hard on the final projects, and so we are extremely careful to give each writeup ample attention, and read and try very hard to understand everything you describe in it.

After the class, we will also post all the final writeups online so that you can read about each other's' work. If you do not want your write-up to be posted online, then please create a private Piazza post or contact us at cs230-project@cs.stanford.edu at least a week in advance of the final submission deadline.


Final project writeups can be at most 5 pages long (including appendices and figures). We will allow for extra pages containing only references. If you did this work in collaboration with someone else, or if someone else (such as another professor) had advised you on this work, your write-up must fully acknowledge their contributions. For shared projects, we also require that you submit the final report from the class you're sharing the project with. You are strongly encouraged to use this format (here's a link to the overleaf files). If you are not using this format, make sure to include all sections given in the format.

ContributionsPlease include a section that describes what each team member worked on and contributed to the project.
CodePlease include a zip file or peferably a link to a Github repository with the code for your final project. You do not have to include the data or additional libraries (so if you submit a zip file, it should not exceed 5MB).
GradingThe final report will be judged based off of the clarity of the report, the relevance of the project to topics taught in CS230, the novelty of the problem, and the technical quality and significance of the work.

Project FAQs

What are the deliverables as part of the term project?
The project has four deliverables:
  1. Proposal
  2. Milestone
  3. Poster
  4. Final report

Deadlines are listed in the project page and on the schedule page of the website.

Should final project use only methods taught in classroom?

No, we don't restrict you to only use methods/topics/problems taught in class. That said, you can always consult a TA if you are unsure about any method or problem statement.

Is it okay to use a dataset that is not public ?

We don't mind you using a dataset that is not public, as long as you have the required permissions to use it. We don't require you to share the dataset either as long as you can accurately describe it in the Final Report.

Is it okay to combine the CS230 term project with that of another class ?
In general it is possible to combine your project for CS230 and another class, but with the following caveats:
  1. You should make sure that you follow all the guidelines and requirements for the CS230 project (in addition to the requirements of the other class). So, if you'd like to combine your CS230 project with a class X but class X's policies don't allow for it, you cannot do it.
  2. You cannot turn in an identical project for both classes, but you can share common infrastructure/code base/datasets across the two classes.
  3. Clearly indicate in your milestone and final report, which part of the project is done for CS230 and which part is done for a class other than CS230. For shared projects, we also require that you submit the final report from the class you're sharing the project with.
Do all team members need to be enrolled in CS230?

No, but please explicitly state the work which was done by team members enrolled in CS230 in your proposal, milestone and final report. This extends to projects that were done in collaboration with research groups as well.

What are acceptable team sizes and how does grading differ as a function of the team size ?

We recommend teams of 3 students, while teams sizes of 1 or 2 are also acceptable. The team size will be taken under consideration when evaluating the scope of the project in breadth and depth, meaning that a three-person team is expected to accomplish more than a one-person team would.

The reason we encourage students to form teams of 3 is that, in our experience, this size usually fits best the expectations for the CS230 projects. In particular, we expect the team to submit a completed project (even for team of 1 or 2), so keep in mind that all projects require to spend a decent minimum effort towards gathering data, and setting up the infrastructure to reach some form of result. In a three-person team this can be shared much better, allowing the team to focus a lot more on the interesting stuff, e.g. results and discussion.

In exceptional cases, we can allow a team of 4 people. If you plan to work on a project in a team of 4, please come talk to one of the TAs beforehand so we can ensure that the project has a large enough scope.

Is it okay to miss the poster session?
Part of your project grade part depends on your presentation at the poster session, so we really urge you not to miss it. That said, if (and only if) you have a final exam conflict there are a few possibilities:
  1. If your other class offers an alternative time for the exam, you should choose that.
  2. If you are working on the project as a team, the rest of the team could present the poster without you there.
  3. If none of above options work for you, come talk to one of the TAs or send us an email at cs230-project@cs.stanford.edu.
What fraction of the final grade is the project?

The term project is 40% of the final grade.