直線平面のフィット(Fit Linear Plane)

4293 ワード

TensorFlowの勉強を始めたばかりでなく、Pythonも上手になったばかりです.コードのいくつかの関数についてよく分からないので、実行しながらデバッグして、これらの文が何を生み出すかを見てみましょう.次に、コードと実行結果を解放し、コードを文ごとに分析します.
コード:

import tensorflow as tf
import numpy as np

NumPy (phony data), 100 .

x_data = np.float32(np.random.rand(2, 100)) #
y_data = np.dot([0.100, 0.200], x_data) + 0.300

b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)

init = tf.initialize_all_variables()

(graph)

sess = tf.Session()
sess.run(init)

for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print (step, sess.run(W), sess.run(b))


結果:

0 [[-0.62681621 0.8956036 ]] [ 0.55624533]
20 [[-0.07822994 0.29091078]] [ 0.33930907]
40 [[ 0.05776684 0.21007288]] [ 0.31511602]
60 [[ 0.08916989 0.19971299]] [ 0.30532804]
80 [[ 0.09701692 0.19925731]] [ 0.30180326]
100 [[ 0.09913072 0.19964069]] [ 0.30059773]
120 [[ 0.09973642 0.19986197]] [ 0.30019596]
140 [[ 0.099918 0.19995138]] [ 0.30006385]
160 [[ 0.09997409 0.19998357]] [ 0.30002069]
180 [[ 0.09999172 0.19999455]] [ 0.30000672]
200 [[ 0.09999731 0.19999819]] [ 0.30000219]

逐句剖析:
1)x_dataって何?
 
 

x_data = np.float32(np.random.rand(2, 5))
print(x_data)
[[ 0.84190673 0.23715617 0.10634095 0.03980473 0.5689218 ]
[ 0.39800221 0.54160982 0.50710446 0.44064671 0.69939655]]


np.random.rand(2,5)はランダムに2行5列のリストを生成し、np.float 32()は、各要素のタイプがnpであることを保証する.float 32タイプ.(原コードは(2100)であり、ここでは(2,5)の表示を容易にするために表示されている.)
2)y_dataって何?

y_data = np.dot([0.100, 0.200], x_data) + 0.300

[0.100, 0.200](1×2マトリックス)とx_data(2×100行列)の行列積(1×100)、各要素に0.3を加えると、100の次の式に相当します.
y_data = W1x1+W2x2+b
Tips:平面方程式の一般式は
Ax+By+Cz+D=0,  A,B,C,D     ,  A,B,C     。
3)b=tf.Variable(tf.zeros([1]))
 
 

print(tf.Variable(tf.zeros([1])))
Tensor("zeros:0", shape=(1,), dtype=float32)


bはテンソルで、具体的にはTensorFlowのテンソルの定義を見てみましょう.
TensorFlowはテンソルというデータ構造ですべてのデータを表す.テンソルをn次元の配列やリストに想像することができますテンソルには静的タイプと動的タイプの次元数がある.ソース(http://www.tensorfly.cn/tfdoc/resources/dims_types.html)
ここを見るとやはりちょっと謎ですね!まず彼を見逃して、後ろを見て、何か啓発があるかもしれない.
4)W=tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))

tf.random_uniform(shape,minval=0,maxval=None,dtype=tf.float32,seed=None,name=None)

均一分布乱数Tensorを生成するために使用され、サイズはshape、範囲は[minval,maxval]である.
5)y=tf.matmul(W,x_data)+bここでWのshapeは(1,2)、x_dataのshapeは(2100)であり,行列を乗算してshapeが(1100),bのshapeが(1,)となり,加算に対応する.

b = tf.Variable(tf.zeros([1]))
W = tf.Variable(tf.random_uniform([1, 2], -1.0, 1.0))
y = tf.matmul(W, x_data) + b

上の3つの文は線形モデルを構成します.
6)対価関数と最適化目標

loss = tf.reduce_mean(tf.square(y - y_data))
optimizer = tf.train.GradientDescentOptimizer(0.5)
train = optimizer.minimize(loss)
lossは代価関数を表し、yとy_をとる.data差分二乗の平均値.optimizerは勾配降下アルゴリズムを用い,学習速度は0.5であることを示した.trainは最適化目標、すなわちlossを最小化することを表す.
7)セッションを開始し、トレーニングを開始します.
 
 

init = tf.initialize_all_variables()

(graph)

sess = tf.Session()
sess.run(init)

for step in range(0, 201):
sess.run(train)
if step % 20 == 0:
print (step, sess.run(W), sess.run(b))


201回の訓練を行い、現在のWとbを20回おきに出力する.注意Wとb(Tensor)を出力する方法.
まとめ:
インスタンスでは、まずNumPyを使用して偽データ(phony data)を生成します.すなわち、フィットする平面が必要です.次に仮定モデルを構築します.代価関数、最適化方法、最適化目標を決定した.最後にセッションを開き,セッションでトレーニングを行い,決定が必要なWとbを出力する.