LoginSignup
2
2

More than 5 years have passed since last update.

TensorFlow, Python初心者がMNISTコードを理解していく(1)

Last updated at Posted at 2018-07-21

MNISTコードはTensorFlowのチュートリアルの1つです。
原文コードはこちら
https://github.com/tensorflow/tensorflow/blob/r1.4/tensorflow/examples/tutorials/mnist/mnist_softmax.py

def main(_):

defはpythonの関数定義らしい。mainと名前が付いているがエントリポイントではなさげ。
関数は{}中かっこで開始と終了を表すのではなく、インデントで表現してるっぽい。
他の言語以上にインデントが重要ですね。引数の「_」はなんでしょうね…
引数なし関数っぽいのですが、調べてもうまく出てこなかったorz まぁいいや。

# Import data
mnist = input_data.read_data_sets(FLAGS.data_dir)

最初にデータを読み込んでいる。
中身は28×28のグレースケール画像で、28×28=784次元ベクトルとして扱う様子

  # Create the model
  x = tf.placeholder(tf.float32, [None, 784])
  W = tf.Variable(tf.zeros([784, 10]))
  b = tf.Variable(tf.zeros([10]))
  y = tf.matmul(x, W) + b

  # Define loss and optimizer
  y_ = tf.placeholder(tf.int64, [None])

はい、ここですね。一瞬わからんくなりましたが。
[None, 784]
 ↑列 ↑行です。行と列を逆に思い込んでしまったので混乱しました。
[784, 10]
↑列 ↑行です。 
[10]
↑列です。
分かれば、大したことないですね。

xには最初のmnist画像が放り込まれます。
Noneは画像の個数で、最初には未定義でいいらしい。便利
tf.placeholderは実行時に値を渡せばいいらしいですが、tf.Variableでも行けそうな
気配はしてます。あかんのかな。(知識不足)

最終的に欲しいのは10次元の列ベクトルなので、この式になります。
[784行,x列] × [10行,784列] + [10列] = 出力は10次元の列ベクトル

y = tf.matmul(x, W) + b

y = ax + bの直線の方程式を求めるのと似てますね。
xとyが決まっていて、aとbを学習によって求めようというアプローチです。(たぶん)

x = 画像
y = 0〜9の数値を表す結果
a(W) = 画素ごとの重み(特徴量)
b = バイアス

続きはまた!

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2