ひよこ、通勤中。

通勤中の電車の中でひよこは何を思うのか。

rect(top, left, bottom, right)からIoU計算する

IoUとは: Intersection over Union (IoU) for object detection - PyImageSearch

import numpy as np
from sklearn.metrics import jaccard_score

N = 100 # 精度
# rect:  top, left, bottom, right (0~1, float)
def rect_to_array(rect):
    top, left, bottom, right = (np.array(rect) * N).astype(int)
    box = np.pad(np.ones((bottom - top, right - left)), ((top, N - bottom), (left, N - right)))
    return box

def iou(true, pred):
    true_array = rect_to_array(true)
    pred_array = rect_to_array(pred)
    return jaccard_score(true_array.flatten(), pred_array.flatten())

print (iou((0.5,0.5,1,1), (0,0, 0.8, 0.8)))
# 0.1125

saved_modelのグラフの中身がどうなってるかを確認する

1. ログにグラフ情報を書き出す

import tensorflow as tf
log_dir = "/tmp/tf-log/"

graph = tf.Graph()
with tf.Session(graph=graph) as session:
    loaded = tf.saved_model.load(
        session,
        {'serve'},
        ここにsaved_modelのpath
    )
    
    train_writer = tf.summary.FileWriter(log_dir)
    train_writer.add_graph(session.graph)

2. tensorboardで見る

tensorboard --logdir /tmp/tf-log

Docker/kubernetes関連本メモ

これ読みながらのメモ

Docker/Kubernetes 実践コンテナ開発入門

Docker/Kubernetes 実践コンテナ開発入門

alias:

  • k: kubectl

Dockerコンテナのdeploy

  • --nameは本番環境では使わない -docker image prune
    • 現時点で使ってないimageの削除
  • docker container stats [container id]
    • container を top する

docker-compose

  • --build option で毎回ビルド
  • volumes
    • local:dest
  • container-name で名前つけれる

実用的なコンテナ構築とデプロイ

  • データはData Volumeコンテナに持たせる
  • busybox
    • data volumeとかに使われる最小限の軽量OS
  • --volume-from [volume container name]
    • volumeが共有される

local(Docker for Mac)でkubenetes

  1. kubenetesのpreferenceからkubenetesを起動
  2. kubectxコマンドで確認するとdocker-for-desktop というクラスタができている

training

  • k proxy でpodたちと通信できるproxyが立ち上がる
  • k exec -it POD COMMAND -c CONTAINER で実行中のコンテナに入る

deploy

  • k rollout history deploy DEPLOY でdeployのhistoryが見えれる。(--recordつけてapplyしたdeploymentの)
  • k rollout history deployment DEPLOYでrollback

service (svc)

  • cluster内のserviceは Service名.Namespace名.svc.local で名前解決できる
  • ClusterIP Service(default): 内部IPアドレスにserviceを公開できる
  • NodePort Service: 各ノード上からServiceポートに接続するためのglobalなportを空ける
  • LoadBalancer Service: クラウドで提供されているロードバランサと連携する
  • ExternalName Service: kuberenetesから外部ホストを解決するためのえい

いつも使うkubectlのコマンド

切り替え

  • 使ったことあるクラスタ一覧: kubectx
  • クラスタ切り替えkubectx <NAME>

  • 使ったことあるnamespace: kubens

  • namespace切り替え: kubens <NAME>

brew install kubectxでkubectxとkubensが入る (ahmetb/kubectx: Fast way to switch between clusters and namespaces in kubectl)

よく使うやつ

  • pod一覧 k get pods --sort-by=.metadata.creationTimestamp

alias: kubectl -> k

関数の引数を固定した関数を作る

functools.partialを使うと引数を固定した関数を作ることができる。

例えば以下のような引数を2つ受け取る関数args2を、functools.partialを使って1つ目の引数aを固定したargs1を作ると以下のような感じに使える。

import functools

def args2(a, b):
    print(f"a:{a} b:{b}")

args1 = functools.partial(args2, 'a')
args1('b')
# a:a b:b

しゃべる英語めも

日常会話

  • 平凡な mediocrity
  • がんばる
    • 努力する strive
    • もがき苦しみながらがんばる struggle
  • しようとしている I'd try to ~
  • XX時ならいいよ Any time after/before XX is fine.
  • こっそり見る sneak a peek
  • 頼みを受ける/断る accept/refuse

自己紹介

  • はじめまして(ビジネス) Pleased to meet you
  • {NAME}って呼んでね you can call me {NAME}
  • 20代後半です I'm late twenties.
  • 以前は〜に勤めていました。 I worked for ... .
  • 〜については結構経験があります。 I have a lot of experience in ...
  • 専門は〜です。 My specialty is ...

仕事便利フェーズ

  • 〜について話しますね Let's me explain about... .
  • 無料 for free / free of charge
  • 〜をお願いする I ask - to ~

食べ物

  • もやし bean sprout
  • なす egg plant