はじめに
- 筆者は「Python何それおいしいの?」っていうレベルのプログラミング経験なしで情報系の学部に入学。
- 学部3年まではなんとか授業についていっていたものの、学部4年以降の研究でライブラリを読む際に挫折しかけました。
- そんな中でどうやってプログラミングスキルやライブラリの読み方、オープンソースの実装方法などを学んでいったかを、当時を思い出しながらここにまとめました。
- ターゲット:ネット上に転がってるサンプルコードやOSSのコードをどう読み進めればいいのか分からないorどうしたら書けるようになるのか分からない、かつ時間と根気がある人(どちらかがない人は恥を偲んで先輩に頼る、これしかないです)
(備考)筆者のプログラミング歴
学部1年:プログラミング経験ゼロで情報系学部に入学、Pythonについて学ぶ教養科目で初めてプログラミングを経験
学部2年:授業を通してPython、C、Java等のプログラミング課題をやりまくる
学部3年:初めてハッカソンに参加、OSSという概念をここで初めて知る
学部4年:Anaconda初めまして
修士1年:サークル(OBOG含)でアプリ共同開発を開始(修士2年次にリリース)
修士2年:AtCoder茶色(競プロのレートが特別高いわけではない)
社会人(現在):某企業のAI研究開発職のひよっこ🐤
プログラミング学習ステージ
Stage 1: スクリプト(自己完結型)
- まずは単一スクリプト(1つの
.py
ファイルまたは.ipynb
)でコードを書けるようになりましょう。- 例: PyTorch / TensorFlow を用いた MNIST分類をQiitaの記事を参考にしながら実装or写経。
(参考:PyTorchでMNISTを扱ってみた (機械学習))
- 例: PyTorch / TensorFlow を用いた MNIST分類をQiitaの記事を参考にしながら実装or写経。
-
可読性の高いコードを書く練習。
- 関数やクラス定義の冒頭にどんな関数・クラスなのかコメントを記述。3日後、1週間後に読み直してもどんなコードか分かるように書くことが大事。
- 入出力のデータ形式もメモするとなおよし。
# input: [N, 8], output: [N, 1]
Stage 2: ライブラリを読む(複数ファイル構成のコード)
- 複数のファイルやフォルダから構成されているライブラリのコードを読むときは重要なファイルや関数をたどることで整理。
-
README.md
を読んで、メインスクリプトを特定(例:train.py
,test.py
)。 - ツリー構造で整理し、理解を深める。
-
- デバッグは logging を活用。例えば以下のように設定しておくとどのファイルで起きたエラーなのか一目瞭然になる。
import logging logger = logging.getLogger(__name__) log_format = '%(asctime)s - %(name)s - %(levelname)s - %(message)s' logging.basicConfig(level=logging.DEBUG, format=log_format)
Stage 3: ライブラリを作る
- ライブラリが読めるようになったら書けるようにもなろう
- 機械学習系のライブラリは少なくともモデル系とデータセット系の分離を意識。
- それ以外は正直好みの問題。色んなライブラリを読みながら自分の好きなフォルダ構成を固めていきましょう。
- 機械学習系のライブラリは少なくともモデル系とデータセット系の分離を意識。
-
再現実験ができるように管理
-
実行毎にログフォルダを作成し、モデルやハイパーパラメータを保存。
-
importlib を活用し、変更に強い設計をする。以下はファイル名(文字列)からモジュール(import ○○と同等)として使えるようにするコードの例
import importlib.util import sys import os def import_module_from_file(file_path): module_name = os.path.basename(file_path).split('.')[0] spec = importlib.util.spec_from_file_location(module_name, file_path) module = importlib.util.module_from_spec(spec) sys.modules[module_name] = module spec.loader.exec_module(module) return module
-
Stage 4: 環境構築
- 複雑な環境構築が必要な場合も対処できるようになればもう完璧。
-
必要なパッケージのインストール方法を理解
-
conda
/pip
を活用。 -
environment.yml
やrequirements.txt
があれば利用。
-
-
インストール時のトラブル対処
-
torch
やtorch-geometric
を先にインストール。 -
conda
のbase
環境にインストールしていないか確認。 - バージョン違いによるエラーはネットで調査 or ChatGPT に質問。
-
-
必要なパッケージのインストール方法を理解
- そうはいってもどうしても環境構築ができない場合がある
- 必要なモジュールがpip/conda/GitHub で探しても見つからない場合
- どうしても使っているPythonのバージョンと合わない場合
- 関数が削除されている
→実装を諦めるor他のモジュールで代用する判断も必要。
まとめ
- 最初からコードが読める/書ける人なんていない。学習ステップは段階的に進めることが大事。初めの方は質より量。
- 他人のコードを読むことで沢山ノウハウを得られる。真似できる部分は真似する、ダメなところは反面教師。
- 環境構築に関してはマシン依存・他パッケージ依存な部分もあるので時には諦めも肝心。他に使えるオープンソースを探したり、別のライブラリで代用できないかを考えたり、最悪読んで参考にし自環境で使えるように再構築しましょう。