Lesson 2 モジュール ― Python基礎文法入門機械学習&ディープラーニング入門(Python編)

Python言語の文法を、コードを書く流れに沿って説明していく連載。今回は、プログラムの1行目に記載されることが多い、モジュールのインポートや、そのモジュールを含むライブラリのインストールについて説明する。

» 2019年02月04日 05時00分 公開
[一色政彦デジタルアドバンテージ]

この記事は会員限定です。会員登録(無料)すると全てご覧いただけます。

「機械学習&ディープラーニング入門(Python編)」のインデックス

連載目次

ご注意:本記事は、@IT/Deep Insider編集部(デジタルアドバンテージ社)が「deepinsider.jp」というサイトから、内容を改変することなく、そのまま「@IT」へと転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。

 前回はPythonの「バージョン」について解説した。今回から、いよいよ文法の説明に入る。脚注や図、コードリストの番号は前回からの続き番号としている。

 なお、説明する順序は、前回掲載した図1-a(下に再掲)の1行目から順に、である。つまり、実際にライブラリ「TensorFlow」でディープラーニングのコードを書く流れに沿って、基礎文法が学んでいけるように目次を構成している。

図1-a【再掲】 TensorFlowの公式チュートリアルのサンプルコード(1) 図1-a【再掲】 TensorFlowの公式チュートリアルのサンプルコード(1)

 今回、本稿で説明するのは、図1-a【再掲】における赤枠内のコードのみとなる。

 本稿で示すサンプルコードの実行環境については、Lesson 1を一読してほしい。

 Lesson 1でも示したように、本連載のすべてのサンプルコードは、下記のリンク先で実行もしくは参照できる。


Google Colabで実行する
GitHubでソースコードを見る

Python言語の基礎文法

 まずは「モジュール」という概念について見ていこう。

モジュールのインポート

 まず、図1-a【再掲】の1行目のコードは、次のリスト1のようになっている。

import tensorflow as tf

リスト1 モジュールをインポートするコード例

 コードの意味は少し後で説明するとして、まずはノートブックでこのコードを実行してみよう。なお、リスト1のコードの場合、実行しても、図3のように何も表示されないので注意してほしい。

 実行するには、リスト1のコードを、Google Colab(もしくはJupyter Notebook)で作成したノートブックのコードセルに記入し、[Alt]+[Enter]キーを押せばよい(このショートカットキーは、セルを実行して、新しいコードセルを現在のセルの直下に挿入するためのもの。新しいコードセルの挿入が不要な場合は[Shift]+[Enter]キーを押せばよい)。ちなみに、今後の連載内のすべてのコードリストは、このように、ノートブックのコードセルで実行できるようにしているので、ぜひ手を動かしながら読み進めていってほしい。

コードセルの実行 図3 コードセルの実行

 それではコードの意味について説明していこう。

 1つ目の単語importは、インポート(導入)することを命令するための、Python言語の定義済みキーワードである。

 では、何をimportするかというと、モジュールである。モジュールModule)とは、直訳すると「機能的にまとまった基本単位」という意味になる。つまりモジュールとは、(関連性のある)機能の集まりのことである。

 よってimport tensorflowは、「tensorflowというモジュール(機能の集まり)をインポートする」という意味のコードになる。この2つの単語をまとめてimport文と呼ぶ。

 この2単語だけで、import文は完了できるのだが、その後、as tfというコード(詳細後述)がくっついており、このサンプルコードではimport tensorflow as tfがまとめてimport文となる。

 では、このas tfは何か?

 asは、英語なら「〜として」などと訳すが、Python言語のimport文でもそれと同じような意味合いを持つ構文となっており、as tfで「tfという名前として」という意味のコードとなる。as tfのようにstatement)に付随する関連情報はclause)と呼ばれるので、1行目の文は「as節を伴うimport文」ということになる。

 まとめると、import tensorflow as tfというコードは、「tfという名前としてtensorflowモジュールをインポートする」という意味のコード(文)になる、というわけだ。

 なお、Pythonでは「1行に1文のみを記載する」という基本ルールがある。改行によって、その行の1文の終了を指示する仕様である。これはPython言語特有の最も基本的なルールの一つなので覚えておいてほしい。

【応用テクニック】1文を複数行にする方法

 「1行=1文」が基本だが、特に「長すぎる文を、複数行に分けて見やすくする」といった用途のために、「複数行=1文」で記述できる応用テクニックも存在する。せっかくなので、これについても併せて紹介しておこう。

 具体的には、改行の前に\を入れると、「次行へ文が継続している」と見なされる。例えばリストex1は、as tfの前で改行し、その改行の前に\を入れている。

import tensorflow \
    as tf

