【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
2018-05-29 20:54 2018-05-29 20:54
インターンのゆざ(@yuzajo_plan)です。
Pythonを使ってプログラミングを始めたい、実装したいと思った時に1番初めに面倒な作業がPythonを自分のPCで使うための環境を作ることです。
ここでは、そんな時にうってつけの便利なPythonのパッケージツール「Anaconda」のインストールから実際にコードを書ける環境を構築するまでを解説していきます。
さらに、MNIST実行環境の準備から手書き文字識別までを徹底解説!で登場したTensorFlowの使い方についてのわかりやすく解説していきます。
今回の記事を読んで学べることは、
の大きく分けて2つです。
これから、Pythonを実装する環境を構築したいと思っているPython・機械学習初心者の方にややこしいことを抜きで、簡単に環境構築ができ、手を動かしてもられるように解説していきます。
では、まずAnaconda(アナコンダ)のインストールから使い方についてです。
以前の記事(MNIST実行環境の準備から手書き文字識別までを徹底解説!)でも簡単に紹介はしていますが、今回はより具体的に説明していきます。
Anacondaとは、Python本体とPythonでよく利用されるライブラリがセットになったPythonパッケージです。
Pythonを使ってプログラミングを書いていくことには、「import ◯◯」といったように多くのライブラリをインポートするのが一般的です。
このAnacondaを使いことで、それらのライブラリを簡単に管理・インストールすることができます。
さらに、仮想環境を設計することが簡単にできるため、Python3系とPython2系を使い分けたい時にもとても便利です。
また、Anacondaのパッケージの中にはjupyter notebook(ジュピターノートブック)というブラウザで動作するプログラムの対話型実行できるツールがあります。
このツールを使うことで、簡単に自分の書いたプログラミングを実行することができるのです。
それでは、Anacondaをインストールしていきましょう。
インストーラのダウンロードは、Anacondaの公式ホームページから行いましょう。
まず、自分が使っているPCのOSを選択します。
Python3系とPython2系があるのですが、特別な理由がない方はPython3.6 version(2018年5月現在)を選んで下さい。
私は、macOSを使用しているので、以下のように選択しました。
Python3系とPython2系は同じようにみえても、互換性はなく、コードの仕様もかなり違うので注意してください。
では、次にJupyter notebookを動かしていきましょう。
Anacondaを起動して、すぐの画面に現れるJupyter notebookをInstallのボタンを押してインストールしましょう。
スクショはインストール済みのものです。インストールが済むと、Installの文字がLaunchに変わります。
早速、Launchボタンを押してJupyter notebookを起動させましょう。これでブラウザ上にJupyter notebookが開くはずです。
右上の「New」のボタンを押すと、「Python3」という選択肢があるのでこれを押すと新しくJupyter notebookでコードを書くためのファイルが作成されます。
そうすると、このようにプログラミングを書くことができる画面が出てきます。
ちなみにこのまま保存すると、User/以下のパスに保存されてしまうので「AnacondaProjects」といったような新しいフォルダを作成してからそのフォルダ内にファイルをつくることをおすすめします。
それでは、「Hello world!」を出していましょう。
print("Hello world!")
上記のコードを打ち込み、ブラウザ上部にある「Run」のボタンで実行します。(RunのショートカットキーはCtrl + Enter)
無事、実行できたのではないでしょうか。
これで、Pythonでコードを書いていく環境は整いました。
ちなみに便利なショートカットキーもたくさんあるので、上部の1番右にあるキーボードマークを押すと、確認できるので見てみてください。
それと、注意点がもう一つ。
Jupyter notebookで書いたプログラミングを保存すると拡張子が「.ipynb」となります。
通常のPythonを対話式でない形で書くと「.py」となり、扱い方が異なるので、「.ipynb」から「.py」に変換するか、コードを新たにファイルを作成してコピペを貼る必要が気をつけてください。
次は、TensorFlow(テンサーフォロー)のインストールから使い方についてです。
少しわかりにくいところはありますが、これをばっちり使えることができれば、機械学習を始めるのに恐れることはありません。
TensorFlow(テンサーフォロー)とは、Google社によって開発させた機械学習を行うためのオープンソフトウェアライブラリです。
要は、誰でも簡単に機械学習を使えるようにするための便利なライブラリと思ってください。
実践的な活用は、前回の記事(MNIST beginnerに隠れ層を加えたニューラルネット解説)を参考してみてください。
TensorFlowのインストールは、先程インストールしたAnacondaから行うことができます。
まずは、Anacondaを起動してすぐの画面の左横にある「Environments」を押してください。
そうすると、現在の環境一覧とその中に入っているライブラリを確認することができます。
ここから、新規で仮想環境を作成することもできますし、新たにライブラリをインストールすることもできます。
今回は、base(root)にTensorFlowをインストールしていきます。
installedとなっているセレクト窓を①Allに変更して、②「tensorflow」と検索します。
これで、「tensorflow」というライブラリが見つかるので、これをインストールしましょう。
「tensorflow」の左横にあるチェックボックスにチェックを付けて、右下の「Apply」ボタンを押してインストールできます。
無事に終えたら、新しいファイルをJupyter notebookで開いて、
import tensorflow
と打ち込みましょう。
これでなにも、エラーが出なければ無事にインストール完了です。
もし、ここまでできたのにエラーが生じてしまった場合はAnacondaを再起動してみるか、TensorFlowをインストールした環境で実行を行えているかを確認しましょう。
では、実際にTensorFlowを使っていきましょう。
TensorFlowには
という聞き慣れない言葉もあると思うので、順を追って説明していきます。
まずは、足し算です。普通のPythonでは、
a = 1
b = 1
sum = a + b
print("答えは%sです。"%sum) # => 答えは2です。
と簡単に書けますが、TensorFlowを使うとこのようになります。
# tensorflowのインポート
import tensorflow as tf
# 定数a,bをtensorflowで表現
a = tf.constant(1)
b = tf.constant(1)
# a + b の足し算
sum = tf.add(a, b)
# セッション
sess = tf.InteractiveSession()
print("答えは%sです。"%sess.run(sum)) # => 答えは2です。
まずは、tensorflowを「tf」のみで使えるようにインポートします。
その後、変化することのない定数a、bをtf.constantを使って定義します。
足し算は、
# a + b の足し算
sum = a + b
といったようなコードは書けず、tf.addというメソッドを使わないといけません。これは、
# aを表示
print(a) # => Tensor("Const:0", shape=(), dtype=int32)
aの中にはだたの数字ではなく、テンソルという情報の塊で格納されているためです。
次が、TensorFlowで最もややこしい「セッション」についてです。
# セッション
sess = tf.InteractiveSession()
TensorFlow は事前に演算処理の一連の流れである「データフローグラフ」を作り、そして演算グラフにデータを入力するという 2 段構えでプログラムを実行します。
このプログラムを動かす仕組みを「セッション」といいます。
TensorFlowでは、データフローグラフであるsumを実行するには、演算グラフにデータを入力する、つまり、sess.run(sum)を行う必要あるのです。
ちなみにセッションは他にもtf.Sessionというのがあります。これとの違いは、公式ページには
The only difference with a regular Session is that an InteractiveSession installs itself as the default session on construction. The methods tf.Tensor.eval and tf.Operation.run will use that session to run ops.
This is convenient in interactive shells and IPython notebooks, as it avoids having to pass an explicit Session object to run ops.
【TensorFlow公式HP】https://www.tensorflow.org/api_docs/python/tf/InteractiveSession
とあり、「InteractiveSessionのほうが明示的なSessionオブジェクトを渡す必要がないためのでJupyter notebookなどの対話型実行環境では適している」といったように記してありました。
正直、使い方が若干異なりますが、どちらも同じ働きをするのでどちらでも構いません。
次に変数(Variable)を使ったカウントアップを実行します。
まずは、TensorFlowを使わないプログラムです。
def count_up(num):
num += 1
return num
init = 0
num = count_up(init)
print("カウント:%s"%num) #=> カウント:1
num = count_up(num)
print("カウント:%s"%num) #=> カウント:2
num = count_up(num)
print("カウント:%s"%num) #=> カウント:3
そして、TensorFlowを使用したプログラムがコチラです。
# tensorflowのインポート
import tensorflow as tf
# 変数(counts)の定義
counts = tf.Variable(0, name="counts")
num = tf.constant(1, name="num")
# カウントアップする
add_op = tf.add(counts, num)
# countsの値を更新
up_op = tf.assign(counts, add_op)
# セッション
sess = tf.InteractiveSession()
# 変数を使う場合はまず初期化が必要
init = tf.global_variables_initializer()
sess.run(init)
# カウントアップを計3回実行
print("カウント:%s"%sess.run(up_op)) #=> カウント:1
print("カウント:%s"%sess.run(up_op)) #=> カウント:2
print("カウント:%s"%sess.run(up_op)) #=> カウント:3
初めに、変数を
counts = tf.Variable(0, name="counts")
と定義して、この値を更新してカウントアップを行なっていきます。
add_op = tf.add(counts, num)
add_opでは、countsとnumの足し算を行なっています。numは、定数で1が入っているので、これがカウントアップの元になります。
# countsの値を更新
up_op = tf.assign(counts, add_op)
tf.assignは、countsにadd_opを代入するという役割があります。
そのため、これでcountsの値を更新することができます。
あとは、先程と同様にセッションを行うのですが、その前に変数を使う場合は以下のような処理がマストで必要です。
# 変数を使う場合はまず初期化が必要
init = tf.global_variables_initializer()
sess.run(init)
これは、データフローグラフのセッションを実行する前に変数の初期化を行います。
tf.global_variables_initializerは、すべての変数に対して適応する初期化を意味しています。
print(sess.run(up_op))
sess.run(up_op)を行うと、countsをadd_opに更新することができます。
そして、add_opは継続して更新しているcountsにnumを加えるという処理なので、このプログラムを続けて実行すると、1,2,3...といったようなカウントアップの結果を得ることができます。
プレースホルダとは、値を後から入力することができる空の箱のようなものです。
『「定数(constant)で足し算」を実行する』で解説したコードを少し変形してプレースホルダ(Placeholder)で入力値を決める足し算を行なっていきます。
以下がそのプログラムです。
# tensorflowのインポート
import tensorflow as tf
# 定数の定義
a = tf.constant(1)
# プレースホルダ(b)を用意
b = tf.placeholder(tf.int32)
# a + b の足し算
sum = tf.add(a, b)
# セッション
sess = tf.InteractiveSession()
# プレースホルダを代入した結果
print("答えは%sです。"%sess.run(sum, feed_dict={b:1})) # => 答えは2です。
print("答えは%sです。"%sess.run(sum, feed_dict={b:6})) # => 答えは7です。
bは先程の場合は定数の1でしたが、今回はプレースホルダを使用します。
# プレースホルダー(b)を用意
b = tf.placeholder(tf.int32)
tf.int32とは、32 bit符号付き整数を意味しています。小数点を用いる値を使用したい場合は、tf.float32やtf.float64を使用してください。
プレースホルダに入力する値を指定するには、
# プレースホルダを代入した結果
print("答えは%sです。"%sess.run(sum, feed_dict={b:1})) # => 答えは2です。
このようにfeed_dict={b:1}とすると、sumを求めるために必要なプレースホルダbに1を代入することができます。
ここまで理解できた人は、MNIST実行環境の準備から手書き文字識別までを徹底解説!に進んでください。
TensorFlowを使ったニューラルネットワークのコードが記載しています。自分の手で実行してみましょう。
これを乗り越えることで、より実践に近いカタチでTensorFlowを使えるようになっていくはずです。是非頑張ってください。
今回は、AnacondaとTensorFlowのインストールから基本的な使い方について解説しました。
これを気に機械学習を勉強したいと思っている人やPythonを使ってなにかしてみたいと思っている人は是非ほかの記事も読んでみてください。
「プログラミング未経験の私がPythonの機械学習で手書き文字の識別を行うまで」
学生Webエンジニア PLANインターン生 PHP Laravel Python HTML CSS JS
【名前】 "ゆざ"
【関連】 株式会社PLAN / MIYABI Lab / Tmeet(twitterユーザーマッチングサービス) /
【MIYABI Lab運営】23歳/同期がト◯タやMicr◯softに就職する中、ベンチャーに未経験でWebエンジニアになるのを選んだ脳科学専攻の理系院生◆人見知り日本縦断◆機械学習/Web歴5ヶ月
【AWS】知識ゼロから理解するRDS超入門
AWSのデータベースサービス「Amazon RDS」を初心者にもわかるように解説します。未経験には難しいMultiAZ構成やレプリケーションは、マスター/スレ...
【AWS】Auto Scalingする前に知っておくべき7つのこと
Amazon EC2 Auto Scaling(オートスケール)を使用すると、CPU使用率等に応じてEC2の台数を自動的に増減できます。ここでは、初心者の持つ疑問を通し...
WordPressの基本構造を理解してオリジナルテーマを作ろう(後半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやstyle.css)の役割やファイル構造を理解して、どのようにオリジナ...
WordPressの基本構造を理解してオリジナルテーマを作ろう(前半)
WordPressのテーマを自作するために必要なテンプレートファイル(functions.phpやfront-page.php)の役割やファイル構造を理解して、どのようにオ...
【Heroku入門】無料枠サーバーを24時間スリープさせない方法
フリープランのHerokuサーバーでは、30分以上アクセスがないと自動的にスリープしてしまいます。ここでは、Herokuサーバーを寝かせない方法につい...
【入門編】Laravelのディレクトリ構造とMVCの処理の流れを理解する
Laravel初心者が学習する際にわかりにくいLaravelのディレクトリ構造を具体的な例を交えて解説します。MVCの基本であるビュー、モデル、コントロー...
【初心者向け】PythonによるHeroku環境で簡単LINEBot開発
誰でも簡単にLINEBotをpythonを使ってHeroku環境で開発できる方法を解説します。ここでは、LINE Messaging APIを用いることでおうむ返しをするBot...
AWSでWebサーバー構築!踏み台サーバーでセキュアなネットワークを構築する(第5回)
連載の第5回です。メインEC2に対して直接SSH接続できる状態というのは、セキュリティの観点からあまり望ましくありません。MySQLやEBSが紐づいたメ...
AnacondaでのTensorFlow環境構築と基礎的な使い方
Anaconda(アナコンダ)のインストールからJupyter notebook(ジュピターノートブック)とTensorFlow(テンサーフロー)の基本的な使い方を初心者...
脱初心者!MNIST beginnerに隠れ層を加えたニューラルネット解説
TensorFlowのチュートリアルであるMNIST beginnerの応用して、隠れ層と活性化関数を加えたニューラルネットワークで手書き文字識別を解説します。...
AWSでWebサーバー構築!Apache2.4, PHP7, MySQLの導入と初期設定(第4回)
連載の第4回です。今回は作成したEC2インスタンスにWebサーバーとしての機能を持たせるため、Apache2.4のインストールおよびhttpd.conf等の各種設...
AWSでWebサーバー構築!EC2を作成してSSH接続する(第3回)
連載の第3回です。前回作成したVPC・サブネットにおいて、セキュリティーグループに保護されたEC2インスタンスの作成・設定およびSSH接続の確立ま...
初心者必読!MNIST実行環境の準備から手書き文字識別までを徹底解説!
Pythonによる機械学習をプログラミング初心者にもわかりやすいように、TensorFlowチュートリアルのMNIST beginnerを使って、手書き文字(MNIST)識別...
AWSでWebサーバー構築!専門用語の解説とVPC環境を構築する手順(第2回)
連載の第2回です。AWSにてVPCネットワークを構築してWebサーバーを設置・運用するためには、AWS内で利用される重要単語について正しく理解しておく...
知識ゼロで機械学習・AIを理解するために必要なニューラルネットワークの基礎知識
機械学習・AIを理解するために必要なニューラルネットワークの基礎について、これから機械学習を勉強したい人、プログラミング未経験の人にもわか...
Canvaで簡単におしゃれなアイキャッチ画像を作ろう!使い方を徹底解説!
PhotoshopやIllustratorを使えなくてもCanvaなら誰でも簡単におしゃれなアイキャッチ画像が作れます。豊富なデザインテンプレートを組み合わせるだ...
プレビュー機能付きの記事編集画面の作り方(Laravel5)
記事編集フォームにはプレビュー機能の実装が必須です。記事を保存する処理とプレビューを表示する処理を共存させるにあたり、ボタンをクリックし...
AWSでWebサーバー構築!VPC設計に必要なIPアドレスとサブネットの基礎知識(第1回)
連載の第1回です。AWSのVPCネットワークを設計して実際に構築するためには、IPアドレスの基礎を理解することが非常に大切です。EC2 Webサーバーを...
MIYABI Labホームページを製作しました
様々な理由でプログラミングの勉強を困難だと感じてしまっている方のお役に立てれば嬉しいです。これからも小さなWebサービスを作り続けていき、技...
ゆざ、株式会社PLANを卒業します。
2年間インターンとしてお世話になった株式会社PLANを卒業します。AWS,Laravel,Pythonなどの技術的なことだけではなく、エンジニアとして、社会人と...