Design Documents

Architecture Diagram

Architecture Diagram

Platform Selection

Programming languages: 

  • Python [Final Selection]
    • Pros:
      • Wide array of established packages for data processing
      • Flexible, easily readable code
      • Easily portable
    • Cons:
      • Slow execution/compilation
      • Above average memory use
  • Java/Javascript
    • Pros:
      • Greater portability to website based UI
      • Quite fast
      • Wide support in various types of development
    • Cons:
      • Inconsistent between devices/browsers
      • Javascript use introduces some security flaws

Specialty Packages:

  • JavaML
    • Pros:
      • Works with Java
    • Cons:
      • Hasn’t been updated since 2012
  • PyTorch
    • Pros:
      • Closer-to-native integration/support & speed
      • Incredibly popular
      • Can utilize most of the usual python debugging tools
    • Cons:
      • Limited options when it comes to visualization of data
  • TensorFlow [Final Selection]
    • Pros:
      • Aligns with client’s knowledge of machine learning, enabling better meshing with client’s pre-existing application
      • Incredibly popular
      • Tensorboard offers a lot in terms of visualization
    • Cons:
      • Less popular than PyTorch, as such, prospective longevity is lower
      • Debugging is much less intuitive

Other tools:

  • Jupyter Notebook [Final Selection]
    • Pros:
      • Quick setup for development
      • Naturally segment code
      • Print values as individual segments execute
      • Runs in the browser via a kernel
    • Cons:
      • Not as integrated as something like PyCharm or VS Code
      • Difficulty debugging

Overall Decisions:

  • Since the main objective of our project is to train a model, we’re primarily concerned with making choices that affect our ability to work on the model quickly and in a portable format. Aside from that, the model is meant to be used with an app our client has already developed. Because of this, our work on a UI will be very light, if at all. Some members of our team had previously worked with Jupyter Notebooks/TensorFlow, so we decided to stick to those in our development process, especially since our client is most acquainted with TensorFlow in the simple work he’s done prior to us entering the scope of the project.