リストex1 応用テクニック: 複数行の文を記述する例

 そのため、この2行のコードは、import tensorflow     as tfという1つの文と見なされている(ちなみに、左記のコードにある半角スペースの数は、リストex1にある半角スペースの数を忠実に再現している。そうした理由は下記の注意書きを参考にしてほしい)。

 注意点として、Pythonでは「インデント(=左端に作る余白)をそろえる」という基本ルールが非常に重要になるのだが(Lesson 8で解説)、リストex1のtensorflowasの間は「改行ではない」と見なされているため、そういったインデントのルールが適用されない。

 文内の単語間のスペースの数は、何個あっても問題にならないので、as tfの前に意図的に4個スペースを入れることで、tensorflowtfの単語の開始位置をそろえて見やすくしている。こういった、見やすさを意識したコードの書き方も行える。


 以上で1行目のコードが読めるようになったはずだ*2

*2 【アドバイス】ここまではそれほど難しくないので、大丈夫と思うが、読み進めるうちにプログラミングの専門用語を忘れて混乱しやすいので、例えば「モジュール」の意味など、1つ1つ着実に押さえて覚えながら、読み進めてほしい。


配布用プロジェクトとモジュール

 ところで、先ほどの構文解説では、さらっと「tensorflowモジュール」と当たり前のように書いたが、「そのモジュールが一体どこから来た何者なのか、よく分からない」と思った人も少なくないのではないだろうか。そこで次に、tensorflowモジュールの出自や中身について説明しておこう。

 このtensorflowモジュールは、Python言語に標準で含まれているものではない。ディープラーニング用のライブラリ「TensorFlow」は、PyPI(「パイ・ピー・アイ」と読む)というサイトのプロジェクトproject)という形でオープンに公開・配布されており、その配布物の中にtensorflowモジュールが含まれているのだ(図4)。

配布用プロジェクトとモジュールの関係 図4 配布用プロジェクトとモジュールの関係

 ちなみにPyPIとは「Python Package Index」のこと、つまり「Pythonパッケージ(=配布用プロジェクト)のインデックス(索引)」を意味している。「索引」と言えるほど、TensorFlowを含め、多数のオープンなライブラリがPyPIに登録されている。Python開発者なら、必ずお世話になっているサイトである。

 PyPIのプロジェクトは「パッケージ」とよく表現されるが、Python言語の仕様にも「パッケージ」という同名の機能があり、紛らわしい。誤解を避けるために、本連載では、PyPIのプロジェクトは「配布用プロジェクト」としか呼ばないようにする。本連載内で「パッケージ」と表記されている場合は、常にPython言語仕様の方を指すこととする。

 なお、Python言語仕様におけるパッケージPackage)とは、複数のモジュールをまとめたフォルダーのような機能である。具体的にどのようにまとめているかは、後述の「モジュールの利用と定義」で見ていくとして、実はtensorflowモジュールも、厳密には複数のモジュールをまとめた「パッケージ」である。というのも、パッケージは「モジュール」としてインポートできるので、先ほどはインポート後を指して「tensorflowモジュール」と表現した。細かく気にする必要はないが、「モジュール」と表記されている場合には、元々は「パッケージ」である可能性があると、知っておいてほしい。モジュールについて詳しくは本稿末尾のコラムも参照してほしい。

配布用プロジェクトのインストール

 さて、PyPIで配布されているプロジェクトをPythonプログラム内で使うには、それぞれ各自の環境にインストールしなくてはならない。

 ただし、ライブラリ「TensorFlow」がグーグル純正ということもあり、Google Colab(=本連載が想定する実行環境)には最初からインストール済みなので、今回は「インストールなし」で利用できる。

 通常のJupyter Notebookなど、TensorFlowが未インストールの環境であれば、コードセルに次のシェル(=OSのコマンドライン実行環境)コマンドを入力して、明示的にインストールする必要があるので注意してほしい。なお当然ながら、まずは「配布用プロジェクトのインストール」をしてから「モジュールのインポート」をするという順序になるため、リスト2のコードは、現実的には、リスト1よりも前に実行しておく必要がある点に注意してほしい。

!pip install tensorflow

リスト2 配布用プロジェクト「tensorflow」をインストールするためのシェルコマンド

 このコードの意味について説明しよう。

 先頭にある!は、コードセル内のコードを、Pythonコードではなくシェルコマンド(=ターミナル/コマンドプロンプト用のコマンド)として実行するための、Jupyter Notebook系環境の特殊記法である。このようにGoogle ColabやJupyter Notebookでは、!で任意のシェルコマンドが実行できる。特にライブラリ(=配布用プロジェクト)インストールの目的でよく使う書き方なので覚えておいてほしい。

 次のpipコマンドは、PyPIの配布用プロジェクトに関連する操作を実現するためのものである。その次にあるinstallを付けると、PyPIの配布用プロジェクトのインストールを命令することになる。

 まとめると、pip install tensorflowで「PyPIの配布用プロジェクト『tensorflow』をインストールする」という意味のシェルコマンドとなる。

 以上で、図1-a【再掲】の1行目の文が、インストール済みの配布用プロジェクト「tensorflow」に含まれるtensorflowモジュールをtfという名前でインポートする、という意味だと、より正確に理解できた。「配布用プロジェクト『tensorflow』のインストール」と「tensorflowモジュールのインポート」によって、TensorFlowがPythonプログラム内で使えるようになった。

モジュールの利用と定義

Copyright© Digital Advantage Corp. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。