Keras環境セットアップ

書籍 PythonとKerasによるディープラーニング セットアップ

  • Hardware : MacBook Pro 2013 Late  
  • VM: Parallel Desktops  
  • OS: Ubuntu16.04LTS  

  • sudo apt-get update

  • sudo apt-get upgrade
  • sudo apt-get install python3-pip python3-dev
  • sudo -H pip3 install tensorflow
  • sudo -H pip3 install keras
  • sudo -H pip3 install jupyter
  • sudo -H pip3 install matplotlib
  • sudo -H pip3 install pydot-ng
  • sudo apt-get install graphviz
  • sudo apt-get install python-opencv

Life Hack

雑用に対する心得

  • 必ず一回断れ
  • 締切前に終わらせるな
  • 催促が来るまで手をつけるな
  • メールをすぐに返すな
  • クオリティは最低限にしろ
  • 休日深夜早朝は対応するな
  • 出張を上手く使え
  • 雑用はチキンレース

2018年8月10日追加

生産性に関するファインマンの四つの戦略

  1. 「すべてを知ろう」とするのをやめよ。
  2. 他人が何を考えているかを気にするな。
  3. 自分が何になりたいかではなく、何をしたいかを考えよ。
  4. ユーモアの感覚を持ち、正直に話せ。

2018年8月9日追加

AI論文

"Spatial: A Language and Compiler for Application Accelerators", David Koeplinger, et al.

  • paper
  • video
  • github
  • 要約
    • 業界は、パフォーマンスやエネルギー効率を向上させるために、FPGAやCGRAのような再構成可能なアーキテクチャに注目しています。残念ながら、これらのアーキテクチャの採用は、プログラミングモデルによって制限されていました。 HDLには生産性の抽象度がなく、より高いレベルの言語からのターゲット設定が難しい。 HLSツールはより生産的ですが、パフォーマンス最適化を難しくするソフトウェアとハ​​ードウェアの抽象概念の特別な組み合わせを提供します。 この作業では、アプリケーションアクセラレータのより高いレベルの説明のために、Spatialという新しいドメイン固有の言語とコンパイラについて説明します。 プログラマの生産性と設計性能の両方について、Spatialのハードウェア中心の抽象化について説明し、コンパイラのパス パイプラインスケジューリング、自動メモリバンキング、アクティブマシン学習による自動設計チューニングなど、これらの抽象化をサポートするために必要なものです。 一般的なソースコードからFPGAやCGRAをターゲットとする言語の能力を実証します。 Amazon EC2 F1インスタンス上でザイリンクスUltraScale + VU9P FPGAをターゲットとする場合、Spatialで書かれたアプリケーションは平均して42%短縮され、SDAccel HLSよりも平均2.9倍速くなります。
    • Industry is increasingly turning to reconfigurable architectures like FPGAs and CGRAs for improved performance and energy efficiency. Unfortunately, adoption of these architectures has been limited by their programming models. HDLs lack abstractions for productivity and are difficult to target from higher level languages. HLS tools are more productive, but offer an ad-hoc mix of software and hardware abstractions which make performance optimizations difficult. In this work, we describe a new domain-specific language and compiler called Spatial for higher level descriptions of application accelerators. We describe Spatial’s hardwarecentric abstractions for both programmer productivity and design performance, and summarize the compiler passes required to support these abstractions, including pipeline scheduling, automatic memory banking, and automated design tuning driven by active machine learning. We demonstrate the language’s ability to target FPGAs and CGRAs from common source code. We show that applications written in Spatial are, on average, 42% shorter and achieve a mean speedup of 2.9× over SDAccel HLS when targeting a Xilinx UltraScale+ VU9P FPGA on an Amazon EC2 F1 instance.

"LeFlow: Enabling Flexible FPGA High-Level Synthesis of Tensorflow Deep Neural Networks", Daniel H. Noronha, et al.

  • paper
  • video
  • github
  • 要約
    • 最近の研究では、フィールド・プログラマブル・ゲート・アレイ(FPGA)が機械学習アプリケーションの高速化に重要な役割を果たすことが示されています。機械学習アプリケーションの初期仕様は、Tensorflowのような高水準のPython指向のフレームワークを使用して行われることが多く、ベンダーツールを使用して合成するためにCまたはRTLのいずれかに手動で変換されます。この手動の変換ステップは時間がかかり、この重要な領域でFPGAの適用性を制限する専門知識を必要とします。本稿では、Tensorflowで記述された数値計算モデルを合成可能なハードウェアにマップするオープンソースのツールフローを紹介します。少数の柔軟性のないテンプレートによって制約されることが多い他のツールとは異なり、Googleのフローでは、Tensorflow仕様から直接LLVMコードを発行するGoogleのXLAコンパイラが使用されています。このLLVMコードは、高水準の合成ツールと共に使用して、自動的にハードウェアを生成することができます。私たちの流れは、ユーザが非常に少数のPythonコード行でディープニューラルネットワークを生成できることを示しています。
    • Recent work has shown that Field-Programmable Gate Arrays (FPGAs) play an important role in the acceleration of Machine Learning applications. Initial specification of machine learning applications are often done using a high-level Python-oriented framework such as Tensorflow, followed by a manual translation to either C or RTL for synthesis using vendor tools. This manual translation step is time-consuming and requires expertise that limit the applicability of FPGAs in this important domain. In this paper, we present an open-source tool-flow that maps numerical computation models written in Tensorflow to synthesizable hardware. Unlike other tools, which are often constrained by a small number of inflexible templates, our flow uses Google's XLA compiler which emits LLVM code directly from a Tensorflow specification. This LLVM code can then be used with a high-level synthesis tool to automatically generate hardware. We show that our flow allows users to generate Deep Neural Networks with very few lines of Python code.

"Deep Clustering for Unsupervised Learning of Visual Features", Mathilde Caron, et al.

  • paper
  • 要約
    • クラスタリングは、コンピュータビジョンで広範に適用され、研究されている教師なし学習方法の一種です。 大規模なデータセット上の視覚的特徴のエンドツーエンドの訓練にそれを適応させるためのほとんどの作業は行われていない。 本研究では、ニューラルネットワークのパラメータとその結果得られる特徴のクラスタ割り当てを共同して学習するクラスタリング手法であるDeepClusterを提示する。 DeepClusterは標準クラスタリングアルゴリズムk-meansを使用してフィーチャを反復的にグループ化し、後続の割り当てを監視として使用してネットワークの重みを更新します。 DeepClusterは、ImageNetやYFCC100Mのような大規模なデータセット上の畳み込みニューラルネットワークの監督されていないトレーニングに適用されます。 得られたモデルは、現在の技術水準を、すべての標準的なベンチマークでかなりのマージンを上回って優れている。
    • Clustering is a class of unsupervised learning methods that has been extensively applied and studied in computer vision. Little work has been done to adapt it to the end-to-end training of visual features on large scale datasets. In this work, we present DeepCluster, a clustering method that jointly learns the parameters of a neural network and the cluster assignments of the resulting features. DeepCluster iteratively groups the features with a standard clustering algorithm, k-means, and uses the subsequent assignments as supervision to update the weights of the network. We apply DeepCluster to the unsupervised training of convolutional neural networks on large datasets like ImageNet and YFCC100M. The resulting model outperforms the current state of the art by a significant margin on all the standard benchmarks.