TensorFlow機械学習クックブック Pythonベースの活用レシピ60+
4,620円(本体 4,200円+税10%)
- 品種名
- 書籍
- 発売日
- 2017/8/14
- ページ数
- 392
- サイズ
- B5変形判
- 著者
- Nick McClure 著/株式会社クイープ 訳
- ISBN
- 9784295002000
TensorFlowコーディングに慣れる!
新世代の数値計算ライブラリを操る! 線形回帰からCNN/RNNまで網羅的に実践 -- TensorFlowは、数値処理用のオープンソースライブラリ。AI分野を中心に活用が進んでいます。本書ではまず、変数/プレースホルダといったTensorFlowの基本や、オープンデータを扱う方法を説明。以降は、機械学習のさまざまな手法を具体的なレシピとして示していきます。線形回帰からCNN/RNNまで解説しつつ、運用環境向けの手法や連立常微分方程式も取り上げます。
「読者アンケートに答える」「読者プレゼントに応募」の場合もこちらをご利用ください。
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。
学校・法人一括購入に関するお問い合わせはこちらへ。
詳細
著者プロフィール
以前は、ZillowとCaesar's Entertainmentに勤務。モンタナ州立大学とセントベネディクト/セントジョーンズ大学で応用数学の学位を取得。ニックはアナリティクス、機械学習、人工知能の習得と提唱に情熱を抱いている。
思いや考えをブログに綴ったり(http://fromdata.org/)、ツイートしたりしている(@nfmcclure)。
訳者プロフィール
主な訳書に、『Python機械学習プログラミング 達人データサイエンティストによる理論と実践』『Scala関数型デザイン & プログラミング―Scalazコントリビューターによる関数型徹底ガイド』『CUDA Cプロフェッショナルプログラミング』『Cisco ACIポリシーベースのデータセンター アーキテクチャ/コンセプト/メソドロジー』などがある(いずれもインプレス発行)。
http://www.quipu.co.jp
目次
第1章 TensorFlowの仕組みと基本事項を押さえる
第2章 TensorFlowスタイル
―演算/層の追加、損失関数やモデル評価などの実装
第3章 線形回帰
―逆行列/分解法からロジスティック回帰まで
第4章 サポートベクトルマシン
―線形SVMの操作/次元縮約、非線形SVM/多クラスSVMの実装など
第5章 最近傍法
―編集距離、距離関数の組み合わせ、最近傍法の画像認識など
第6章 ニューラルネットワーク
―論理ゲート、単層/多層ニューラルネットワークの実装など
第7章 自然言語処理
―BoW/TF-IDF/スキップグラム/CBOWなど
第8章 畳み込みニューラルネットワーク
―単純なCNN/高度なCNN/モデルの再トレーニングなど
第9章 リカレントニューラルネットワーク
―LSTM/Sequence-to-Sequence/Siamese Similarity法
第10章 TensorFlowを運用環境で使用する
第11章 TensorFlowをさらに活用する
―遺伝的アルゴリズム/連立常微分方程式など
関連書籍
ダウンロード
-
下記URLでサンプルコードが公開されています。
ただし、.ipynbファイルと.pyファイルのうち、基本的には.pyファイルが更新されているようです。
お詫びと訂正
誤記のためにご迷惑をおかけし、誠に申し訳ございません。
- 17ページ 1.7節の「方法」。最初の網掛けコード
- [誤]
import tensorflow.nn as nn - [正]
from tensorflow import nn as nn - 【 第2刷にて修正 】
- [誤]
- 82ページ 3.7節(Recipe 22)の方法「2.」のコード2行目末尾付近
- [誤]
heavyside_step = tf.truediv(1., tf.add(1., tf.exp(tf.multiply(-100., - [正]
heavyside_step = tf.truediv(1., tf.add(1., tf.exp(tf.multiply(-50., - 【 第3刷にて修正 】
- [誤]
- 87ページ 3.9節(Recipe 24)の方法「1.」のコード4行目以降
- [誤]
import requests
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.Session()
- [正]
import requests
import os.path
import csv
from tensorflow.python.framework import ops
ops.reset_default_graph()
sess = tf.Session()
birth_weight_file = 'birth_weight.csv'
- 【 第3刷にて修正 】
- [誤]
- 87ページ 3.9節(Recipe 24)の方法「2.」のコードの12-13行目
- [誤]
writer = csv.writer(f)
writer.writerows(birth_data) - [正]
writer = csv.writer(f)
writer.writerow(birth_header)
writer.writerows(birth_data) - 【 第3刷にて修正 】
- [誤]
- 88ページ 3.9節(Recipe 24)。「方法」の「2.」のコードのうち、下から1行目と3行目
- [誤]
y_vals = np.array([x[1] for x in birth_data])
x_vals = np.array([x[2:9] for x in birth_data]) - [正]
y_vals = np.array([x[0] for x in birth_data])
x_vals = np.array([x[1:8] for x in birth_data])
-
備考:
スクリプトの内容全体が日本語版の発売後に変更されたようです。原著GitHubにある新しい.pyファイルは問題なく動作しています(2017/11/30)。
- 【 第3刷にて修正 】
- [誤]
- 90ページ 図3-11と図3-12
- [誤]
(下記の画像に差し替え) - [正]
-
- 【 第3刷にて修正 】
- [誤]
- 117ページ 4.6節(Recipe 29)、方法「4.」のコード1~4行目(3・4行目を削除)
- [誤]
# ガウス(RBF)カーネル
gamma = tf.constant(-10.0)
dist = tf.reduce_sum(tf.square(x_data), 1)
dist = tf.reshape(dist, [-1,1])
- [正]
# ガウス(RBF)カーネル
gamma = tf.constant(-10.0)
- 【 第3刷にて修正 】
- [誤]
- 143ページ 5.6節(Recipe 34)、方法「10.」のコード末尾
- [誤]
(末尾に下記のコードを追加) - [正]
plt.show()
- 【 第3刷にて修正 】
- [誤]
- 156ページ 6.4節の「7.」 の3文目
- [誤]
ここでは、5つのノードを持つ隠れ層を指定している。 - [正]
ここでは、10個のノードを持つ隠れ層を指定している。 - 【 第2刷にて修正 】
- [誤]
- 156ページ 6.4節の「7. 」のコードの1行目
- [誤]
hidden_layer_nodes = 5 - [正]
hidden_layer_nodes = 10 - 【 第2刷にて修正 】
- [誤]
- 157ページ 6.4節の「8. 」直前のnotes囲み記事
- [誤]
「隠れ層の5つのノード」を経て、 - [正]
「隠れ層の10個のノード」を経て、 - 【 第2刷にて修正 】
- [誤]
- 167ページ 6.6節(Recipe 39)、方法「2.」のコード先頭
- [誤]
(コードの先頭に下記1行を追加) - [正]
birth_weight_file = 'birth_weight.csv' - 【 第3刷にて修正 】
- [誤]
- 168ページ 6.6節(Recipe 39)、方法「3.」の本文とコード
- [誤]
グラフセッションを開始し、結果を再現可能にするためにNumPyとTensorFlowの乱数シードを設定した後、バッチサイズを指定する。
sess = tf.Session()
seed = 3
tf.set_random_seed(seed)
np.random.seed(seed)
batch_size = 100
- [正]
グラフセッションを開始する。バッチサイズを指定し、結果を再現可能にするためにNumPyとTensorFlowの乱数シードを設定する。
sess = tf.Session()
batch_size = 100
# 結果を再現可能にする
seed = 3
tf.set_random_seed(seed)
np.random.seed(seed)
- 【 第3刷にて修正 】
- [誤]
- 173ページ 6.7節(Recipe 40)、方法「2.」のコード先頭
- [誤]
(コードの先頭に下記1行を追加) - [正]
birth_weight_file = 'birth_weight.csv' - 【 第3刷にて修正 】
- [誤]
- 174ページ 6.7節(Recipe 40)、方法「2.」のコード23~26行目
- [誤]
# 目的変数を抽出
y_vals = np.array([x[1] for x in birth_data])
# 説明変数を抽出
x_vals = np.array([x[2:9] for x in birth_data]) - [正]
y_vals = np.array([x[0] for x in birth_data]) # 目的変数を抽出
x_vals = np.array([x[1:8] for x in birth_data]) # 説明変数を抽出 - 【 第3刷にて修正 】
- [誤]
- 179ページ 6.8節(Recipe 41)、方法「1.」のコード
- [誤]
(3行目の後に下記1行を追加) - [正]
import random - 【 第3刷にて修正 】
- [誤]
- 193ページ 7.2節(Recipe 42)、方法「11.」のコード2行目
- [誤]
x_col_sums = tf.reduce_s9um(x_embed, 0) - [正]
x_col_sums = tf.reduce_sum(x_embed, 0) - 【 第3刷にて修正 】
- [誤]
- 206ページ 7.4節(Recipe 44)、方法「4.」のコード14~15行目
- [誤]
with open(os.path.join(save_folder_name,
'temp_movie_review_temp.tar.gz'), 'wb') as f: - [正]
with open('temp_movie_review_temp.tar.gz'), 'wb') as f: - 【 第3刷にて修正 】
- [誤]
- 251ページ 8.3節(Recipe 49)、方法「9.」のコード8~9行目(行頭位置)
- [誤]
# バッチサイズ全体の平均損失値を計算
cross_entropy_mean = tf.reduce_mean(cross_entropy,
name='cross_entropy')
- [正]
# バッチサイズ全体の平均損失値を計算
cross_entropy_mean = tf.reduce_mean(cross_entropy,
name='cross_entropy')
- 【 第3刷にて修正 】
- [誤]
- 255ページ 8.4節(Recipe 50)
- [誤]
このレシピはTensorFlowのチュートリアルモデルに基づいていました(このチュートリアルは、翻訳時点で提供されていました)。現時点(2017/11/30)では、TensorFlowのGitHubから削除されているため、このレシピは動作しないようです。代わりに、新しくTF_Slim(TensorFlow-Slim)というチュートリアルが提供されていますが、マシンにGPUが搭載されていないと動作しません。また、設定がかなり微妙で、多くの環境で動作しないことが報告されています。
(2018/3/30追記)機械学習モデルの再トレーニングに関しては、TensorFlowより別のチュートリアルが公開されています。
https://codelabs.developers.google.com/codelabs/tensorflow-for-poets/
https://github.com/tensorflow/models/tree/master/research/slim
- [正]
- [誤]
- 265ページ 8.5節(Recipe 51)、方法「20.」の末尾の出力結果
- [誤]
Generation 100 out of 1000, loss: 197868048.0
Generation 200 out of 1000, loss: 105772656.0
Generation 300 out of 1000, loss: 73410864.0
Generation 400 out of 1000, loss: 57265060.0
Generation 500 out of 1000, loss: 47589056.0
Generation 600 out of 1000, loss: 41183492.0
Generation 700 out of 1000, loss: 36635288.0
Generation 800 out of 1000, loss: 33242754.0
Generation 900 out of 1000, loss: 30612820.0
Generation 1000 out of 1000, loss: 28516306.0
- [正]
Generation 250 out of 5000, loss: 87071120.0
Generation 500 out of 5000, loss: 48434132.0
Generation 750 out of 5000, loss: 35496740.0
...
Generation 3500 out of 5000, loss: 13053059.0
Generation 3750 out of 5000, loss: 12472622.0
Generation 4000 out of 5000, loss: 11951470.0
Generation 4250 out of 5000, loss: 11481477.0
Generation 4500 out of 5000, loss: 11056594.0
Generation 4750 out of 5000, loss: 10671293.0
Generation 5000 out of 5000, loss: 10321217.0
- 【 第3刷にて修正 】
- [誤]
- 271ページ 8.6節(Recipe 52)、方法「13.」のコード最終行
- [誤]
sess.close() - [正]
#plt.show() # 変換後の画像を表示する場合はコメントを解除
sess.close()
- 【 第3刷にて修正 】
- [誤]
- 279ページ 9.2節(Recipe 53)、方法「12.」のコード最終行
- [誤]
logits_out = tf.nn.softmax(tf.matmul(last, weight) + bias) - [正]
logits_out = tf.matmul(last, weight) + bias - 【 第3刷にて修正 】
- [誤]
- 286ページ 9.3節(Recipe 54)、方法「8.」のコード4~6行目
- [誤]
def __init__(self, rnn_size, batch_size, learning_rate,
training_seq_len, vocab_size, infer_sample=False):
self.rnn_size = rnn_size - [正]
def __init__(self, embedding_size, rnn_size, batch_size, learning_rate,
training_seq_len, vocab_size, infer_sample=False):
self.embedding_size = embedding_size
self.rnn_size = rnn_size
- 【 第3刷にて修正 】
- [誤]
- 292ページ 9.4節(Recipe 55)ページ下の脚注内に追加
- [誤]
(以下の文を脚注※7に追加) - [正]
TensorFlow 1.5では、「Could not flatten dictionary key」というエラーになることがある。TensorFlow 1.4にダウングレードすれば、このエラーは発生しなくなる。 - 【 第3刷にて修正 】
- [誤]
- 296ページ 9.5節(Recipe 56)脚注※10を差し替え
- [誤]
このレシピはTensorFlowのチュートリアルモデルに基づいており、翻訳時点では動作していました。しかし、現時点(2017/11/30)では、こちらの検証環境において、TensorFlowのSequence-to-Sequenceモデルのseq2seq_model.pyの中でエラーになり、動作しなくなっています。これらのスクリプトは8か月前から変更されていないため、TensorFlowの新バージョンが影響している可能性があります。その場合は、チュートリアルモデルの更新を待つ必要があります。
(2018/3/31追記。3刷の脚注※10に次の内容を掲載)このseq2seqモデルとユーティリティは、削除されています。また、Sequence-to-Sequenceモデルの新しいチュートリアルが提供されています。
https://github.com/tensorflow/nmt/
- [正]
- 【 第3刷にて修正 】
- [誤]
- 332ページ 11.2節(Recipe 63)の「方法」の「2.」にあるコード最終行
- [誤]
summary_writer = tf.train.FileWriter('tensorboard', tf.get_default_graph()) - [正]
summary_writer = tf.summary.FileWriter("tensorboard", tf.get_default_graph()) -
備考:
原著GitHubのコード(.py)の当該部分は正しいものになっています。
- 【 第3刷にて修正 】
- [誤]
お問い合わせ
書籍の内容に関するお問い合わせはこちら。お答えできるのは本書に記載の内容に関することに限ります。