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つのモデルを学習によって獲得し…

小ネタ: PandasでCSVファイルからdatetimeカラムをロードする

今週もPandasの小ネタです。 CSVファイルのカラムをdatetime64としてロードする方法です。 Pandasはdatetime型を食わせるとdatetime64のSeriesになります。.dtプロパティも使えます。ここではカラムcがdatetime64になります。 import pandas as pd import da…

小ネタ: Pandasのapplyで複数の列を返す

Pandasの小ネタです。 Pandasのapplyで1つの列から、複数の列を返したい場合があります。 その場合、1つ1つapplyで取り出しても良いのですが、冗長になりがちです。 import pandas as pd df = pd.DataFrame({ 'number': [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,…

Keras: スパムメッセージをLSTMで分類する

KerasでRNN (LSTM) を実装し、スパムメッセージを分類してみます。 以前、同じデータセットに対してscikit-learnを使ってナイーブベイズで分類を行いましたが、いわばそのディープラーニング版となります。 scikit-learnでスパムメッセージを分類する(CountV…

日本語NLPライブラリ GiNZA で遊ぶ

つい最近、リクルートと国立国語研究所の共同研究のアウトプットとしNLPライブラリ GiNZA が公開されました。今回はこのGiNZAをお試ししてみます。 www.recruit.co.jp GiNZA GiNZAは日本語の自然言語処理の統合ライブラリです。 megagonlabs.github.io spaCy…

Python: Redisで複数の値を操作する (mset, mget, scan, delete)

小ネタです。 以前、PythonからRedisを操作するredis-pyについて紹介しましたが、今回はこのredis-pyで複数の値を一括して値を設定・削除する方法についてです。 準備 こちら↓の記事を参考にRedisコンテナの追加・redis-pyのインストールを行ってください。 …

Python: more-itertoolsで複雑なイテレーションを簡単に実装する

開発や分析で「タプルのリストからタプルの1つ目の要素だけを取り出したい」「リストの要素を3つずつ処理したい」といったことがちょくちょく起こります。Pythonでこうしたケースに便利なライブラリ mote_itertools を紹介します。 github.com インストール …

Keras: Fashion-MNISTを使ってCNNを可視化する

Fahion-MNISTのデータを使って学習したニューラルネットワークの畳み込み層を可視化します。 Fashion-MNIST Fashion-MNISTは衣料品の画像を10クラス (Coat, Shirtなど) に分類するデータセットです。MNISTと同じく、学習サンプル数60,000・テストサンプル数1…