け日記

最近はPythonでいろいろやってます

PyTorchのTensorはどうやってデータを持っているのか?

お仕事でPyTorchを扱っているのですが、以下のような疑問がふつふつと湧いてきましたので、Tensorのデータが実際にはどうやって保持・管理されているのかを調べて整理しました。 image_tensor = minibatch_tensor[i, :, :, :]はメモリコピーが発生するのか?…

PyTorchでパラメータ数をカウントする

PyTorchのモデルのパラメータ数をカウントする方法です。2パターンあります。 1. Moduleのparametersメソッドを合計する Module.parametersメソッドで各層のパラメータがtensorで取得できますので、numelで要素数を合計していくことでパラメータ数を計算でき…

論文メモ: Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

物体検出の分野でブレイクスルーとなったFaster R-CNNの提案論文 Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks (arXiv) についての備忘録として整理します。 ポイント 先発のFast R-CNNで時間を要していた物体領域候補…

SQSを永遠にポーリングするPythonパッケージ sqs-polling を作りました

タイトルの通りで、SQSを永遠にポーリングするPythonパッケージを作ってPyPiに公開しました。 pypi.org GitHubはこちら。 github.com 使い方 pip install sqs-pollingでインストール。あとは以下のように記述すると、延々とSQSからメッセージを取り出し、コ…

論文メモ: MobileNets: Efficient Convolutional Neural Networks for Mobile Vision Applications

今回は軽量・高速なCNNの紹介です。 最新のいかついモデルを、GPUフル回転で学習し、目標の精度を達成したとしても、いざ実際にシステムに組み込む段階になると推論の遅さが足かせになって導入できない、というケースはしばしばあるのかなと思います。そうい…

Python: unittest.mockでモックを作ってテストする

Python (3.3以降) でユニットテストのモックを楽に作れるunittest.mockが標準ライブラリとして提供されてます。今回はその紹介を行います。 外部モジュールに依存した実装をテストする難しさ ユニットテストの実現において、DBやWeb APIなどのアプリケーショ…

AWS SQSのメッセージをPythonで送受信する

