趣味のPython・深層学習

中級者のための実装集

2024-01-01から1年間の記事一覧

スコープ: Pythonのスコープの基礎

はじめに プログラミングにおいて、「スコープ」とは変数や関数の有効範囲のことを指します。Pythonでは、スコープの概念を適切に理解することが非常に重要です。スコープを理解すれば、変数や関数を適切に使用できるようになり、バグの発生を防ぐことができ…

property, getter, setter 基礎

Pythonのプロパティ、ゲッター、セッターの基礎から応用まで Pythonにおいて、プロパティ、ゲッター、セッターは、クラスのデータ属性をカプセル化し、適切にアクセスやデータの検証を行うための仕組みです。この仕組みを適切に使用することで、クラスのデー…

抽象クラスの基礎:Python abstractmethod

Pythonの抽象クラスについて 抽象クラスとは 抽象クラスとは、共通の機能を持つクラスのベースとなるクラスです。抽象クラスには実装されていないメソッドが含まれており、これらのメソッドは具象クラスで実装されなければなりません。 抽象クラスは、インス…

PyTorchの実装基礎: カスタムデータセットとカスタムモデル

機械学習の分野で最も人気の高いライブラリの一つであるPyTorchは、柔軟性と高い計算性能を兼ね備えています。本記事では、PyTorchを使った実装の応用編をご紹介します。基礎的な知識を持つMLエンジニアを対象に、より高度な実装手法を分かりやすく解説して…

生成モデルは何を“学習”しているのか

はじめに 近年、AIの発達により自然な文章や高品質な画像を生成できるようになってきました。これらの生成を実現しているのが、生成型AIモデルと呼ばれるものです。生成モデルは複雑なニューラルネットワークで構築されていますが、その根本的な考え方自体は…

VAEの基礎:ELBOとは何か?確率論から徹底解説!

こんにちは。今回はVAE(Variational Auto-Encoder)の核となる概念の一つであるELBO(Evidence Lower Bound)についてゼロから丁寧に解説していきます。VAEの理論はややこしく数式が多いので、できるだけ平易な言葉で基礎から説明していきます。 VAEとは? VAEは…

PyTorchの実装基礎まとめ

PyTorchは、Pythonで深層学習を実装するためのオープンソースライブラリです。NumPyに似た多次元テンソル演算を提供し、GPUを使った高速な数値計算が可能です。この記事では、PyTorchの基礎的な概念と実装方法について説明します。 テンソル PyTorchの中心的…

専門的な技術文章をわかりやすく書くための9つの掟

高度な専門性と極めてのわかりやすさを両立させた技術文章を書くことは、文章執筆における最高の到達点と言えるでしょう。言語の醍醐味は、背景知識の異なる者同士が上手く意思の疎通ができることにあります。そこで本稿では、専門的でありながらも誰もが理…

潜在変数変数とは結局なんなのか

1. 潜在変数の概念 潜在変数とは、直接観測できない潜在的な変数のことを指します。具体的には、データに潜む隠れた要因や特性、原因などを表す変数のことを意味します。 例えば、人間の能力を表す潜在変数としては、知能や創造性、パーソナリティなどが考え…

EMアルゴリズムと潜在変数

今回は機械学習の重要なトピックである「潜在変数モデル」と「EMアルゴリズム」について、実装例を交えながら丁寧に解説していきます。 潜在変数モデルとは? 潜在変数モデルでは、観測できる変数(データ)と観測できない潜在変数(隠れた要因)の間に何らかの関…

機械学習で学ぶSOLID原則

機械学習実装でSOLID原則を理解する ソフトウェア設計における重要な原則の一つであるSOLID原則は、機械学習の実装においても適用できます。SOLID原則は、コードの保守性、拡張性、テスト容易性を高めることを目的としています。この記事では、機械学習のコ…

Pythonで学ぶSOLID原則

PythonでSOLID原則を学ぶ SOLID 原則は、ロバート・C・マーティンによって提唱されたオブジェクト指向プログラミングの5つの原則です。この原則に従うことで、コードの柔軟性、保守性、拡張性が向上します。Pythonでもこの原則を適用することができます。 単…

