.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow の使い方
Toshihiko.Yamakami@access-company.com
山上俊彦
IoT 事業本部, ACCESS
2017/01
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 1 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow
Google が Apache 2.0 ライセンスで公開した機械学習ライブラリ
C, Python の API を持つ
現在のバージョンは 0.12 (20170123)
利点
モデル設計が簡単でコード記述も簡潔に書ける
商用フリーのライセンスであるため、機械学習システム導入のコス
トを抑えられる
学習がし易い
導入しやすい
欠点
ほとんどの処理がブラックボックスである: 関数の処理フローが明
確でない。エラーを動作原理まで遡って特定することができない
(報告例: ReLU 関数を引数で渡すとエラーになるが等価な関数で書
くと動く)。
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 2 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow コード記述の 3 つの部分
部分 推論処理部 損失定義部 訓練部
概要 予測のためのネットワ
ークを前方向に実行す
るために必要な推論グ
ラフを構築。出力予測を
含むテンソルを返す。
推論グラフに損失を生
成するために必要な処
理の定義を加える。損失
を返す。
勾配を計算して適用す
るために必要な処理の
定義を加える。
利用 損失定義部の入力とし
て使われる
推論処理部で定義した
テンソルを入力として
損失を返し、この結果を
訓練部が利用する
損失とハイパーパラメ
ータ (学習率) を入力す
る
# loss ( 損 失 と し て 別 に 定 義 ) inference( 推 論 グ ラ フ と し て 別 に 定 義 )
with tf.Graph().as_default():
images_placeholder , labels_placeholder = placeholder_inputs(
FLAGS.batch_size)
logits = mnist.inference(images_placeholder ,
FLAGS.hidden1 ,
FLAGS.hidden2)
loss = mnist.loss(logits, labels_placeholder)
train_op = mnist.training(loss, FLAGS.learning_rate)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 3 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
推論部の例 I
def inference(images , hidden1_units , hidden2_units):
"""Build the MNIST model
Args:
images: Images placeholder , from inputs().
hidden1_units: Size of the first hidden layer.
hidden2_units: Size of the second hidden layer.
Returns:
softmax_linear: Output tensor with the computed logits.
"""
# Hidden 1
with tf.name_scope('hidden1 '):
weights = tf.Variable(
tf.truncated_normal([IMAGE_PIXELS , hidden1_units],
stddev=1.0 / math.sqrt(float(IMAGE_PIXELS))),
name='weights ')
biases = tf.Variable(tf.zeros([hidden1_units]),
name='biases ')
hidden1 = tf.nn.relu(tf.matmul(images, weights) + biases)
# Hidden 2
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 4 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
推論部の例 II
with tf.name_scope('hidden2 '):
weights = tf.Variable(
tf.truncated_normal([hidden1_units , hidden2_units],
stddev=1.0 / math.sqrt(float(hidden1_units))),
name='weights ')
biases = tf.Variable(tf.zeros([hidden2_units]),
name='biases ')
hidden2 = tf.nn.relu(tf.matmul(hidden1 , weights) + biases)
# Linear
with tf.name_scope('softmax_linear '):
weights = tf.Variable(
tf.truncated_normal([hidden2_units , NUM_CLASSES],
stddev=1.0 / math.sqrt(float(hidden2_units))),
name='weights ')
biases = tf.Variable(tf.zeros([NUM_CLASSES]),
name='biases ')
logits = tf.matmul(hidden2 , weights) + biases
return logits
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 5 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow を書く時の注意
コードは Python だが、あくまでもループなどに見えてもリンク関
係を定義しているだけ。実際の実行は TensforFlow の中で独自に行
われる。途中に print をいれて内部状態を見るとかはできない。
記述だけをする理由: numpy などの外部数値計算ライブラリをいち
いち呼ぶと遅いので、定義だけ書いてから全部外で実行させている
ため
グラフの書き方の基本は「入力値 x に重み W をかけバイアス b
を足して活性化関数を通したあとに次の層に渡す」。これをつなげ
る。
実行は Python で書いた TensorFlow コードを Python で実行する
だけ。
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 6 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow playground
TensorFlow playground については別資料があるのでここでは説明
しない
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 7 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
用語
shape: TensorFlow が処理するテンソルの形状(次元)。通常固定だ
が reshape することもできる
name_scope: 視覚化環境の TensorBoard で表示するものをまとめ
る
logit: ロジット。認識の対数オッズ。ロジット関数はロジスティッ
ク関数の逆関数であり、特に確率論と統計学で多く用いられる。
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 8 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
初歩
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 9 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
注意
そもそも重回帰分析や SVM で解けるならそのほうが高速
TensorFlow は Google みたいに何千万個もデータもっている会社
の大規模分散処理
普通は PC に GPU 積むくらいで十分
変に GPU マシンを複数並べてもうまくやらないとかえって遅い
実際に master, worker  プロセスをつくって分散処理をさせるの
はそれなりに面倒
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 10 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
TensorFlow の利用準備
TensorFlow をインストールする
Python の環境構築から TensorFlow インストール
http://qiita.com/bohemian916/items/4f0736dcea932a162d9e (2016 年 6 月)
データを持ってくるのが課題 (末尾に TensorFlow の例を示す)
MNIST: http://yann.lecun.com/exdb/mnist/
自分のデータなら、学習用に前処理することが必要
from tensorflow.examples.tutorials.mnist import input_data
import tensorflow as tf
flags = tf.app.flags
FLAGS = flags.FLAG
flags.DEFINIE_string('data_dir ', '/tmp/data',
'Directory for storing data')
mnist = input_data.read_data_sets(FLAGS.data_dir , one_hot=True)
sess = tf.InteractiveSessions()
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 11 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
Python から動くことを確認する例 (文字列表示と加算)
>>> import tensorflow as tf
>>> hello = tf.constant('Hello, TensorFlow!')
>>> sess = tf.Session()
>>> print sess.run(hello)
Hello, TensorFlow!
>>> a = tf.constant(10)
>>> b = tf.constant(32)
>>> print sess.run(a+b)
42
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 12 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
モデルを記述するためのデータ構造
入力層: 入力データの配列 (28 ∗ 28 = 784 次元のデータならそれだ
けの配列)
重み変数: 入力データ数次元の重みベクトル(隠れ層ノードの数)
バイアス変数: 隠れ層ノードの数の配列
出力層: 出力データの配列と出力用活性化関数の定義 (識別ならソ
フトマックス関数)
x = tf.placeholder(tf.float21 , [None, 784])
W = tf.Variable(tf.zeros([784, 10]
b = tf.Variable(tf.zero([10])
y = tf.nn.softmax(tf.matmul(x, W)+b)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 13 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
誤差関連処理
交差エントロピー、誤差伝搬型関数 (学習率も) の定義
y_ = tf.placeholder(tf.float32 , [None, 10])
corss_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y),
reduction_indices=[1])
train_step =
tf.train.GradientDescentOptimizer(0.5).minimize(cross_entropy)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 14 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
学習(訓練)を行う
# 初 期 化 す る
tf.initialize_all_variables().run()
# 1000 回 繰 り 返 す
for i in range(1000):
# 訓 練 デ ー タ を 100 個選択
batch_xs , batch_ys = mnist.train.next_batch(100)
train_step.run({x: batch_xs , y_: batch_ys})
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 15 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
学習結果の検証
検証用データで試験
正答率を出す
correct_prediction=tf.equal(tf.argmax(y,1), tf.argmax(y_,1))
# True,False を0,1 に 変 換 し 平 均 を と る
accuracy = tf.reduce_mean(tf.cast(correct_prediction ,
tf.float32))
# 精 度 を 表 示
print(accuracy.eval({x:mnist.test.images,
y_:mnist.test.labels}))
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 16 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ハイパーパラメータの調整
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 17 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
変数の初期化と重みの初期化関数の定義
# 変 数 の 初 期 化
sess.run(tf.initialize_all_variables())
# 重 み を 標 準 偏 差 0.1 の 正 規 分 布 で 初 期 化
def weight_variable(shape):
initial = tf.truncated_normal(shape, stddev=0.1)
return tf.Variable(initial)
# バ イ ア ス を 標 準 偏 差 0.1 の 正 規 分 布 で 初 期 化
def bias_variable(shape):
initial = tf.constant(0.1, shape=shape)
return tf.Variable(initial)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 18 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
補足:ランダムやゼロで初期化する例
# 正 規 分 布 で 初 期 化
w_h = tf.Variable(tf.random_normal([784, 625], mean=0.0,
stddev=0.05))
w_o = tf.Variable(tf.random_normal([625, 10], mean=0.0,
stddev=0.05))
# ゼ ロ で 初 期 化
b_h = tf.Variable(tf.zeros([625]))
b_o = tf.Variable(tf.zeros([10]))
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 19 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
畳み込みのストライドとプーリングの設定
# 畳 み 込 み 層 の 作 成
def conv2d(x, W):
return tf.nn.conv2d(x, W, strides=[1, 1, 1, 1], padding='SAME')
# プ ー リ ン グ 層 の 作 成
def max_pool_2x2(x):
return tf.nn.max_pool(x, ksize=[1, 2, 2, 1],
strides=[1, 2, 2, 1], padding='SAME')
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 20 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
活性化関数 (例では ReLU 関数) とプーリング実施 (定義済)
W_conv1 = weight_variable([5, 5, 1, 32])
b_conv1 = bias_variable([32])
# 入力を 28x28x1 に変形
x_image = tf.reshape(x, [-1,28,28,1])
# 畳 み 込 み 層 1を ReLU 関 数 で 設 定
h_conv1 = tf.nn.relu(conv2d(x_image , W_conv1) + b_conv1)
# Max プ ー リ ン グ を 設 定
h_pool1 = max_pool_2x2(h_conv1)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 21 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
2 つの畳み込み層の高密度結合層の実現
W_fc1 = weight_variable([7 * 7 * 64, 1024])
b_fc1 = bias_variable([1024])
h_pool2_flat = tf.reshape(h_pool2 , [-1, 7*7*64])
h_fc1 = tf.nn.relu(tf.matmul(h_pool2_flat , W_fc1) + b_fc1)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 22 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
オンオフできるドロップアウト
keep_prob = tf.placeholder(tf.float32)
# ド ロ ッ プ ア ウ ト
h_fc1_drop = tf.nn.dropout(h_fc1, keep_prob)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 23 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ソフトマックスは既出だが 2 隠れ層の例
W_fc2 = weight_variable([1024, 10])
b_fc2 = bias_variable([10])
y_conv=tf.nn.softmax(tf.matmul(h_fc1_drop , W_fc2) + b_fc2)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 24 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
セッションを走らせる前にオプティマイザ (例は Adam)
cross_entropy = tf.reduce_mean(-tf.reduce_sum(y_ * tf.log(y_conv),
train_step = tf.train.AdamOptimizer(1e-4).minimize(cross_entropy)
correct_prediction = tf.equal(tf.argmax(y_hypo ,1),
tf.argmax(y_,1))
accuracy = tf.reduce_mean(tf.cast(correct_prediction , "float"))
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 25 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
L2 正則化の例
# Regularization terms (weight decay)
L2_sqr = tf.nn.l2_loss(w_h) + tf.nn.l2_loss(w_o)
lambda_2 = 0.01
# 損失に L2 正 則 化 を 適 用
loss = cross_entropy + lambda_2 * L2_sqr
train_step =
tf.train.GradientDescentOptimizer(0.001).minimize(loss)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 26 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
補足: 損失関数の中で疎なラベルを 0–1 の小数に変換の例
concated = tf.concat(1, [indices , labels])
onehot_labels = tf.sparse_to_dense(
concated , tf.pack([batch_size , NUM_CLASSES]), 1.0, 0.0)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 27 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
モデルの記述
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 28 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
モデルの記述例
隠れ層は,入力層の値から線形予測子を計算し,それをシグモイド関数に入れて算出
出力層は,隠れ層の値から線形予測子を求め,それをソフトマックス関数に入れて算出
コスト関数は自分のモデルの値 y_hypo を計算,さらに訓練データのラベル y_ と合わせ
て cross entropy 値を求める
# モ デ ル を 作 成
def model(X, w_h, b_h, w_o, b_o):
h = tf.sigmoid(tf.matmul(X, w_h) + b_h)
pyx = tf.nn.softmax(tf.matmul(h, w_o) + b_o)
return pyx
y_hypo = model(x, w_h, b_h, w_o, b_o)
# コ ス ト 関 数 と し て 交 差 エ ン ト ロ ピ ー を 設 定
cross_entropy = -tf.reduce_sum(y_*tf.log(y_hypo))
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 29 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
ハイパーパラメータ以外の調整や操作
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 30 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
デバイスの指定 (GPU)
with tf.Session() as sess:
# デ バ イ ス の 指 定
with tf.device("/gpu:1"):
matrix1 = tf.constant([[3., 3.]])
matrix2 = tf.constant([[2.],[2.]])
product = tf.matmul(matrix1 , matrix2)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 31 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
学習パラメータの保存と回復
tf.train.Saver() はその時点で存在するパラメータに対する保存を
定義。すべて終ってから呼ばないと想定通り保存されない
# 学 習 し た パ ラ メ ー タ の 保 存 と 読 み 込 み に は 、 tf.train.Saver を使用
saver = tf.train.Saver()
な ん ら か の 処 理
# 保存 ( あ と で 比 較 す る た め )
saver.save(sess, "model.ckpt")
# 回復
saver.restore(sess, "model.ckpt")
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 32 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
学習後、手書き文字を書いて試験
saver = tf.train.Saver()
ckpt = tf.train.get_checkpoint_state('./')
if ckpt:
last_model = ckpt.model_checkpoint_path
print "load " + last_model
saver.restore(sess, last_model)
from PIL import Image
import numpy as np
new_img = Image.open('./new_data_2.png').convert('L')
new_img = 1.0 - np.asarray(new_img, dtype="float32") / 255
new_img = new_img.reshape((1,784))
prediction = tf.argmax(y_conv ,1)
print("result: %g"%prediction.eval(feed_dict={x: new_img,
keep_prob: 1.0}, session=sess))
else:
# 学習
saver.save(sess, "model.ckpt")
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 33 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
参考資料 I
TensorFlow のチュートリアルを通して、人工知能の原理について学習する 
http://qiita.com/jintaka1989/items/3b70b5c5541620536fa2 (2016 年 12 月)
TensorFlow を使った機械学習ことはじめ (GDG 京都機械学習勉強会)
http://www.slideshare.net/ToruUenoyama/tensorflow-gdg (2016 年 2 月)
R で L1 / L2 正則化を実践する http://tjo.hatenablog.com/entry/2015/03/03/190000
(2015 年 3 月)
深層学習と TensorFlow 入門 http://www.slideshare.net/tak9029/tensorflow-67483532
(2016 年 10 月)
TensorFlow : MNIST データ・ダウンロード (コード解説)
http://tensorflow.classcat.com/2016/03/09/tensorflow-cc-mnist-data-download/
中学生にも分かる TensorFlow 入門 その1 テンソルとはなにか 
http://qiita.com/EtsuroHONDA/items/02635dc3026e29f3cb41   (2016 年 5 月)
中学生にも分かる TensorFlow 入門 その 4  プログラムの解説・フローチャート
http://qiita.com/EtsuroHONDA/items/79844b78655ccb3a7ae6 (2016 年 5 月)
Python の環境構築から TensorFlow インストール 
http://qiita.com/bohemian916/items/4f0736dcea932a162d9e (2016 年 6 月)
TensorFlow チュートリアル - ML 初心者のための MNIST(翻訳)
http://qiita.com/KojiOhki/items/ff6ae04d6cf02f1b6edf
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 34 / 35
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
参考資料 II
TensorFlow チュートリアル - 熟練者のためのディープ MNIST(翻訳)
http://qiita.com/KojiOhki/items/64a2ee54214b01a411c7
落ちこぼれないための TensorFlow Tutorial コード
http://qiita.com/TomokIshii/items/92a266b805d7eee02b1d (2016 年 4 月)
TensorFlow でアニメゆるゆりの制作会社を識別する
http://kivantium.hateblo.jp/entry/2015/11/18/233834 (2015 年 11 月)
[TF]Tensorflow の学習パラメータの保存と読み込み方法
http://qiita.com/supersaiakujin/items/fc400fc6fa58b3809619 (2016 年 4 月)
TensorFlow : How To : 変数: 作成、初期化、保存そしてロード
http://tensorflow.classcat.com/2016/02/09/tensorflow-how-tos-variables/ (2016 年 2 月)
TensorFlow で学習済みモデルを使用する (Deep MNIST for Experts の応用)
http://walkingmask.hatenablog.com/entry/2016/08/27/032400 (2016 年 8 月)
TensorBoard で処理を可視化する 
http://www.mwsoft.jp/programming/tensor/tutorial_tensorboad.html (2016 年 5 月)
TensorFlow : 全結合モデル for MNIST (コード解説)
http://tensorflow.classcat.com/2016/03/11/tensorflow-cc-mechanics-101/ (2016 年 3 月)
Tensorflow_in_ROS のコードを解説する
http://qiita.com/shunchan0677/items/60f8f567359fbbbf9321 (2016 年 11 月)
TensorFlow : CNN – 畳み込みニューラルネットワーク for CIFAR-10 (コード解説) 
http://tensorflow.classcat.com/2016/03/12/tensorflow-cc-convolutional-neural-networks/
(2016 年 3 月)
山上俊彦 (ACCESS Confidential) TensorFlow の使い方 2017/01 35 / 35

TensorFlowの使い方(in Japanese)