Python環境を作ろう!【作って理解するディープラーニング#1】

Python環境を作ろう!【作って理解するディープラーニング#1】

こんにちは、えびかずきです!

今回は作って理解するディープラーニングの第1回として、Python環境の作り方について説明したいと思います。

既にPythonの開発環境があり、Pythonの文法も大体わかっているという方にとって、今回の学習は必要ありません。次回の記事をお待ちください。

プログラミングはやったことないけどこれを機に始めてみたい!
というような方は是非挑戦してみましょう。

Pythonとは

機械学習向けで最も人気のある言語といえば、やはりPythonでしょう。

データ分析や科学技術計算のライブラリが充実していて、かつ文法がシンプルで書きやすく初心者でもとっつきやすいという特徴があります。

プログラミング言語全体で見てもPythonの存在感は大きく、AI開発の流行も手伝ってここ数年でその人気度はかなり高まっています。

下図はWebの検索数から解析してプログラミング言語の人気度を示したTIOBE Programing Comunity Indexですが、ここ3年ほどでPython人気は急激に高まっており、2020年現在では「Java」「C」に次ぐ三位の位置付けとなっています。

www.tiobe.com

特にディープラーニングを扱うならば尚更Pythonはおすすめです。

Tensorflow,Chainer,Pytorchなど多数のフレームワークが存在するため、高度な開発も可能です。

他の言語としては、R,Julia,JavaScriptなどでもディープラーニング開発が可能ではありますが、今回は筆者のメイン言語であるPythonを使用することにします。

インストール方法

まずはPythonを自分のPCにインストールしてみましょう!

使い方は後で簡単に説明するので、今は何も分からなくてOKです。

とにかく開発環境を整えてPythonが使える環境を構築しましょう。

下にMacの場合とWindowsの場合に分けて、Python3のインストール方法を記載した当サイトエビワークスの記事を添付してありますので、その内容に従って環境を構築してください。

※Pythonには2系と3系がありますが、今回は将来性のある3系を使用することにします。

※既にPCにPythonがインストールされているという方は、次のセクションに進んでください。

Macの場合

Windowsの場合

仮想環境を作ろう

ここでは今回の学習用に個別の独立した環境を作りたい方向けに、仮想環境の作成方法について説明します。

既存の開発環境とは別に仮想環境を作成することによって、ライブラリのセットやバージョンを独立させることが出来ます。

これにより「ライブラリが動かない」・「エラーが発生する」といったトラブルを防ぐことが可能です。

ただし今回Pythonを始めてインストールした方で、影響を与えてしまう既存のPython環境がない、という場合にはこのセクションは飛ばしてしまっても構いません。

仮想環境が必要な方は、下に貼り付けたエビワークスの記事を参考に、仮想環境を作成してみてください。

Macの場合

Windowsの場合(Anaconda)

必要なライブラリと開発ツール

次に必要なライブラリとして下記2点を準備します。

・numpy

・matplotlib

コマンドラインから下のようにコマンド打ってインストールを実施してください。

#anacondaを使っていない場合

$ pip install ライブラリ名

#anacondaを使っている場合

$ conda install ライブラリ名

今回は勉強用としてインタラクティブにコードを実行できるJupyter notebookでソースコードで学習を進めていきたいと思います。

もちろん慣れているエディタや開発ツールがあればそちらを使っても構いませんが、まだ慣れたエディタが無いという方は、下のようにしてJupyter notebookをインストールしましょう。

開発ツール(エディタ):Jupyter notebook

#Jupyter notebookのインストール

#anacondaを使っていない場合
$ pip install jupyter

#anacondaを使っている場合
$ conda install jupyter

これで一通り準備は完了です。

では実際にpythonを使ってプログラミングの練習してみましょう。

Pythonでプログラミングを練習する

エディタを開いて、コードを書く準備をしてください。

jupyter notebook の場合、コマンドラインから、

$ jupyter notebook

と入力してEnterを押すとブラウザでjupyter notebookが開きます。

※Anacondaを使用している場合はjupyter notebookのアプリアイコンが作成されていると思うので、そちらからでも起動可能です。

jupyter notebookが開いたら、右上のNewからpython3を選択して、エディタを開きます。

はじめてのコード

まずは、下のコードをコピペして、Shift+Enterで実行してみましょう。

#こんにちはと表示するコード

print('こんにちは') #output:こんにちは

すると、こんにちはと表示されるはずです。

文字列を表示するという初めてのプログラミングに成功です!

四則演算の確認

続いて四則演算です。

下のコードを実行(Shift+Enter)してみましょう。

#四則演算

a = 1 + 1 #足し算
b = 2 - 2 #引き算
c = 3 * 3 #掛け算
d = 4 / 4 #割り算
e = 5 ** 5 #累乗

print(a,b,c,d,e) #output:2 0 9 1.0 3125

コード内の注意書きでおおよそは理解できると思いますが、補足説明です。

プログラミングにおいて「=」というのは大概の場合、右側のモノを左側の変数へ代入せよという命令になります。

Pythonもそうで、上記コードの3〜7行目は、四則演算で計算した数値を、左側の変数に代入せよという命令をしていることになります。

また、Pythonは動的変数なので、C言語などと違って変数の型を宣言する必要がありません。

なのでいきなりaとかbとか変数を持ち出して、数値を代入してもOKなのです。

数値の演算において特に注意すべきなのは累乗(**)です。

他の言語では(^)を使うこともあると思いますが、Pythonでは(**)になりますのでご注意を。


補足:

サンプルコードでは、「#」の後に注意書きを記載していますが、これはコメントアウトとといって命令としては認識されない仕組みになっています。

