トップページ > コンテンツ > 機械学習関連 > 機械学習のライブラリ > tensorflow

ぶっちゃっけ、こっち見た方が早いと思うので、
自分用メモ書き程度の記載。

■tensorflowインストール手順

■おおまかな記述の流れ
項番 処理概要 書き方イメージ
0 おまじない(インポート) import tensorflow as tf
1 入出力データの箱としてplaceholderを用意する。 XXX = tf.placeholder(要素のタイプ,shape指定)(※1)
パラメータ類を用意する。 XXX = tf.Variable(変数値,name="名前")(※2)
その他不変値等の変数を準備 XXX = tf.constant(定数)
2 モデル式[数式]を用意する。 def model(引数):
  数式定義
  return 引数に対する結果
3 誤差関数を用意する。
(モデル式[数式]と実データの差分(距離)を
どういう尺度で計るか決める)
cost = tf.reduce_mean(tf.square(model-実際の結果が入った変数))(※3)
4 最適化(学習)方法を決める train_step = tf.train.GradientDescendantOptimize(学習率).minimize(cost)(※4)
5 変数を有効化する init = tf.global_variables_initializer()
学習処理を実行する sess = tf.session()
print(sess.run(変数,feed_dict{placehoderに与える値}))(※5)
6 評価する coincidenceTrueFalse = tf.equal(tf.argmax(y,1),tf.argmax(_y,1))
coincidence1or0 =tf.reduce_mean(tf.cast(coincidenceTrueFalse),tf.float32))(※6)
番外:ある入力値に対して学習されたモデルがどのような結果を出すか見たい場合は… 案1:model.eval(session=sess,feed_dict={x:入力値}
案2:sess.run(model,feed_dict={x:入力値})
番外:学習されたモデルのパラメータ値を得るには… w_out, _ =sess.run([w,train_step],feed_dict={x:入力値})のように、sess.run時にwの内容がw_outに入るようにしておく。

(※1)
[]で配列を表現する。[None]とすると任意の長さの配列。

tf.placeholder(tf.float32,[3])は[x,x,x]。
tf.placeholder(tf.float32,[None])は[x,x,x,....任意の数]。
tf.placeholder(tf.float32,[3,4])は以下。
[[x x x x],
[[x x x x],
[[x x x x]]

(※2)ニューラルネットワーク等の場合、入力の総和に対してどう出力するかを定義する活性化関数をかませたりする。


(※3)標準偏差の場合の一例。
tf.reduce_meanは合計の平均値で、標準偏差の1/nΣ部分
tf.squareは、標準偏差の(y-y)^2部分。

クロスエントロピーの場合は
  • tf.reduce_summ(t*tf.log(y)+(1-y)*tf.log(1-y))のように表現するが、
こちらのサイトにあるように途中のlog(0)で結果がnanになる罠にはまった。

(※4)勾配降下法の場合の一例。

(※5)
xxx = sess.run(変数)とするとxxxに変数の内容が格納される。
_a, _b = sess.run([変数A,変数B])という書き方をすると、変数Aの値が_aに変数Bの値が_bに格納される。

(※6)結果比較の一例。
  • tf.equalは2引数が一致するかをTrue False形式で与える
  • tf.argmax(x,1)は[X,Y,Z]のような配列があった場合の最大値の要素が何番目かを伝える。[20,30,40]の場合は2。ちなみに1の部分の意味合いはこちらのサイトが分かりやすい。2次元配列なら、0が列、1が行の意味になる。
  • tf.castでTrue False形式を0,1に変換することで、一致率を数値として表現できる。

■デバッグ
pdbでは見切れないので、tensorflowのtfdbgを使う模様。

最終更新:2018年11月15日 23:37