Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
OOP for ML
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Hampen
August 29, 2020
Programming
3
2.7k
OOP for ML
Object oriented proggraming for Machine learning implementation
Hampen
August 29, 2020
Tweet
Share
More Decks by Hampen
See All by Hampen
Tennis form visualization
hampen2929
1
2.2k
Feature vector calculation of tennis swing using Gaussian process regression and dissimilarity calculation by DTW distance
hampen2929
0
5.5k
Tennis swing recognition based on pose estimation and LightGBM
hampen2929
0
4.7k
Other Decks in Programming
See All in Programming
20260313 - Grafana & Friends Taipei #1 - Kubernetes v1.36 的開發雜記:那些困在 Alpha 加護病房太久的 Metrics
tico88612
0
220
DevinとClaude Code、SREの現場で使い倒してみた件
karia
1
1.1k
GoのDB アクセスにおける 「型安全」と「柔軟性」の両立 - Bob という選択肢
tak848
0
230
RAGでハマりがちな"Excelの罠"を、データの構造化で突破する
harumiweb
9
2.9k
メタプログラミングで実現する「コードを仕様にする」仕組み/nikkei-tech-talk43
nikkei_engineer_recruiting
0
200
Agentic AI: Evolution oder Revolution
mobilelarson
PRO
0
190
[PHPerKaigi 2026]PHPerKaigi2025の企画CodeGolfが最高すぎて社内で内製して半年運営して得た内製と運営の知見
ikezoemakoto
0
160
AI駆動開発の本音 〜Claude Code並列開発で見えたエンジニアの新しい役割〜
hisuzuya
4
520
new(1.26) ← これすき / kamakura.go #8
utgwkk
0
2.5k
Linux Kernelの1文字のミスで 権限昇格ができた話
rqda
0
1.8k
AI Assistants for Your Angular Solutions
manfredsteyer
PRO
0
150
ロボットのための工場に灯りは要らない
watany
11
3k
Featured
See All Featured
What Being in a Rock Band Can Teach Us About Real World SEO
427marketing
0
190
Heart Work Chapter 1 - Part 1
lfama
PRO
5
35k
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.1k
Rebuilding a faster, lazier Slack
samanthasiow
85
9.4k
Optimising Largest Contentful Paint
csswizardry
37
3.6k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
12
1.5k
Agile Actions for Facilitating Distributed Teams - ADO2019
mkilby
0
150
Test your architecture with Archunit
thirion
1
2.2k
エンジニアに許された特別な時間の終わり
watany
106
240k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
220
Claude Code どこまでも/ Claude Code Everywhere
nwiizo
64
53k
The agentic SEO stack - context over prompts
schlessera
0
700
Transcript
1 機械学習の実装から考えるオブジェクト指向 イベント︓ PyCon2020 ⽇時︓ 2020年8⽉29⽇(⼟) 16:30~ 会場︓ Zoom 名前︓
はんぺん(hampen2929)
2 ⾃⼰紹介 持丸 裕⽮ 【経歴】 2015年 東北⼤学⼯学部卒業 2016年 Fraunhofer IISB
(ドイツ留学) 2018年 東北⼤学⼤学院⼯学研究科卒業 2018年 IT系企業のData science部署配属 【仕事】 2018年 予測モデルの構築と分析 2019年 画像・動画の分析 2020年 動画分析アプリケーション構築 【プライベート】 テニスの動画分析 未踏AI はんぺん (hampen2929)
3 アジェンダ 背景 オブジェクト指向の特徴 まとめ 実装例の確認 ⼿続き型とオブジェクト指向
4 本発表は社会⼈3年⽬の現在の⾃分が社会⼈1年⽬の時に機械学習の実装をする上で知っ ておきたかったこと話すので、内容は初学者の⽅向けです。 本発表の対象者 説明 • 初学者のデータサイエンティスト・機械学習エンジニアで⼤学でコンピュータサイエンスを勉 強していないが機械学習などの実装をやる⽻⽬になった⼈ • Jupyter
notebookでつらつらと実装するのに限界を感じている⼈ • オブジェクト指向よくわからない⼈ 対象者 背景
5 機械学習の実装は基本的に⾟いので、オブジェクト指向の書き⽅で少しでも⾟さを緩和できるこ とを皆さんに知ってもらうことが⽬的です。 本発表の⽬的 ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 ノートブックの管理
• 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 モデルの更新が頻繁 オブジェクト指向で実装して⾟みを緩和 背景
6 モデリングをする際に⼿続き型からオブジェクト指向へのリファクタリングの溝を埋めたい。 ⼿続き型とオブジェクト指向 ⼿続き型 メリット • ⼩さなプログラムを書くにはちょうど良い • コードを追いかけやすい •
学習難易度が低い • 処理の再利⽤ができる • クラス、カプセル化、継承、ポリモーフィ ズムと⾏った特徴を使⽤できる • 修正を加えるのが⽐較的容易 オブジェクト指向 デメリット • 処理の再利⽤ができない • グローバル変数 • 修正を加えるのが難しい • ⼩さなプログラムを書くには向かない • コードを追いかけにくい • 学習難易度が⾼い 独学プログラマーp144, ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすすめの型を紹介︕ 分析 モデリング モデリング パッケージ システム 主な⽤途 ⼿続き型とオブジェクト指向
7 変更されない箇所を軸に、頻繁に変更されるであろう箇所をクラスに抽出する ↓ 変更に対して柔軟に対応できる ↓ 実装者が楽できる なぜオブジェクト指向で書くのか オブジェクト指向と10年戦ってわかったこと 実装者が楽できる なぜオブジェクト指向で書くのか
8 オブジェクト指向にはクラス化、カプセル化、継承、ポリモーフィズムの4つの特徴が存在する。 オブジェクト指向の4⼤要素 オブジェクト指向でなぜつくるのかp106、クリーンアーキテクチャ(カプセル化とは)、独学プログラマー クラス化 カプセル化 継承 ポリモーフィズム • 変数とメソッドを同じところ
にまとめること • 変数とメソッドを切り出すこ と • データをクラス内に隠蔽し て外から⾒えなくすること • メソッドや変数を親クラスと 呼ばれるクラスから受け継 ぐこと 説明 • 処理の中からデータやモデ ルなどのクラスをまとめる • 前処理、推論、後処理な どをメソッドとして切り出す • データを外から触れないよ うにする • モデルに必要な処理を親ク ラスで定義して⼦クラスに 継承させる 機械学習 での例 • 複数のクラスで中の実装が 違えど、同じインターフェー スで実装されること • モデルのメソッド名、引数、 返り値を同じにして違うクラ スを実装する • 整理整頓がされてどこにど の処理があるかがわかりや すい • ⽬的のメソッドごとに切り出 されているので、修正がし やすい • データを守ることができる • 共通の処理を実装しなくて よくなる • 実装を強いて実装部分が 明確になる 利点 • 利⽤側からは中のロジック を気にする必要がない • モデルの変更がしやすい オブジェクト指向の特徴
9 Pythonのモットーとして「みんな⼤⼈なんだから」が存在し、オープン(パブリック)であることがク ローズ(プライベート)であることより有益であるという思想がある。 Pythonにカプセル化は必要か︖ Effective Python第2版、項⽬42 プライベート属性よりパブリックな属性が好ましい パブリック属性 プライベート属性 •
クラスの外からは⾒えず使⽤ することができない 説明 • クラスの外から⾒えて使⽤する ことができる class Hoge(): self.__huga = “poyo” 実装例 class Hoge(): self.huga = “poyo” オブジェクト指向の特徴
10 メソッド名、引数、返り値が同じである共通のインターフェースを有することで、利⽤側からは中の ロジックを気にする必要がなくなり、モデルの変更がしやすくなる。 ポリモーフィズム ポリモーフィズムあり モデルA モデルB モデルC compute compute
compute インターフェイスが同じだから 使いやすいね♪ class_name(str) image(JpegImageFile) class_name(str) image(JpegImageFile) class_name(str) image(JpegImageFile) ポリモーフィズムなし インターフェイスが違うから 使いにくいね… モデルA モデルB モデルC compute get_result inference class_name(str) image(JpegImageFile) class_name(list) image(np.ndarray) class_name(dict) image(Tensor) オブジェクト指向の特徴
11 画像分類のモデルの実装を例に実装を確認していく。 実装例の確認 実装例の確認 画像分類モデル compute ”sports_car”
12 画像分類モデルを実装するにあたりインターフェイスと抽象クラスと具象クラスの3つのクラスを⽤い る。 オブジェクト指向を3つのクラスに分けて考える 画像分類ベースモデルクラス (抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス)
• 個々のクラス特有の処 理を実装する 説明 • 共通の処理を実装す る • 具体的な処理は実装 せずクラスの変数やメ ソッドのみを定義する • 個々の画像分類のモ デル特有の処理を実 装する 機械学習 での例 • 画像分類のモデルの共 通の処理を実装する • モデルの処理の流れを 定義する 実装例の確認
13 1. 機械学習のモデルとしての振る舞い 2. 画像分類の共通の処理 3. 個々の⼿法の画像分類モデル特有の処理 クラス化と継承 画像分類の処理 画像分類ベースモデルクラス
(抽象クラス) ベースモデルクラス (インターフェイス) 画像分類モデルクラス (具象クラス) 実装例の確認
14 画像分類のベースモデルクラスを継承して”get_model”のメソッドをオーバーライドするだけで作 成が可能である。 継承 画像分類のベースモデルクラス 画像分類のモデルたち 実装例の確認
15 インターフェースが同じなので双⽅のモデルは同じように使⽤できる。 ポリモーフィズム 画像分類のベースモデルクラス 画像分類のモデルたち 実装例の確認
16 オブジェクト指向を⽤いることで⾟みが少しだけ緩和された。 まとめ ⾟みエピソード • Jupyter notebookにつらつらと実装をしていると、最初は楽しいがだんだんと変数の管 理が複雑になったり、処理の繰り返しなどが⽬⽴ち始め管理が⼤変になる。 →クラスにまとめて処理をメソッドに切り出して管理を楽にすることができ(そう) ノートブックの管理
• 実装をした直後ならまだしも、実装してから時間がたった後に複雑な処理に対して修正 を加えるのは⼤変で苦痛を伴う作業になってしまう。 →クラスとメソッドが切り出されて修正箇所がわかりやすくなった 修正が⼤変 • 技術進歩の早い機械学習の領域において、新しく精度や推論速度に関して優れた⼿ 法が出てくるのは⽇常茶飯事であり、それに対応するために毎回スクラッチで処理を実装 するのでは時間がかかりすぎてしまう。 →ポリモーフィズムを使うことでモデルの差し替えが容易になった モデルの更新が頻繁 まとめ
17 n 本 Ø なぜオブジェクト指向で書くのか Ø 独学プログラマー Ø クリーンアーキテクチャ Ø
Effective Python 第2版 Ø ⾃⾛プログラマー n 記事 Ø ⼿続き型⾔語とは︖オブジェクト指向⾔語と⽐較しわかりやすく解説︕メリットやPythonにおすす めの型を紹介︕ Ø オブジェクト指向と10年戦ってわかったこと 参考⽂献 まとめ
18 ご静聴ありがとうございました︕