<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>TensorFlow &#8211; 機械学習 入門コースの決定版!機械学習エンジニアを目指すならcodexa（コデクサ）</title>
	<atom:link href="https://www.codexa.net/category/tensorflow/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.codexa.net</link>
	<description>毎日1400名以上のエンジニアが利用してる機械学習 入門コースの決定版！機械学習に必要な線形代数や統計基礎、Pythonライブラリなどの基礎コースも無料で公開中！</description>
	<lastBuildDate>Wed, 16 Jan 2019 02:28:50 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.7.7</generator>

<image>
	<url>https://www.codexa.net/wp-content/uploads/2017/11/cropped-favicon-32x32.png</url>
	<title>TensorFlow &#8211; 機械学習 入門コースの決定版!機械学習エンジニアを目指すならcodexa（コデクサ）</title>
	<link>https://www.codexa.net</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>TensorFlowとは？不動産の価格をTensorFlowを使って予測してみよう（入門編）</title>
		<link>https://www.codexa.net/tensorflow-for-begginer/</link>
					<comments>https://www.codexa.net/tensorflow-for-begginer/#respond</comments>
		
		<dc:creator><![CDATA[codexaチーム]]></dc:creator>
		<pubDate>Wed, 15 Aug 2018 11:31:10 +0000</pubDate>
				<category><![CDATA[TensorFlow]]></category>
		<guid isPermaLink="false">https://www.codexa.net/?p=1678</guid>

					<description><![CDATA[機械学習をやってみたいけど何から初めて良いか解らないと思ったことはありますか？もしそうでしたら、この記事はそんな方に向けて書かれています！ 本記事では「TensorFlow 入門」として、Googleが提供する機械学習フ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p><strong>機械学習をやってみたいけど何から初めて良いか解らない</strong>と思ったことはありますか？もしそうでしたら、この記事はそんな方に向けて書かれています！</p>
<p>本記事では「TensorFlow 入門」として、Googleが提供する機械学習フレームワークである「TensorFlow」を使って、不動産価格を予測する流れをまとめました。概要は下記の通りです。</p>
<div class="su-list" style="margin-left:0px">
<ul>
<li><i class="sui sui-check-circle" style="color:#297d31"></i> プログラミング経験がある方が対象</li>
<li><i class="sui sui-check-circle" style="color:#297d31"></i> 環境構築不要！ブラウザのみで可能</li>
<li><i class="sui sui-check-circle" style="color:#297d31"></i> TensorFlowの基礎的な使い方が学べます</li>
<li><i class="sui sui-check-circle" style="color:#297d31"></i> 機械学習の基礎が学べます</li>
<li><i class="sui sui-check-circle" style="color:#297d31"></i> 所要時間の目安は1〜3時間程度</li>
</ul>
</div>
<p>本記事では初心者対象として、数式を用いた厳密な説明は行なっておりません。より直感的に「機械学習」と「TensorFlow」を解説していきます。それでは、早速やってみましょう！</p>
<h3>TensorFlowとは？</h3>
<p>TensorFlow（読み：テンソルフロー）とは、<strong>グーグルによって開発された高速数値解析用のPythonライブラリ</strong>です。<a href="https://www.codexa.net/what-is-deep-learning/">ディープラーニング</a>やニューラルネットワークを構築するのに使われます。また、TensorFlowをバックエンドとしたラッパーライブラリも多く出回っています。</p>
<p>グーグルによって開発され、今でも定期的にアップデートが行われています。中身はC++で動いていますが、ユーザーが簡単に実装できるようにpythonのインターフェースが用意されています。</p>
<p>他のディープラーニング向けのライブラリと違い、TensorFlowは研究開発と生産システムへの導入の両方を目的として開発されました。グーグルで使われている人工知能RankBrainにもTensorFlowが使われています。</p>
<h3>そもそもTensor（テンソル）とは？</h3>
<p>テンソルとは<strong>多次元のデータを表すのに使われる高次元配列</strong>のことです。配列を扱うライブラリは他にもNumpyなどがありますが、TensorFlowではテンソルから直接関数を導き出したり自動的に微分を計算したりすることができます。本記事では厳密な解説は割愛しますが、テンソルは下記の図のように高次元の配列です。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1685" src="https://www.codexa.net/wp-content/uploads/2018/08/what-is-tensor.png" alt="" width="709" height="239" srcset="https://www.codexa.net/wp-content/uploads/2018/08/what-is-tensor.png 709w, https://www.codexa.net/wp-content/uploads/2018/08/what-is-tensor-300x101.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/what-is-tensor-304x102.png 304w" sizes="(max-width: 709px) 100vw, 709px" /></p>
<p>テンソルを深く理解するのには前提となる知識が必要ですが、<strong>機械学習では「ベクトル」や「行列」の理解は必須の知識</strong>です。（参照：<a href="https://www.codexa.net/linear-basics/">機械学習に必要な基本の線形代数を学ぼう</a>）</p>
<p>&nbsp;</p>
<h3>TensorFlowの仕組み（データフローグラフ）</h3>
<p>TensorFlowは命令型プログラミングとは異なり、「データフローグラフ」と呼ばれるグラフを作り、<strong>グラフにデータを入力することで結果が出力されるという流れ</strong>を理解する必要があります。</p>
<p>言葉で聞くと難しいので、データフローグラフを簡略化した図式を用いて紐解きましょう。まずは下の図を見てください。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1691" src="https://www.codexa.net/wp-content/uploads/2018/08/data_flow_graph.png" alt="" width="672" height="357" srcset="https://www.codexa.net/wp-content/uploads/2018/08/data_flow_graph.png 672w, https://www.codexa.net/wp-content/uploads/2018/08/data_flow_graph-300x159.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/data_flow_graph-304x162.png 304w, https://www.codexa.net/wp-content/uploads/2018/08/data_flow_graph-297x158.png 297w" sizes="(max-width: 672px) 100vw, 672px" /></p>
<p>こちらで、赤のボックスは「<strong>入力値</strong>」を表しており、青のボックスは「<strong>ノード</strong>」、矢印は「<strong>エッジ</strong>」を表しています。始まりは一番左の入力「3」と「5」から始まり、次の「ノード」では<strong>加算の処理</strong>を行っています。加算された値「8」と新しい入力値「9」が次のノードで<strong>乗算の処理</strong>を行い、<strong>最終的に56の値を出力</strong>しています。</p>
<p>この図式のように、TensorFlowではノード（処理を加える）やエッジ（加えた処理を次へ送る）などを事前に設計して、実行を行い処理を行う流れが一般的です。</p>
<p>言葉だけで見ると解りづらいですが、後ほど<strong>Pythonを使ってコーディングしますので、より明確に理解できる</strong>かと思います。</p>
<h3>なぜTensorFlowが使われるのか？</h3>
<p>機械学習には多種多様の手法やアルゴリズムが存在します。TensorFlowを使うことで、機械学習の<strong>アルゴリズムや手法を効率的かつ簡単に実装をすることが可能</strong>です。</p>
<p>TensorFlowには機械学習で必要な演算処理や関数などが多数用意されています。</p>
<p>例えば<a href="https://www.codexa.net/linear-regression-for-beginner/">線形回帰</a>や<a href="https://www.codexa.net/what-is-deep-learning/">ディープラーニング</a>でも一般的に使われる最適化アルゴリズムに「最急降下法」があります。本来であればアルゴリズムの処理をスクラッチでコーディングしなくてはいけません。しかし、TensorFlowを使うことで、容易に最急降下法の処理を組み込むことが可能になります。</p>
<p>機械学習のプロセスを効率化してくれるライブラリはTensorFlowだけではありません。TensorFLowと並んで、世界的に人気のある「Scikit-learn（サイキット・ラーン）」も耳にした事がある方も多いかと思います。</p>
<p>Scikit-learnには<a href="https://www.codexa.net/decision-tree-random-forest/">ランダムフォレスト</a>や<a href="https://www.codexa.net/support-vector-machine-tutorial/">サポートベクターマシン</a>など、<strong>機械学習の手法がそのまま使える形で用意</strong>されています。対してTensorFlowは、<a href="https://www.codexa.net/numpy/">Numpy</a>や<a href="https://www.codexa.net/pandas/">Pandas</a>に感覚は近く、<strong>手法を実装するために利用</strong>をするものです。</p>
<p>TensorFlowの特徴をいくつか紹介したいと思います。</p>
<p><strong>携帯性 ・スケーラビリティ</strong></p>
<p>TensorFlowはデスクトップ、サーバー、モバイルなどあらゆるプラットフォーム上で同一のコードで実行することができます。CPUからGPUへの切り替えもコードの書き換え無しでできます。完成した学習モデルのモバイルへの移植にも優れています。</p>
<p><strong>TensorBoard</strong></p>
<p>TensorFlow内のあらゆるデータを可視化するときに便利なのがTensorBoardです。TensorBoardはTensorFlowをインストールするときに一緒に付属する<strong>可視化ツール</strong>です。TensorFlowで構築したデータフロー図を図面化することができます。他にもコスト関数や評価指標をプロットしたり、学習過程でのテンソルの変化をヒストグラムにしたり、実行時間やメモリ使用量などの学習に関するメタデータを集計したり、画像を表示するなどができます。</p>
<p><strong>コミュニティ</strong></p>
<p>TensorFlowはコミュニティが大きく、サポート体制が充実しています。なにかわからないことがあれば公式ページで世界中の人に質問したり、同じようなトラブルを抱えた人の質問への回答を見ることができます。また、グーグルによって管理されているので、今後もアップデートを通して性能が向上していくことが期待できます。</p>
<p>それでは、次のセクションからはPythonとTensorFlowを実際に使ってみましょう！</p>
<h3>STEP1 実行環境について</h3>
<p>本記事では<strong>ブラウザのみで機械学習に必要なライブラリ環境の利用が可能な「<a href="https://www.codexa.net/how-to-use-google-colaboratory/">Google Colab</a>（読み：グーグル・コラボ</strong><strong>）」を利用</strong>します。利用にはGoogleの無料会員登録が必要です。まずは、下記のURLでGoogle Colabへアクセスをお願いします。</p>
<p>&gt; <a href="https://colab.research.google.com/notebook#create=true&amp;language=python3">Python3でGoogle Colabの新しいノートブックを作成</a></p>
<p>Googleのアカウントへログインされていない方は、下記のようにログインを促すポップアップが出ます。手順に沿ってログインをしましょう。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1694" src="https://www.codexa.net/wp-content/uploads/2018/08/google_login.png" alt="" width="578" height="243" srcset="https://www.codexa.net/wp-content/uploads/2018/08/google_login.png 578w, https://www.codexa.net/wp-content/uploads/2018/08/google_login-300x126.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/google_login-304x128.png 304w" sizes="(max-width: 578px) 100vw, 578px" /></p>
<p>&nbsp;</p>
<p>ログインが完了すると、下の図のような画面へ遷移します。これはJupyter Notebook（読み：ジュピター・ノートブック）と呼ばれており、Pythonのプログラムの実行や説明文章などを管理できる<strong>データ分析の世界で頻繁に使われるツール</strong>です。（参照：<a href="https://www.codexa.net/jupyter-lab-beta-review-ml-ide/">Jupyter Labとは？</a>）</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1695" src="https://www.codexa.net/wp-content/uploads/2018/08/jupyter_1.png" alt="" width="713" height="300" srcset="https://www.codexa.net/wp-content/uploads/2018/08/jupyter_1.png 713w, https://www.codexa.net/wp-content/uploads/2018/08/jupyter_1-300x126.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/jupyter_1-304x128.png 304w" sizes="(max-width: 713px) 100vw, 713px" /></p>
<p>Jupyter Notebookは「.ipynb」のファイル形式となります。解りやすいように、新規で立ち上げたノートブックの名前を変更してあげましょう。上の図の赤枠をクリックすることで名前の編集が可能です。名前はなんでも大丈夫です。（私はTensorFlow_Codexa.ipynbと名付けました）</p>
<p>それでは試しに本記事で使うPythonライブラリをインポートしてみましょう。上記の図の通り最初のコードセル（入力欄）へ下記のコードを入力して<span class="su-label su-label-type-info">Shift + Enter</span>でコードを実行しましょう。</p><pre class="crayon-plain-tag"># テンソルフロー
import tensorflow as tf

# 計算やデータ処理のライブラリ
import numpy as np
import pandas as pd

# データ可視化のライブラリ
import matplotlib.pyplot as plt

# データセットの取得&amp;処理のライブラリ
from sklearn.datasets import load_boston
from sklearn.model_selection import train_test_split

# インポートの確認
print(tf.__version__)
print(np.__version__)
print(pd.__version__)</pre><p>
コードを実行すると下の図のように、数値が出力されているのが確認できるかと思います。Jupyter Notebookでは、セル上でPythonのコードを実行＆管理ができるため、多くの機械学習エンジニアが標準的に利用しています。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1696" src="https://www.codexa.net/wp-content/uploads/2018/08/tensorflow_2.png" alt="" width="652" height="343" srcset="https://www.codexa.net/wp-content/uploads/2018/08/tensorflow_2.png 652w, https://www.codexa.net/wp-content/uploads/2018/08/tensorflow_2-300x158.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/tensorflow_2-304x160.png 304w" sizes="(max-width: 652px) 100vw, 652px" /></p>
<p>本記事ではTensorFlowを含めて5つの基本的なPythonライブラリを使用します。計算処理を効率的に行う「Numpy（読み：ナンパイ）」や、大規模データを扱いやすくする「Pandas（読み：パンダス）」も使用します。これらのライブラリは<strong>機械学習では必須のツール</strong>ですので、より詳しい操作方法は下記の無料コースをご覧ください。</p>
<p>・<a href="https://www.codexa.net/numpy/">Numpy 入門コース（無料）</a><br />
・<a href="https://www.codexa.net/pandas/">Pandas 入門コース（無料）</a></p>
<h3>STEP2 データセットと問題定義</h3>
<p>本記事で扱うデータセットを紐解きましょう。今回はScikit-learnに組み込まれている「<strong>Boston house-prices（ボストン市の住宅価格）</strong>」のデータセットを利用します。概要は下記の通りです。</p>
<p>こちらのデータセットは<strong>ボストン市内のエリアに属する情報データと、そのエリアの不動産価格の中央値が与えられたデータ</strong>です。</p>
<table>
<thead>
<tr>
<th colspan="2">概要</th>
</tr>
</thead>
<tbody>
<tr>
<th>データセット名前</th>
<td>boston house-prices dataset</td>
</tr>
<tr>
<th>データ発行元</th>
<td><a href="https://archive.ics.uci.edu/ml/machine-learning-databases/housing/" target="_blank" rel="noopener">カルフォルニア大学アーバイン校</a></td>
</tr>
<tr>
<th>データ数</th>
<td>506レコード</td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="2">特徴量</th>
</tr>
</thead>
<tbody>
<tr>
<th>CRIM</th>
<td>1人あたりの犯罪発生率</td>
</tr>
<tr>
<th>ZN</th>
<td>2.5万平方フィート以上の居住エリアの割合</td>
</tr>
<tr>
<th>INDUS</th>
<td>小売業以外のビジネスの土地の割合</td>
</tr>
<tr>
<th>CHAS</th>
<td>チャールズ川の周辺かどうか（1=周辺、0＝それ以外）</td>
</tr>
<tr>
<th>NOX</th>
<td>一酸化窒素の濃度</td>
</tr>
<tr>
<th>RM</th>
<td>住居の部屋の平均数</td>
</tr>
<tr>
<th>AGE</th>
<td>1940年より前に建築された物件の割合</td>
</tr>
<tr>
<th>DIS</th>
<td>5つの雇用センターへの距離（重み付け済み）</td>
</tr>
<tr>
<th>RAD</th>
<td>環状道路へのアクセスの容易度</td>
</tr>
<tr>
<th>TAX</th>
<td>1万ドルあたりの固定資産税総額</td>
</tr>
<tr>
<th>PTRATIO</th>
<td>教師と児童の比率</td>
</tr>
<tr>
<th>B</th>
<td>黒人の比率</td>
</tr>
<tr>
<th>LSTAT</th>
<td>低所得層の人口の割合（%)</td>
</tr>
</tbody>
<thead>
<tr>
<th colspan="2">ターゲット</th>
</tr>
</thead>
<tbody>
<tr>
<th>MEDV</th>
<td>当該地域に属する不動産価格の中央値（単位：1千ドル）</td>
</tr>
</tbody>
</table>
<p>上記で「特徴量」と「ターゲット」とありますが、機械学習で使われる初歩的な用語です。<strong>特徴量とは今回のケースでいうエリアごとのデータ（例：犯罪発生率や環状道路へのアクセスなど）</strong>を指します。</p>
<p>対してターゲットとは機械学習を使って推測したい値であり、今回のケースでは「<strong>エリアの不動産価格の中央値</strong>」です。</p>
<p>今回の例題では、<strong>「特徴量」と「ターゲット」を機械学習アルゴリズムにより学習を行い、新しい未知のデータの特徴量を使ってそのエリアの不動産価格を予測するのが目的</strong>となります。</p>
<p>それでは、このボストンの不動産データをScikit-learnから読み込んでみましょう。下記のコードでは、データセットを読み込み、さらに取り扱いやすいようPandasのデータフレーム形式への変換を行います。各自、Google Colabの2番目のコードセルに入力して<span class="su-label su-label-type-info">Shift ＋ Enter</span>でコードを実行してみてください。</p><pre class="crayon-plain-tag"># データの読み込み
boston = load_boston()

# Pandasのデータフレーム形式へ変換
df = pd.DataFrame(boston.data, columns=boston.feature_names)
df['target'] = boston.target

# データの最初の5行を表示
df.head()</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
	CRIM	ZN	INDUS	CHAS	NOX	RM	AGE	DIS	RAD	TAX	PTRATIO	B	LSTAT	target
0	0.00632	18.0	2.31	0.0	0.538	6.575	65.2	4.0900	1.0	296.0	15.3	396.90	4.98	24.0
1	0.02731	0.0	7.07	0.0	0.469	6.421	78.9	4.9671	2.0	242.0	17.8	396.90	9.14	21.6
2	0.02729	0.0	7.07	0.0	0.469	7.185	61.1	4.9671	2.0	242.0	17.8	392.83	4.03	34.7
3	0.03237	0.0	2.18	0.0	0.458	6.998	45.8	6.0622	3.0	222.0	18.7	394.63	2.94	33.4
4	0.06905	0.0	2.18	0.0	0.458	7.147	54.2	6.0622	3.0	222.0	18.7	396.90	5.33	36.2</pre><p>
ご覧の通りデータの最初五行が出力されています。前述しましたが、1行毎にボストン市内のエリアの情報と、そのエリア内の不動産価格の中央値（1千ドル単位）が格納されています。</p>
<p>下記は上のデータの1行目と4行目の一部を抜粋してまとめたテーブルです。データを紐解く目的のため、解りやすいデータを抜粋しました。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1701" src="https://www.codexa.net/wp-content/uploads/2018/08/boston_house_table.png" alt="" width="717" height="270" srcset="https://www.codexa.net/wp-content/uploads/2018/08/boston_house_table.png 717w, https://www.codexa.net/wp-content/uploads/2018/08/boston_house_table-300x113.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/boston_house_table-304x114.png 304w" sizes="(max-width: 717px) 100vw, 717px" /></p>
<p>ご覧の通り1行目と4行目のエリアを比べると、<strong>不動産価格に約1万ドル（約1 10万円）の差</strong>が出ています。それぞれの地域の特徴量の一部を見てみると、1行目のエリアでは<strong>犯罪発生率が非常に高く、また低所得層の人口の割合も高い</strong>です。</p>
<p>このように特徴量とターゲットには関係性があります。本記事では、機械学習で最も初歩的かつシンプルな「線形回帰」という手法を用いてターゲットの推測を行います。</p>
<p>今回は線形回帰の詳細については渇愛をしますが、機械学習をこれから勉強しようと考えている方は、ぜひ下記の線形回帰入門コースの受講をご検討ください。</p>
<p>&gt; <a href="https://www.codexa.net/linear-regression-for-beginner/">線形回帰 入門コース</a></p>
<h3>STEP3 データの前処理</h3>
<p>データの読み込みが完了しましたので、次は機械学習アルゴリズムが学習を効率的に行えるよう「データの前処理」を行いましょう。<strong>まずは特徴量とターゲットを切り分けます。</strong></p><pre class="crayon-plain-tag"># 特徴量とターゲットに切り分け
X_data = np.array(boston.data)
y_data = np.array(boston.target)

# １行目のデータの特徴量（X)とターゲット（y）を確認
print(X_data[0:1])
print(y_data[0:1])</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
[[6.320e-03 1.800e+01 2.310e+00 0.000e+00 5.380e-01 6.575e+00 6.520e+01
  4.090e+00 1.000e+00 2.960e+02 1.530e+01 3.969e+02 4.980e+00]]
[24.]</pre><p>
次に特徴量の<strong>正規化</strong>を行いましょう。正規化（読：せいきか）とは<strong>それぞれの特徴量のレンジを整える処理のこと</strong>です。英語ではNormalization（ノーマライゼーション）やFeature Scaling（フューチャー・スケーリング）と呼ばれています。</p>
<p>例として「1人あたりの犯罪発生率(CRIM)」と「教師と児童の比率(PTRATIO)」を考えてみましょう。1行目のエリアのCRIMの値は0.00632とあり、対してPTRATIOの値は15.3です。それぞれの特徴量の値に大きな乖離が存在します。</p>
<p>機械学習のアルゴリズム/手法の中には、このように<strong>特徴量のデータのレンジが大きく異なると、モデルを訓練する際に不具合を起こしてしまう</strong>場合があります。どのような影響があるかはアルゴリズム/手法により異なります。</p>
<p>正規化の手法はいくつか存在します。今回はシンプルに各特徴量の平均を０、分散を1とする処理を行いましょう。計算方法として、各特徴量の平均値を求め、それぞれの特徴量の値から平均値を引いたものを標準偏差で割ります。標準偏差はデータの散らばり具合を示す統計の指標です。詳しくは、<a href="https://www.codexa.net/statistics-for-machine-learning-first/">無料の統計入門コース</a>をご参照ください。</p><pre class="crayon-plain-tag"># 正規化
def norm(data):
    mean = np.mean(data, axis=0)
    std = np.std(data, axis=0)
    return (data - mean) / std

# データを変更
X_data = norm(X_data)
print(X_data[0:1])</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
[[-0.41771335  0.28482986 -1.2879095  -0.27259857 -0.14421743  0.41367189
  -0.12001342  0.1402136  -0.98284286 -0.66660821 -1.45900038  0.44105193
  -1.0755623 ]]</pre><p>
上の出力は正規化した後の1行目の特徴量の値です。1行目のCRIMの元の値は0.00632でしたが、正規化の処理を行なった後は-0.41771335となっているのが確認できます。</p>
<p>正規化の処理を行う必要があるアルゴリズムと必要でないアルゴリズムがあります。今回の線形回帰では、<strong>最適化アルゴリズムである「最急降下法」を用いますので、正規化を行うことで、より効率よく最適化を行うことが可能</strong>になります。</p>
<p>次の前処理の作業として、特徴量のデータの最初の列に数字の「1」を追加してあげましょう。これは、<strong>データを機械学習アルゴリズムへ学習させる際に、計算をスムーズにしてくれる意味</strong>があります。（詳しくは<a href="https://www.codexa.net/tutorial-linear-regression-for-beginner/">実践 線形回帰</a>をご参照ください）</p><pre class="crayon-plain-tag"># 1を追加する前のサイズ
print(X_data.shape)

# 1を作成
ones = np.ones((506, 1))

# 1を追加
X_data = np.c_[ones, X_data]
X_data.shape</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
(506, 13)
(506, 14)</pre><p>
ご覧の通り元々13個あった特徴量に全て値が「1」の列が追加され、506行14列のデータとなりました。前処理の最後の工程として、訓練データとテストデータへ切り分けてあげましょう。</p>
<p>機械学習では一般的にデータセットを「訓練（Training）」と「テスト（Test）」へ分割を行ないます。<strong>理由としては訓練データで機械学習モデルへ学習を行い、学習させていないテストデータを使ってモデルの予測精度を評価する目的</strong>があります。</p>
<p>一般的に訓練データ8割/テストデータ2割（で分割を行います。Scikit-learnには訓練/テストデータの分割を瞬時に処理をしてくれる関数（train_test_split）が用意されていますので、そちらを利用しましょう。</p><pre class="crayon-plain-tag"># 訓練データとテストデータへ切り分け
X_train, X_test, y_train, y_test = train_test_split(X_data, y_data, test_size=0.2, random_state=42)
y_train = y_train.reshape(404,1)
y_test = y_test.reshape(102,1)

print(X_train.shape)
print(y_train.shape)
print(X_test.shape)
print(y_test.shape)</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
(404, 14)
(404, 1)
(102, 14)
(102, 1)</pre><p>
元データでは506レコードありましたが、その8割にあたる404が訓練データへ、残りの102がテストデータへ分割されています。最低限ではありますが、データの前処理がこれで完了しました。</p>
<h3>STEP4 線形回帰モデルの訓練</h3>
<p>ではいよいよ本題である「TensorFlow」を使って、線形回帰モデルへ訓練データを学習させてみましょう。まずはTensorFlowで線形回帰モデルの設定を行います。</p><pre class="crayon-plain-tag"># 学習率とエポック（反復処理回数）
learning_rate = 0.01
training_epochs = 100

# 特徴量の数
n_dim = X_data.shape[1]

# 特徴量（X)とターゲット（y）のプレースホルダー
X = tf.placeholder(tf.float32,[None,n_dim])
Y = tf.placeholder(tf.float32,[None,1])

# 係数（W）と定数項（b）の変数
W = tf.Variable(tf.ones([n_dim,1]))
b = tf.Variable(0.0)</pre><p>
線形回帰モデルの構築を行うために必要な設定を行いました。次にコスト関数と最適化の処理を作ります。</p><pre class="crayon-plain-tag"># 線形モデル
y = tf.add(b, tf.matmul(X, W))

# コスト関数
cost = tf.reduce_mean(tf.square(y - Y))

# 最適化
training_step = tf.train.GradientDescentOptimizer(learning_rate).minimize(cost)</pre><p>
<strong>コスト関数とは、「実際の値とモデルが推測した値の誤差を指標化」</strong>したものです。この「誤差」をなるべく最小限にすることで、線形回帰のモデルはより近しい予測をすることが可能になる訳です。</p>
<p>下の図はこの流れを簡略化したものです。ご覧の通り最初の誤差（cost）は「10」とありますが、反復処理で計算を繰り返すたびに誤算が小さくなっていくのが確認できます。</p>
<p><img loading="lazy" class="aligncenter size-full wp-image-1703" src="https://www.codexa.net/wp-content/uploads/2018/08/linear_iterations.png" alt="" width="642" height="249" srcset="https://www.codexa.net/wp-content/uploads/2018/08/linear_iterations.png 642w, https://www.codexa.net/wp-content/uploads/2018/08/linear_iterations-300x116.png 300w, https://www.codexa.net/wp-content/uploads/2018/08/linear_iterations-304x118.png 304w" sizes="(max-width: 642px) 100vw, 642px" /></p>
<p>上のコードの一番最後の「training_step」に注目すると分かりますが、誤差（cost）を最小化する処理が加えられているのが分かります。</p>
<p>では、いよいよ訓練データ（X_trainとy_train）を使ってモデルの訓練を行いましょう。変数の初期化を行い、セッションを開始させます。</p><pre class="crayon-plain-tag"># 初期化
init = tf.global_variables_initializer()


# モデル訓練開始
sess = tf.Session()
sess.run(init)

for epoch in range(training_epochs):
    sess.run(training_step, feed_dict={X:X_train, Y:y_train})
    cost_history = np.append(cost_history, sess.run(cost, feed_dict={X:X_train, Y:y_train}))
    if epoch % 100 == 0:
        W_val = sess.run(W)
        b_val = sess.run(b)</pre><p>
これで訓練データの特徴量とターゲットの学習が完了しました。上記コードを見ると分かりますが、cost_historyとして反復処理毎に誤差（cost）の履歴を取得しています。</p>
<p>2回目、50回目、100回目のコストを確認してみましょう。正しく処理が行われていれば、誤差（cost）は減少しているはずです。</p><pre class="crayon-plain-tag"># 誤差（cost）を確認
print(cost_history[1])
print(cost_history[50])
print(cost_history[100])</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
559.8623657226562
35.80818557739258
25.0402889251709</pre><p>
ご覧の通り最初は559とあったコストですが、最適化アルゴリズムでコストの最小化の処理を行うことで、反復計算毎に減少しているのが確認できます。</p>
<h3>STEP5 テストデータで予測</h3>
<p>では、訓練済みのモデルを使ってテストデータから不動産価格の予測を行なってみましょう。上記のコードを注視すると分かりますが、モデルには訓練データ（X_trainとy_train）のみを使っており、テストデータは一切使っていません。</p>
<p>では、予測をしてみましょう。</p><pre class="crayon-plain-tag"># テストデータを使って予測
pred_test = sess.run(y, feed_dict={X: X_test})</pre><p>
これで予測が完了です。では、実際にどれほどの精度で予測できているのか確認してみます。実際の不動産価格（y_test）と予測した不動産価格(pred_test）の対比表を作ってみます。</p><pre class="crayon-plain-tag">pred = pd.DataFrame({"実際の不動産価格":y_test[:,0], "予測した不動産価格":pred_test[:,0]})
pred.head()</pre><p>
</p><pre class="crayon-plain-tag">-- 出力
	予測した不動産価格	実際の不動産価格
0	26.497128	23.6
1	33.817684	32.4
2	16.889990	13.6
3	22.577736	22.8
4	18.896347	16.1</pre><p>
ご覧の通り、それなりの予測ができていますね！例えば一番上の行を確認してみると、このエリアの実際の不動産価格は約26.4千ドルですが、エリアの情報（特徴量）を使って予測をしたところ23.6千ドルと予測することが出来ています。</p>
<h3>まとめ</h3>
<p>本記事ではTensorFlowの基礎的な使い方として、実際のデータセットを用いてシンプルな機械学習手法（線形回帰）を用いて予測を行なってみました。</p>
<p>実際にコードを動かしてみて如何でしたでしょうか？本記事にも使われていますが、機械学習をしっかり理解するには「線形代数」や「統計」の基礎、さらにNumpyやPandasなどPythonの基礎ライブラリを使いこなす必要があります。</p>
<p>codexaでは機械学習準備編として、無料でコースを公開しています。是非、これらのコースの受講をご検討ください。</p>
<p>・<a href="https://www.codexa.net/numpy/">Numpy 入門</a>（無料）<br />
・<a href="https://www.codexa.net/pandas/">Pandas 入門</a>（無料）<br />
・<a href="https://www.codexa.net/matplotlib/">Matplotlib 入門</a>（無料）<br />
・<a href="https://www.codexa.net/linear-basics/">線形代数</a>（無料）<br />
・<a href="https://www.codexa.net/statistics-for-machine-learning-first/">統計基礎</a>（無料）</p>
<p>また、すでに機械学習の基礎知識がある方に向けて、機械学習の様々な手法を詳しく解説したチュートリアルも公開しています。</p>
<p>・<a href="https://www.codexa.net/tutorial-linear-regression-for-beginner/">実践 線形回帰</a><br />
・<a href="https://www.codexa.net/tutorial-logistic-regression-for-beginner/">実践 ロジスティック回帰</a><br />
・<a href="https://www.codexa.net/decision-tree-random-forest/">決定木とランダムフォレスト</a><br />
・<a href="https://www.codexa.net/support-vector-machine-tutorial/">サポートベクターマシン</a><br />
・<a href="https://www.codexa.net/naive-bayes-tutorial/">ナイーブベイズ（単純ベイズ分類器）</a></p>
<p>以上となります！最後まで記事をご覧頂き、ありがとうございました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codexa.net/tensorflow-for-begginer/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>GoogleからTensorFlow Liteが発表！モバイルとIoT向け</title>
		<link>https://www.codexa.net/tensorflow-lite-annoucement/</link>
					<comments>https://www.codexa.net/tensorflow-lite-annoucement/#respond</comments>
		
		<dc:creator><![CDATA[codexaチーム]]></dc:creator>
		<pubDate>Wed, 15 Nov 2017 08:02:19 +0000</pubDate>
				<category><![CDATA[TensorFlow]]></category>
		<guid isPermaLink="false">https://www.codexa.net/?p=366</guid>

					<description><![CDATA[2017年5月のGoogle I/Oで発表があったTensorFlow（テンソルフロー）のモバイル・IoTバージョンですが、昨日11月14日にGoogle DevelopersのブログでTensorFlow Lite（テ [&#8230;]]]></description>
										<content:encoded><![CDATA[<p>2017年5月のGoogle I/Oで発表があったTensorFlow（テンソルフロー）のモバイル・IoTバージョンですが、昨日11月14日に<a href="https://www.codexa.net/?p=366&amp;preview=true" target="_blank" rel="noopener">Google Developersのブログ</a>でTensorFlow Lite（テンソルフロー ライト）のディベロッパープレビューが公表されました。</p>
<p>現時点では、まだディベロッパープレビューですので、今後色々な機能が加わると思いますが、ひとまず本日からAndroidとiOSの両方で利用が可能となります！</p>
<p>本記事では、TensorFlow Liteの概要をまとめました。</p>
<div class="su-note"  style="border-color:#dfdfde;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;"><div class="su-note-inner su-u-clearfix su-u-trim" style="background-color:#f9f9f8;border-color:#ffffff;color:#333333;border-radius:3px;-moz-border-radius:3px;-webkit-border-radius:3px;">＊注意＊</p>
<p>TensorFlowですが、日本での読み方は主に2パターンあります。「テンソルフロー」と読む方と、一方「テンサーフロー」と読む方もいらっしゃいます。Google内部では「テンサーフロー」で統一されているようですが、他の機械学習エンジニアの方とお話をすると「テンソルフロー」が多い気がします。本記事では、日本語表記の際は「テンソルフロー」で統一します。</div></div>
<h3>TensorFlow Liteの目的</h3>
<p>細かい特徴は後ほど書きますが、そもそもなぜテンソルフロー ライトが開発されたのか？を紐解きましょう。TensorFlow Liteですが、携帯電話のデバイス上でモデルの訓練を行う為ではなく、すでに訓練されたモデルを使って、デバイス上で推論を素早く短時間に行うために開発されました。</p>
<p>ディープラーニングや機械学習でのモデルの訓練は、非常に膨大の量のデータを使います。少し荒い言い方となりますが、処理能力が劣る携帯電話のデバイス上でそれを行うのではなく、すでに訓練されたモデルに新しいデータを適用するのを楽にするのがTensorFlow Liteというわけです。</p>
<h3>TensorFlow Lite（テンソルフローライト）の特徴</h3>
<p>TensorFlowですが、Googleが開発した、現在一番使われている（と言われている）機械学習のオープンソースソフトウェアライブリです。今回、公開となりましたTensorFlow Liteですが、モバイルやIoTデバイス上で動かすことを想定して、全く新しく1からコーディングされたライブラリとなります。</p>
<p><span style="text-decoration: underline;"><strong>テンソルフロー ライト 特徴</strong></span></p>
<ul>
<li><strong>軽い  (Lightweight)<br />
</strong>処理能力が低い携帯電話のデバイス上でも起動や初期化が素早く行えるよう設計されています。</li>
<li><strong>複数のプラットフォームで動く（Cross-platform）<br />
</strong>TensorFlow Liteは色々なプラットフォーム上で動かすことが可能になります。今回のプレビューの初期段階では、一先ずアンドロイドOSとiOSが対応しています。</li>
<li><strong>早い（Fast）<br />
</strong>携帯電話やIotなどに最適化されており、モデルの読み込みなどが劇的に改善されています。</li>
</ul>
<p>最新機種の携帯電話では、機械学習を処理するためのハードウェアなどが組み込まれているケースも増えてきました。TensorFlow Liteでは、<a href="https://developer.android.com/ndk/guides/neuralnetworks/index.html">アンドロイド・ニューラルネットワーク・API</a>の対応もしているそうです。（Android Oreo v8.1で搭載された、スマートフォン上でニューラルネットワークを動かす仕組み）</p>
<div id="attachment_375" style="width: 622px" class="wp-caption aligncenter"><img aria-describedby="caption-attachment-375" loading="lazy" class="size-full wp-image-375" src="https://www.codexa.net/wp-content/uploads/2017/11/android-nn-api.png" alt="" width="612" height="518" srcset="https://www.codexa.net/wp-content/uploads/2017/11/android-nn-api.png 612w, https://www.codexa.net/wp-content/uploads/2017/11/android-nn-api-300x254.png 300w, https://www.codexa.net/wp-content/uploads/2017/11/android-nn-api-253x214.png 253w, https://www.codexa.net/wp-content/uploads/2017/11/android-nn-api-187x158.png 187w" sizes="(max-width: 612px) 100vw, 612px" /><p id="caption-attachment-375" class="wp-caption-text">アンドロイド・ニューラルネットワーク APIのシステムアーキテクチャ図</p></div>
<h3>テンソルフローライトの設計構造</h3>
<p><img loading="lazy" class="aligncenter size-large wp-image-379" src="https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-1024x970.jpg" alt="" width="1024" height="970" srcset="https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-1024x970.jpg 1024w, https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-300x284.jpg 300w, https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-768x728.jpg 768w, https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-226x214.jpg 226w, https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture-167x158.jpg 167w, https://www.codexa.net/wp-content/uploads/2017/11/TensorFlow-Lite-Architecture.jpg 1224w" sizes="(max-width: 1024px) 100vw, 1024px" /></p>
<p>こちらがTensorFlow Liteの現時点でのアーキテクチャです。各構成コンポーネントを見てみましょう。</p>
<ul>
<li><strong>Trained TensorFlow Model<br />
</strong>ディスク上に保存されたすでに訓練済みのTensorFLowのモデル。</li>
<li><strong>TensorFlow Lite Converter<br />
</strong>TensorFlowのモデルをTensorFlow Liteが使えるようにするコンバーター（変換器）。</li>
<li><strong>TensorFlow Lite Model File</strong><br />
<a href="https://google.github.io/flatbuffers/" target="_blank" rel="noopener">FlatBuffers(英語)</a>に準じたTensorFlow Liteのモデルファイルで最小化かつ最速に動くよう最適化されている。</li>
<li><strong>Java API</strong><br />
C++とAndroidのラッパー</li>
<li><strong>C++ API</strong><br />
TensorFlow Liteのモデルファイルを読み込み、インタープリターを発動させます。AndroidとiOSの両方で使えます。</li>
<li><strong>Interpreter（インタープリター）<br />
</strong>オペレーターを使ってTensorFlow Liteのモデル実行します。このインタープリターですが、部分的なオペレーターの実行も可能らしいです。オペレーター無しだとたったの70KBで、全てのオペレーターを読み込んでも300KB程度とのこと。TensorFlow Mobile（以前からあるテンソルフローの携帯電話バージョン）でさえ、通常のオペレーターで1.5Mが必要だったことを考えると、この部分の軽量化がすごいですね！</li>
</ul>
<h3>サポートしているモデル</h3>
<p>TensorFlow Lite（テンソルフローライト）ですが、現時点で3つの既存の訓練済みモデルのサポートをしています。どれもGoogleや他の組織が携帯電話用に別途開発を進めていたモデルですが、これがTensorFlow Liteではサポートされているとのこと。非常に便利ですね。</p>
<ul>
<li><a href="https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html" target="_blank" rel="noopener">MobileNet(英語)</a><br />
1000個以上のオブジェクトを認識できる事前に訓練されたビジョン系のモデル。もともと携帯電話上で使われることを想定しており軽量かつ効率的。</li>
<li><a href="https://arxiv.org/abs/1512.00567" target="_blank" rel="noopener">Inception v3 (英語)</a><br />
ILSVRCという大規模画像データセットを使った画像識別タスク用に1,000クラスの画像分類を行うよう学習されたモデルで、非常に高い精度の画像識別が可能。</li>
<li><a href="https://research.googleblog.com/2017/06/mobilenets-open-source-models-for.html" target="_blank" rel="noopener">Smart Reply (英語)</a><br />
すでにGmailで使っている方も多いと思いますが、文面を機械学習して3つの返信の提案をしてくれるあれです。</li>
</ul>
<h3>まとめ</h3>
<p>今回の記事ではTensorFlow Liteの現時点でのプレビューの概要をまとめましたが、また後日に実際に触ってみて、レビューを書きたいと思います！</p>
<p>すでにTensorFlow Liteを試したことがある方がいらっしゃれば、ぜひコメント欄にてご感想を教えてください！</p>
]]></content:encoded>
					
					<wfw:commentRss>https://www.codexa.net/tensorflow-lite-annoucement/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
