avatar
tkat0.dev
Published on

Weekly Report 2021/03/08-03/14

今週の振り返り。

Table of Contents

振り返り

Keep

  • 英語でちょっと雑談できて自信につながった
    • 話せた、嬉しいってなるんだけど振り返ると中身がスカスカなんだよな。でも嬉しい
    • スピーキングもだけど、リスニング力が足りないのも困ることが実感できてきた
  • お仕事の最初のタスクには慣れてきた
    • 先週はなにをやりたいかはわかるんだけどHowがわからない状態だったが、今週は手が動くようになった
    • ソフトウェアエンジニア楽しいってなってる

Problem & Try

  • テクニカルな課題解決、視野せまくなりがち
    • そもそもこう考えればもっと簡単に解ける、というのに気づけず時間を無駄にしてしまった
    • あとにも書いたけど、ドメインの引き出しが少ないのは原因としてありそう
  • 技術検証のデバッグが遅い
    • 1回の試行に時間がかかるプログラムのデバッグが下手
      • 最初に、「最短で検証するには何をどの順序でどうやるか」は考えるものの、実際そううまく行かず、一度詰まるとその後はだらだらとやってた気がする
        • 定期的にプランニングするのが良さそう
        • 今生産性落ちてるぞアラートがほしい
      • そのドメインの知識が不足しているので何度も躓くのはありそうなので、時間をとってそのドメインの体系的な理解に努めている
      • これ試したいけど、時間かかるんだよなあ、と後回し→最初に試すべきだった... みたいな苦いのがいくつかあった
  • 時間の使い方が下手
    • ビルドなど5分くらいの微妙な時間があくことが多かったが、その間にコンテキストスイッチしようとして結果どっちのタスクもケアレスミスが増えた
      • うまくコンテキストスイッチできるように、というよりは、そもそもその頻度をうまく下げられそうなのでそっち
  • 英語学習の時間を取らなかった
    • 今週はテクニカルな方を優先してしまい、英語はちゃんと勉強しなかった
      • カリキュラムつくってカレンダーにつっこむくらいしないとダメかもしれない
    • 相手から話題を振ってもらい話すのはまだいいんだけど、こちらから話し出したいときがあばばばってなる

その他トピック

「継続性アーキテクト」という生き方 - SMS Tech Blog

「継続性アーキテクト」という生き方 - SMS Tech Blog

特定のなにかにこだわりすぎることなく、広い引き出しを持って技術、チーム、フェーズなど色々なバランスを見て意思決定できるようになりたいって最近思います。

Working with Jupyter Notebooks in Visual Studio Code

Working with Jupyter Notebooks in Visual Studio Code

SSHで接続したサーバーでの開発で、ほとんど設定不要でデバッガやJupyter Notebookにつながるの嬉しい。

launch.jsonとかtask.jsonの機能をちゃんと調べたい。

Google AI Blog: Accelerating Neural Networks on Mobile and Web with Sparse Inference

Google AI Blog: Accelerating Neural Networks on Mobile and Web with Sparse Inference

TFLite x XNNPackでSparce Inferenceができるという話。圧縮時のweightサイズの削減だけでなく、Inference timeもちゃんとCPUで速くなる。

アルゴリズムは[1911.09723] Fast Sparse ConvNets

そのpretrained model https://github.com/google-research/google-research/tree/master/fastconvnets

Future workにあるように、GPUでもSparse inferenceができるようになると、ブラウザやデバイスで動かすモデル/タスクの選択肢が広がるので面白い活用が増えそう。

pruningの知識が今後も役立てられそうで嬉しい。

ちょっとだけ実装見た。

Pruning comprehensive guide  |  TensorFlow Model Optimization

modelをcloneするときの各layerに対するcallbackとして、model optimization toolkitのAPIを適用していく。 コードは読んでないけど、model.summary()したときのlayerのprefixが prune_low_magnitude_ のようになっているので、たぶんlayer自体ををpruning可能な実装に差し替えていて、最後にstrip_pruningというfunctionで元に戻すんだと思う。

import tensorflow_model_optimization as tfmot

# Create a base model
base_model = setup_model()
base_model.load_weights(pretrained_weights) # optional but recommended for model accuracy

# Helper function uses `prune_low_magnitude` to make only the 
# Dense layers train with pruning.
def apply_pruning_to_dense(layer):
  if isinstance(layer, tf.keras.layers.Dense):
    return tfmot.sparsity.keras.prune_low_magnitude(layer)
  return layer

# Use `tf.keras.models.clone_model` to apply `apply_pruning_to_dense` 
# to the layers of the model.
model_for_pruning = tf.keras.models.clone_model(
    base_model,
    clone_function=apply_pruning_to_dense,
)

https://github.com/tensorflow/model-optimization/blob/master/tensorflow_model_optimization/python/examples/sparsity/keras/mnist/mnist_e2e.py

converterの設定はこう

https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/python/lite.py#L108

converter.optimizations = {
    lite.Optimize.DEFAULT,
    lite.Optimize.EXPERIMENTAL_SPARSITY
}