豊富な数値計算モジュールにより、ディープラーニングに利用されるPython

豊富な数値計算モジュールにより、ディープラーニングに利用されるPython

Javaなどと同じくオブジェクト指向型の言語であるPython。その特徴は数値計算やグラフ作成など、データ解析に長けた言語であり、そのためのモジュールがたくさん用意されています。

例えば、2次元、3次元だけでなく、多次元配列を簡単に作成できる「NumPy」モジュール。そしてただ多次元配列を作成できるだけでなく「奥行き」「行」「列」を関数を利用することで、すぐに入れ替えられること。

また、複雑な計算を行った結果を、折れ線グラフ、ヒストグラム、散布図など多様な描画形式にて表現できる「matplotlib」モジュール。

これら予め用意されたモジュールにより、数値解析に長けていることから、ディープラーニングをはじめとするニューラルネットワークの構築にも利用されるPython。今後、機械学習やAIの発展が続いていく中で、学習するのがマストの言語になっていくのかもしれません。

しかし、我ながら数学力がなさすぎるな。
ありがとうございました!

目次

本のまとめ(Pythonのこと)

▼読んだ本は?

■はじめてのディープラーニング Pythonで学ぶニューラルネットワークとバックプロパゲーション
■我妻 幸長 (著)

▼ディープラーニング記述に使われるPythonとは?

■数値計算や、データ解析に強みがある言語
■WEBアプリ、モバイルアプリ、科学計算、統計処理などで使われる
■オブジェクト指向を取り入れた、抽象化されたプログラミングも可能
■「コンパイル→インタプリタ」を順次行っていく、インタプリタ型の言語

▼Pythonで機械学習をはじめるには?

【1】数値計算・機械学習用の外部パッケージを予め内蔵している、Anacondaを導入
【2】AnacondaはPythonのディストリビューション(パッケージ)の1つ
【3】Anacondaの中には「Jupyter Notebook」という、Pythonの実行環境が含まれている
【4】Jupyter Notebookではプログラムと実行結果の確認、その際のメモ作成などができる

▼Pythonにおける関数とモジュールの違いは?

■関数
└特定の「入力」に対して、特定の「出力」を出す機能のこと

■モジュール
└類似する役割を持つ関数を、集めたもの
└設計図となる「クラス」を集めたもの

▼Pythonでよく使われるモジュールは?

■NumPy
└数値計算用のモジュール
└シンプルな表記で効率的なデータ操作を可能に
└多次元配列を強力にサポート
└内部はC言語で実装されているため高速に動作
└ディープラーニングで必要なベクトルや行列に対応
└Anacondaに最初から含まれているため、インポートするだけで利用可能

■matplotlib
└グラフの描画や画像の表示用のモジュール
└簡単なアニメーションの作成ができる
└特にグラフ描画の場合にはMatplotlibの「pyplot」を使う

■「NumPy」「matplotlib」モジュールをインポートして、グラフとして実行する記述例

▼Pythonの基本的な記述方法は?

■変数の代入(Javaのようにデータ型を明示することなく、変数の代入が可能)

■「type関数」で変数のデータ型を調べる

■「;」(セミコロン)で複数の処理を記述

■リストの記述と取り出し

■「辞書」を利用し、キーと値の組み合わせでデータを格納

▼分岐文・繰り返し文の書き方は?

