- Published on
Weekly Report 2021/03/08-03/14
今週の振り返り。
Table of Contents
振り返り
Keep
- 英語でちょっと雑談できて自信につながった
- 話せた、嬉しいってなるんだけど振り返ると中身がスカスカなんだよな。でも嬉しい
- スピーキングもだけど、リスニング力が足りないのも困ることが実感できてきた
- お仕事の最初のタスクには慣れてきた
- 先週はなにをやりたいかはわかるんだけどHowがわからない状態だったが、今週は手が動くようになった
- ソフトウェアエンジニア楽しいってなってる
Problem & Try
- テクニカルな課題解決、視野せまくなりがち
- そもそもこう考えればもっと簡単に解ける、というのに気づけず時間を無駄にしてしまった
- あとにも書いたけど、ドメインの引き出しが少ないのは原因としてありそう
- 技術検証のデバッグが遅い
- 1回の試行に時間がかかるプログラムのデバッグが下手
- 最初に、「最短で検証するには何をどの順序でどうやるか」は考えるものの、実際そううまく行かず、一度詰まるとその後はだらだらとやってた気がする
- 定期的にプランニングするのが良さそう
- 今生産性落ちてるぞアラートがほしい
- そのドメインの知識が不足しているので何度も躓くのはありそうなので、時間をとってそのドメインの体系的な理解に努めている
- これ試したいけど、時間かかるんだよなあ、と後回し→最初に試すべきだった... みたいな苦いのがいくつかあった
- 最初に、「最短で検証するには何をどの順序でどうやるか」は考えるものの、実際そううまく行かず、一度詰まるとその後はだらだらとやってた気がする
- 1回の試行に時間がかかるプログラムのデバッグが下手
- 時間の使い方が下手
- ビルドなど5分くらいの微妙な時間があくことが多かったが、その間にコンテキストスイッチしようとして結果どっちのタスクもケアレスミスが増えた
- うまくコンテキストスイッチできるように、というよりは、そもそもその頻度をうまく下げられそうなのでそっち
- ビルドなど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,
)
converterの設定はこう
https://github.com/tensorflow/tensorflow/blob/master/tensorflow/lite/python/lite.py#L108
converter.optimizations = {
lite.Optimize.DEFAULT,
lite.Optimize.EXPERIMENTAL_SPARSITY
}