AWSのキューメッセージサービスSQSのメッセージを、Boto3を使ってPythonで送受信する方法の備忘録です。 Boto3のインストール、AWSの設定、および、SQSの作成は完了している前提です。 $ pip install boto3 $ aws configure AWS Access Key ID [************…

Python: ファイルパスをオブジェクトっぽく操作するpathlib

Pythonでのファイル操作は os + glob の組み合わせなどでどうにかすることが多いですが、標準モジュールのpathlibを使うとサクッと実装できることもあります。 pathlib --- オブジェクト指向のファイルシステムパス — Python 3.7.5rc1 ドキュメント osモジュ…

Python: requestsでBasic認証

Basic認証がかけられたエンドポイントへ、requestsを使ってリクエストする方法です。 $ pip install requests ID/PWでrequests.auth.HTTPBasicAuthを生成し、requestsのメソッド (ここではpost) の auth へ渡してあげるのがポイントです。 HTTPDigestAuthやH…

OpenCV: ラベリング

今回はOpenCVを使って画像のラベリングを行います。いらすとやさんの画像を使わせていただきました。 ラベリングは画像を連続する領域ごとにラベルを付けることです。上の画像であれば、左の棒人形と右の棒人形が分離しているので、別々のラベルになります。…

SageMakerで起動時に実行するスクリプトを設定する

SageMakerは所定の場所に置かれたファイル以外はインスタンス停止によってリフレッシュされます。そのためSageMakerにプリインストールされていないコマンドやライブラリなどを使いたい場合、起動のたびにインストールする必要があります。 ライフサイクルイ…

SageMakerのコードをGitHubで管理する

SageMakerで分析・学習・推論のために作成した.ipynbファイルなどのバージョン管理やチームメンバへの共有を行いたい、ということが日々あります。 今回はSageMakerとGitHubを連携させる方法について紹介します。スクリーンショットたくさんです。 GitHubで…

Python: プログレスバーを表示する (tqdm)

tqdmを使ってプログレスバーを表示する方法について紹介します。 Kerasなどのフレームワークは良い感じにビジュアライズしてくれるのですが、自前の前処理などで進捗表示したい場合に便利です。 $ pip install tqdm github.com 基本的にはシーケンスやイテレ…

Python: ファイルを移動する (shutil.move)

ファイルのETLを実装しているとLinuxのmvコマンド相当のことをよくやるのですが、Pythonではshutil.moveを使うと便利です。 https://docs.python.org/ja/3/library/shutil.html#shutil.move 例としてこのようなディレクトリ構造を仮定します。 % tree . ├── …

Python: リストのリスト・辞書のリストを展開 (flat) するワンライナー

[[...], [...], [...]] -> [..., ..., ...] としたいケースです。 内包表記は多重ループ可能なので、ワンラインで展開できます。 list_in_list = [[0, 1, 2], [3, 4], [5, 6, 7, 8]] flatten_list = [v for child_list in list_in_list for v in child_list]…

OpenCV: 2値化

前回・前々回と引き続き、OpenCVを触っていきます。 2値化 画像はチャネル (グレー画像であれば1チャネル, RGB画像であれば3チャネル) ごとに階調を持っており、一般的に256階調になります。 これを2階調、つまり白・黒に変換する処理のことを2値化と言いま…

OpenCV: Optical Flowで物体の動きをトラックする

先週に引き続き、OpenCVを使っていきます。 Optical Flow Optical Flowを使って、物体の動きを検出していきます。OpenCVのチュートリアルと↓の記事を参考にしました。 OpenCVでとらえる画像の躍動、Optical Flow - Qiita OpenCVでオプティカルフローをリアル…

OpenCV: 特徴点抽出とマッチング

お仕事で初めて画像処理システムの開発に携わってます。 基本的なツールとしてOpenCVについて知っておいた方が良さそうですので、自分用のメモとしてトピックごとに整理していこうと思います。 OpenCV 言わずと知れたコンピュータビジョンのOSSライブラリで…

Autogradで勾配を計算する

最近、大学院で機械学習の講義に通って勉強してます。今回は講義で知ったAutogradについて紹介します。 Autograd Autogradは勾配を計算するPythonライブラリです。インプットとしてNumPyの行列を渡せる、バックプロパゲーションで計算できるなどの特徴があり…

cvxpyを使った凸最適化

Pythonで凸最適化を行うための便利なライブラリcvxpyを使う機会がありましたので、使い方を整理しておきます。 凸最適化 凸最適化 (convex optimization) は、制約条件がある中で目的関数の最大化 (または最小化) を行う最適化問題の1つですが、特に以下の特…

Comet.mlでJupyter Notebookの学習を記録・レポートする

Comet.mlを使ってJupyter NotebookなどのPythonの学習を記録・レポートする方法についてまとめます。 [7/18 追記] 本投稿では、稼働環境としてGoogle Colaboratoryを使ってます。環境によってデフォルトで送られるデータに差がありますので、注意が必要です…

AWS CodeBuildでGitHubと連携してPythonアプリをビルドする

久しぶりにAWSについての投稿です。AWS CodeBuildでGitHubと連携してPythonアプリケーションをビルドする方法を整理しました。 CodeBuild CodeBuildはその名の通り、アプリケーションをビルドするためのAWSマネージドサービスです。 CodeCommit - CodeBuild …

NumPyでロジスティック回帰を実装する

ディープラーニング以前 (〜2010年) の機械学習について、はじパタを使って整理しています。 今回は「第6章 線形識別関数」を参考にしながら、ロジスティック回帰をNumPyで実装してみます。 はじめてのパターン認識作者: 平井有三出版社/メーカー: 森北出版…

ResNetでCIFAR-10を分類する

KerasでResNetを作ってCIFAR-10を分類し、通常のCNNモデルと比較します。 ResNet ResNetはCNNのモデルの1つです。 Microsoft ResearchのKaiming Heらが2015年に提案1し、その年のILSVRCではResNetで学習したモデルが優勝しました。 VGGやGoogLeNetにて、畳み…

numpyで無相関化・白色化する

最近通っているディープラーニングの講習会にて、BatchNormalizationの文脈でデータの白色化なるものについて触れましたので、「はじめてのパターン認識」を読みながらnumpyで実装してみます。 はじめてのパターン認識作者: 平井有三出版社/メーカー: 森北出…

学習してないランダムなCNNでも特徴抽出の役に立つ

先月からディープラーニングを教えてくれる講座を受講しています。 今週からCNNに入ったのですが、先生が「CNNは特徴抽出器としてかなり優秀で、学習していないランダムなCNNでも高い精度が出せる」と教えてくれました。 「え、そうなの!?」とびっくりしま…

ガウス混合分布のパラメータをscikit-learnで推定する

scikit-learnでガウス混合分布のパラメータをさくっと推定する方法がありましたので、その備忘録です。 ガウス混合分布 ガウス混合分布は、複数のガウス分布を線形結合した分布で、以下式で表されます。 N: ガウス分布数 (ハイパパラメータ) : ガウス分布の…

Sudachiベースの学習済みWord2Vecモデルを使う

お仕事でSudachiを使って形態素解析を行っているのですが、それと互換した単語埋め込みモデルが必要になりました。 Sudachiの開発元であるワークスアプリケーションズさんから、Sudachiで分かち書き・学習したWord2Vecモデルが提供されています。 コーパスと…

Jupyter NotebookをAPI経由で操作する

Jupyter Notebookのノートブックファイルを外部から実行する要件がありましたので、API経由で操作する方法について整理します。 Jupyter API Jupyter Notebook ServerではJupyterの基本的な操作 (ファイルの閲覧・取得、カーネルの起動や実行など) をREST + …

KerasでDCGANを作ってKMNISTのくずし字を生成する

KMNISTのくずし字をDCGANで生成する、というモデルをKerasで作ります。 DCGAN DCGAN (Deep Convolutional GAN) はGAN (Generative Adversarial Network) の生成モデルの一種で、画像を生成するものです (提案論文) 。 GANは2つのモデルを学習によって獲得し…