ONNXによるC++ベース機械学習推論

ONNXを使ってPyTorchモデルの推論を高速化する 機械学習モデルの実運用においては、推論時間の高速化が非常に重要な課題となります。特に大規模モデルを使う場合、推論に時間がかかり過ぎると実用的ではなくなってしまいます。幸いPyTorchには、ONNXを使って…

PyTorch推論時間の高速化

PyTorchモデルの推論時間を最適化する | たった1行のコードで2倍の高速化 機械学習コンペティションでは、しばしば推論時間に厳しい制限があります。例えば、1100サンプルに対して120分以内にCPUで推論を完了しなければならない場合などです。このような状況…

PyTorchのメモリ節約小技

PyTorchでメモリ使用量を最小限に抑える PyTorchを使ってディープラーニングのモデルを構築する際、メモリ使用量を最小限に抑えることが非常に重要です。メモリの効率的な利用によって、モデルの学習がスムーズに進み、また推論時のパフォーマンスも向上しま…

【2d reshape】スペクトル機械学習の魔法の考察

スペクトルデータの2次元化が機械学習モデルの性能を向上させる理由 入力データの次元性 機械学習モデル、特に畳み込みニューラルネットワーク(CNN)は、一般に2次元または3次元の入力データを扱うように設計されています。1次元のデータを直接CNNに入力する…

PyTorch で複数モデルを繋げる方法

PyTorchで複数のモデルの出力をアンサンブルする方法 こんにちは。今日は、PyTorchで複数の深層学習モデルの出力をアンサンブルする方法について説明します。 アンサンブル学習は、単一のモデルよりも高い予測精度を得るための強力な手法です。異なる種類の…

残差ネットワークの本質

はじめに 近年、深層学習モデルの性能は目覚ましい進化を遂げてきました。しかしその一方で、ネットワークの層が極端に深くなるにつれ、勾配消失問題などの新たな課題が生じてきました。この問題を解決するため、2015年にMicrosoft ResearchのHe氏らによって…

pandas Dataframeの重み付きアンサンブル

重み付きアンサンブルとは? 重み付きアンサンブルは、複数のモデルの予測結果に対して異なる重みを割り当て、それらを組み合わせる手法です。各モデルに与えられる重みは、そのモデルの性能や信頼性に基づいて決定されます。この方法は、アンサンブル全体の…

nn.ModuleListを解説してみる

PyTorchのnn.ModuleListとは? nn.ModuleList は、PyTorchのニューラルネットワークモジュールの一部であり、複数の nn.Module オブジェクトをまとめて保持するためのコンテナです。これを使うことで、モデル内で複数のサブモデルを簡潔に管理できます。 な…

1分で見るPythonicなコード例

本ブログでは、Pythonコードをより簡潔で読みやすく、かつ効果的に書くための3つのPythonicなテクニックを紹介します。これらの方法はリスト内包表記、条件式の値の交換、そして辞書内包表記です。 1. リスト内包表記を使用して平坦化する # リスト内包表記…

辞書のアンパック

Pythonでは、関数に引数を渡す方法が様々ありますが、その中でも辞書をアンパックして引数として渡すことは便利なテクニックです。この記事では、辞書のアンパックを使った引数の渡し方について詳しく解説します。 辞書のアンパックとは? 辞書のアンパック…

【1dconv】一次元畳み込みCNNの実装

連続したデータを扱う時、1dCNNを実装したいときがあります。 今回はipynbファイルでデバッグを行いながら、実装する際に便利な関数をつけました。 中間層を取り出すおまけ付きです。 class Conv1d(nn.Module): def __init__(self, channel_1, channel_2, ch…

全人類が技術報告書をMarkdownで書くべき10000の理由

技術報告書は全てMarkdownで書くべきです。 間違っても表計算ソフトを使って書くべきではありません。 本記事では特に重要なポイントをピックアップします。 文章の構造化: Markdownはシンプルでわかりやすい文法を提供し、文章の階層構造を簡単に表現でき…