■if文(インデントは、通常半角スペース×4で記述

■for文

■while文

▼関数の使い方は?

■「def」を先頭につけて、関数を定義する

■引数にはデフォルト値の指定が可能

▼クラスとインスタンスの利用方法は?

■クラス(設計図)と、インスタンス(部品)の利用が可能
■クラスを呼び出すときには、生み出されるインスタンス自身を示す「self」が引数となる
【1】クラスの定義方法

【2】クラスを呼び出す記述

▼「継承」の利用方法は?

【1】Calcクラスを継承した、CalcPlusクラスの定義

【2】クラスを呼び出す記述

▼NumPyで配列を作るには?

■「array」関数を使う
【1】1次元の配列

【2】2次元配列(「行」と「列」がある平面の配列)

【3】3次元配列(「行」と「列」と「奥行き」のある立体の配列)

▼応用的な配列の作り方とは?

■配列の形状(行数と次元)を取得する「shape」関数

■配列の合計要素数を取得する「size」関数

■すべて0の配列を作成する「zero」関数

■すべて1.0の配列を作成する「ones」関数

■すべて乱数の配列を作成する「rand」関数

■特定の範囲内の値を配列として作成する「arange」関数

■特定の範囲内の数値を要素数で割って、割った数値をを配列として取得する「linespace」関数

▼配列の形状を変更するには?

■「reshape」メソッドを使う
【1】「行数が4」「列数が6」の配列を作成

■「奥行きが3」「行数が2」「列数が4」の配列を作成

▼配列内の各要素へのアクセス方法は?

■1次元配列の各要素にアクセス

■2次元配列の要素にアクセス

■条件を指定して、配列内の偶数のみにアクセス

■スライシング(配列内の何番目~何番目未満だけ)してアクセス

■ステップ(配列内の何番目~何番目未満だけで、要素をスキップして)してアクセス

■配列内のすべての要素を取り出す場合

▼配列における軸(axis)の考え方とは?

■配列には「奥行きの軸」「縦方向の軸」「横方向の軸」の3つがある
■「transpose」関数を利用すると、この「軸」を入れ替えることができる

【1】2次元配列で「縦(行)」と「横(列)」を入れ替える場合
└縦方向の軸「axis=0」
└横方向の軸「axis=1」

【2】3次元配列で「奥行き(次元)」と「縦(行)」と「横(列)」を入れ替える場合
└奥行き方向の軸「axis=0」
└縦方向の軸「axis=1」
└横方向の軸「axis=2」

▼その他NumPyでよく使われる関数は?

■要素の合計を計算する「sum」関数

■配列内部の最大値を計算する「max」関数

■配列内の特定の要素だけ書き換える「where」関数

■配列内の平均値を求める「average」関数

■配列内の標準偏差を求める「std」関数

▼行列積ってなに?

■「行数」と「列数」が異なる行列を掛け合わせる
■例えば「3行×4行の行列」と「4行×3列の行列」を掛け合わせる
■NumPyの「dot関数」を利用して、行列積の計算ができる

■「T」を使い、行と列を転置した上で、行列積を行う

▼サイン/コサイン関数をグラフ化するには?

■「sin」「cos」関数を使う

▼散布図を表示するには?

■「scatter」関数を用いる

▼ヒストグラムを表示するには?

■「hist」関数を使う

▼画像を表示するには?

■「imshow」関数を使って、配列を画像化する

■「imread」関数で外部の画像を読みこんで、配列に格納する

▼ニューラルネットワークで利用される「シグモイド」関数とは?

■出力値yが「0から1の値」をとる
■入力値xが負になり0から離れると、出力値yは0に近づく
■入力値xが正になり0から離れると、出力値yは1に近づく

▼ニューラルネットワークで利用される「tanh」関数とは?

■出力値yが「-1から1の値」をとる
■0を中心として、左右対称のグラフとなる

▼ニューラルネットワークで利用される「ReLU」関数とは?

■入力値xが0を超えると、出力値yが増加しはじめる
■入力値xが0以下の場合、出力値yはつねに0
■入力値xと出力値yは、常に等しくなる

▼ニューラルネットワークで利用される「Leaky ReLU」関数とは?

■基本はReLUと同じ
■ただ、入力値xが0以下の場合も、出力値yが小さな値を持つ

▼ニューラルネットワークで利用される「恒等関数」とは?

■入力値をそのまま出力値としてかえす関数
■主に回帰問題における、出力層で利用される関数

▼ニューラルネットワークで利用される「ソフトマックス関数」とは?

■分類問題を扱うのに適した関数
■ニューロンが対応する枠に分類される確率を表す
■出力値yが0から1の間の値におさまる

▼人工ニューロンをPythonで表現すると?

▼「回帰問題」のニューラルネットワークを表現するには?

■入力層「ニューロン数:n=2」・中間層「ニューロン数:n=2」・出力層「ニューロン数:n=1」のニューラルネットワークの場合

▼「分類問題」のニューラルネットワークを表現するには?

■入力層「ニューロン数:n=2」・中間層「ニューロン数:n=2」・出力層「ニューロン数:n=2」のニューラルネットワークの場合

関連する記事