#の後は改行しない限り命令として認識されないので、注意書きや備忘録を目的としてコメント記載用として活用することができます。


関数定義

続いては関数定義です。

自分でオリジナルの関数を作って使う場合には、下のような文法で記述します。

#関数の定義(2乗する関数)

def nijou(a): #nijouという関数を定義(aを因数とする)
    nijou = a ** 2 #関数の中身を記述
    return nijou #演算結果を出力する
    
print(nijou(2)) #関数を実行して結果を表示する,output:4

引数として何も指定しないという関数を定義することも可能です。

その場合は以下のようになります。

#関数の定義(引数なしVer.)

def Hello():  #Helloという関数を定義(引数は無し)
    print('Hello') #Helloと表示する

Hello() #関数を実行,output:Hello

補足:

Pythonではインデントが重要になってきます。

例えばdef ~の次の行は、半角の空白が4つ入っているのですが、これが関数定義の中身を記述しているという宣言になります。

後で説明するif文やfor文についても同じことが言えます。

コードを実行してエラーが生じる場合は、このインデントが不正確である場合も多いので注意しましょう。


リスト

次はリストについてです。

リストはオブジェクト(数値など)がひとまとまりになった配列のことを言います。

下記コードのように、[0,1,2,3,4,5]のような形で定義して、後で自由に中身を取り出したり変更したり出来ます。

#リスト(配列)

list = [0,1,2,3,4,5] #listという配列を定義

#リストデータへのアクセス方法

#2番のインデックスの数値を取得(インデックスは0から始まるので実質3番目)
print(list[2]) #output:2

#1~4直前までのインデックスの数値を取得
print(list[1:4]) #output:[1, 2, 3]

#3〜末尾までのインデックスの数値を取得
print(list[3:]) #output:[3, 4, 5]

#0~3直前までのインデックスの数値を取得
print(list[:3]) #output:[0, 1, 2]

#0~末尾直前までのインデックスの数値を取得
print(list[:-1]) #output:[0,1, 2, 3, 4]

#末尾より一つ前~末尾までのインデックスの数値を取得
print(list[-2:]) #output:[4, 5]

#リストデータの書き換え

list[5] = 0 #5番のインデックスの数値を書き換え
print(list) #output:[0, 1, 2, 3, 4, 0]

for文の書き方

for文を使うことで、変数の値を更新しながら逐次的に処理を進めることが出来ます。

例えば、5の階乗(5!=120)を計算するために1×2×3×4×5と順番に掛け算をするには以下のように記述します。

#for文の使い方(5の階乗を計算する)

a = 1 #変数aに1を入れる

for i in [1,2,3,4,5]: #リスト内の数値へ順番にアクセスしiへ代入
    a = a * i #aにa*iを代入→次のiへ

print(a) #output:120

if文の書き方

if文を使うことによって、処理命令を条件分岐させることが出来ます。

例えば、 aとbが等しければ「一致」、等しくなければ「相違」と表示するプログラムは下のコードのようになります。

#if文の使い方

a = 1 #aに1を代入
b = 1 #bに1を代入

if a == b: #もしaとbが等しければ、
    print('一致') #一致と表示する
else:               #そうでなければ
    print('相違')#相違と表示する

    #output:一致

補足:

上記コード中の「==」は、比較演算子です。

左側と右側の変数の中身が一致していれば「True」、違っていれば「False」を返します。

TrueとFalseは真偽を示すブーリアンという変数型で、論理構造を構築できます。


Numpy

ここでは、外部ライブラリNumPy(ナンパイ)についてです。

ディープラーニングでは特にNumpy.arrayの配列を使ってニューラルネットワークの演算を行います。

多数の線形演算をシンプルな記述で行うことができるので、ディープラーニングにはもってこいのライブラリです。

下のようにnumpy.arrayを定義して演算にトライしてみましょう!

#numpyの使い方

import numpy as np #外部ライブラリnumpyをnpとしてインストール

a = np.array([1,2,3,4]) #aにnp.arrayである[1,2,3,4]を代入
b = np.array([2,3,4,5]) #bにnp.arrayである[2,3,4,5]を代入

print(a + b) #output:[3 5 7 9]
print(a - b) #output:[-1 -1 -1 -1]
print(a * b) #output:[ 2  6 12 20]
print(a / b) #output:[0.5   0.66666667 0.75    0.8]

プロット

画像を読み込んだり、表示したりする場合には、Matplotlibを使用する必要があります。

ここでは練習として、画像の表示にトライしてみましょう。

適当に画像ファイル(コードをコピペするなら名前はtest.jpgとしてください)をプログラムと同じディレクトリに準備して、下

コードを実行してみましょう。

#matplotlibの使い方

#jupyter notebook上で画像表示するためのマジックコマンド(jupyternotebookを使っていない人は記載しない)
%matplotlib inline

import matplotlib.pyplot as plt #matplotlib.pyplotというクラスをpltとしてインポート
from matplotlib.image import imread #matplotlib.imgというクラスからimreadというメソッドをインポート

img = imread('test.jpg') #プログラムが保存してあるのと同じディレクトリのtest画像を読み込み

plt.imshow(img) #画像を生成

plt.show() #画像を表示

下図は、jupyter notebookでの出力例です。

私が用意したtest.jpgの中身は綺麗なクラゲの写真でした。

皆さんも手持ちの画像でトライしてみてください。

まとめ

今回はディープラーニング学習の下準備として、Python環境の作り方について説明しました。

次回からは実際にPythonを使って、ディープラーニングの学習に入っていきます。

乞うご期待。

機械学習カテゴリの最新記事