【pytorch】caltech-101 を使ってCNNモデルの歴史を辿る【VGG16からEfficientNetまで】
備考 caltech-101 の中にはモノクロ画像(チャンネル数1)が混ざっているため、前処理でチャンネル数を3に変換する。 学習済みのモデルを使用して、学習をさせる GPUはA2000 12GBを使用する 今回はあくまでもモデルごとの違いをコードを通じて体感することが目的。パラメータが最適であるかは不問。 requirements.txt cuda-bindings==13.2.0 cuda-pathfinder==1.5.2 cuda-toolkit==13.0.2 filelock==3.25.2 fsspec==2026.3.0 Jinja2==3.1.6 MarkupSafe==3.0.3 mpmath==1.3.0 networkx==3.4.2 numpy==2.2.6 nvidia-cublas==13.1.0.3 nvidia-cuda-cupti==13.0.85 nvidia-cuda-nvrtc==13.0.88 nvidia-cuda-runtime==13.0.96 nvidia-cudnn-cu13==9.19.0.56 nvidia-cufft==12.0.0.61 nvidia-cufile==1.15.1.6 nvidia-curand==10.4.0.35 nvidia-cusolver==12.0.4.66 nvidia-cusparse==12.6.3.3 nvidia-cusparselt-cu13==0.8.0 nvidia-nccl-cu13==2.28.9 nvidia-nvjitlink==13.0.88 nvidia-nvshmem-cu13==3.4.5 nvidia-nvtx==13.0.85 pillow==12.2.0 scipy==1.15.3 sympy==1.14.0 torch==2.11.0 torchvision==0.26.0 triton==3.6.0 typing_extensions==4.15.0 VGG16 VGG16 は3x3 畳み込みをとにかく深くして、単純にすることを目 ...pytorch の nn.moduleを継承して自作AIモデルを作り、CNNモデルの歴史を辿る
CNNの歴史。 この歴史に沿って、FassionMNISTに対し、nn.moduleで各AIモデルに沿ったモデルを作る。 VGG 3x3 の畳み込みをただ深く積み重ねる class VGG_Fashion(nn.Module): def __init__(self): super(VGG_Fashion, self).__init__() self.features = nn.Sequential( # Block 1 nn.Conv2d(1, 32, 3, padding=1), nn.ReLU(), nn.Conv2d(32, 32, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2), # 14x14 # Block 2 nn.Conv2d(32, 64, 3, padding=1), nn.ReLU(), nn.Conv2d(64, 64, 3, padding=1), nn.ReLU(), nn.MaxPool2d(2) # 7x7 ) self.classifier = nn.Sequential( nn.Linear(64 * 7 * 7, 512), nn.ReLU(), nn.Dropout(0.5), nn.Linear(512, 10) ) GoogLeNet 1x1 フィルタを使用して次元数を削減している。(※ 5x5 畳み込みはサイズの都合上、省略) class InceptionModule(nn.Module): def __init__(self, in_ch, out_1x1, out_3x3): super().__init__() self.branch1 = nn.Conv2d(in_ch, out_1x1, kernel_size=1) self.branch2 = nn.Sequential( nn.Conv2d(in_ch, out_3x3//2, kernel_size=1), nn.Conv2d(out_3x3//2, out_3x3, kernel_size=3, padding=1) ) def forward(self, x): ...動画の扱い方の学習ロードマップ
Node.jsでCRUD簡易掲示板を作る【RestfulAPI+SQLite】
Node.jsはサーバーサイドで動作するJavaScriptの実行環境である。 Node.jsの強みは非同期処理。DBやファイルIO、リクエスト・レスポンスなどで発生するIOバウンドの処理を高速化できる。 本記事では、APIサーバーとして動作できるよう、基本のCRUDを解説する。 環境構築 mkdir startup_bbs && cd startup_bbs npm init npm install express npm install sqlite3 基本のHelloworld index.js // API const express = require("express"); const app = express(); app.get("/", (req, res) => { const messages = [ {"message":"helloworld"} ] res.json(messages); }); // サーバー起動 app.listen(3000, ...サーバー版UbuntuにGNOMEをインストールする
sudo apt install ubuntu desktop sudo shutdown -r now これだけで良い。 インストールしたGNOMEを削除するには、依存パッケージも合わせて削除をする必要がある。 sudo apt purge gnome-shell* gnome-session* gdm3* sudo apt autoremove --purge systemctlからGUIを無効化する方法もある。 削除が手間な場合、後でまたデスクトップを使う場合はこちらのほうが簡単。 sudo systemctl set-default multi-user.target sudo reboot ...MicroSoft Accessの制約メモ
EXISTSの使い方
DBはOracle。 外部キーを使った存在チェック SELECT d.department_id, d.department_name FROM departments d WHERE EXISTS ( SELECT 1 FROM employees e WHERE e.department_id = d.department_id ); このSQLは、部署内に社員がいる部署だけを返す。 まず、departments内のデータを取り出す。 employeesからdepartment_id で一致するものが1件でもあれば、そのdepartmentsを表示する。 イメージ的には全走をして、行が見つかればTRUEを返してアーリーリターンをしている。(※ただしDB ...Oracleデータベース演習
結合と集約をセットで扱う SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES E INNER JOIN JOBS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; 補足1: OracleではテーブルにはASを使ってはいけない。 PostgreSQLやMySQL、SQLiteでは列のエイリアスに使うASを、テーブルにも使える。 よって、以下SQLは有効。 SELECT E.JOB_ID, SUM(E.SALARY) AS SUM_SALARY , AVG(E.SALARY) AS AVG_SALARY, J.JOB_TITLE FROM EMPLOYEES AS E INNER JOIN JOBS AS J ON J.JOB_ID = E.JOB_ID GROUP BY E.JOB_ID , J.JOB_TITLE; しかし、Oracleにおいては、テーブルのエイリアスにASを使ってはいけない。 よって ...PySide6のQtを使ってGUIアプリを作る
PythonでもGUIアプリは作れる。 標準モジュールのtkinterと違い、より高度なものを作れる。 【関数】クリックで1ずつ増える 基本のボタン押下で1ずつ増えるコード from PySide6.QtWidgets import QApplication, QMainWindow, QPushButton app = QApplication([]) counter = 0 def click_counter(): global counter counter += 1 button.setText(f"{counter} 回押しました。") print(counter) window = QMainWindow() window.setWindowTitle("テストウィンドウ") button = QPushButton(f"{counter} 回押しました。") button.clicked.connect(click_counter) window.setCentralWidget(button) window.resize(300, 200) window.show() app.exec() このコードではクラスを使わ ...