markdown tensorflow使い方
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了markdown tensorflow使い方相关的知识,希望对你有一定的参考价值。
# TensorBoardの使い方
## tensorflow側のAPI
+ tf.summary.FileWriter("ログの出力ディレクトリ",graph=) : 第2引数のgraphには```sess.graph```を与えることでセッションオブジェクトのgraphプロパティを指定し、
定義されている全計算グラフに関する情報がログファイルに出力される
**基本的に計算グラフ(ノードを線でつないだやつ)を表示させるだけならこれだけでOK**
+ tf.name_scope("名前") : withで囲んで使用する 汎用的に使うスコープ定義 グループを作成し、グラフを見やすくできる
+ tf.variable_scope("名前") : withで囲んで使用する 変数を管理するための専用スコープ
+ tf.get_variable() : 変数名の識別子(親か、重複がないか)を管理して、変数を定義する
=> **```tf.variable_scope()``` とセットで使用する**
+ tf.summary.merge_all() : tensorboard描画用の変数を、TensorBoardが利用するsummaryデータとして結合し、summaryのOPを取得する
+ tf.summary.histogram('名前',ヒストグラムを表示させたいテンソル) : ヒストグラムの可視化に使用
+ tf.summary.scalar('名前',スカラー値) : スカラー値の可視化に使用
+
# tensorflowの最新バージョンでの変更点
旧バージョンで書かれているコードなどでミスをしないため
下記の部分に注意する
+ ```tf.audio_summary``` => ```tf.summary.audio```
+ ```tf.contrib.deprecated.histogram_summary``` => ```tf.summary.histogram```
+ ```tf.contrib.deprecated.scalar_summary``` => ```tf.summary.scalar```
+ ```tf.histogram_summary``` => ```tf.summary.histogram```
+ ```tf.image_summary``` => ```tf.summary.image```
+ ```tf.merge_all_summaries``` => ```tf.summary.merge_all```
+ ```tf.mrge_summary``` => ```tf.summary.merge```
+ ```tf.scalar_summary``` => ```tf.summary.scalar```
+ ```tf.train.SummaryWriter``` => ```tf.summary.FileWriter```
# Tensorflowの基本的な使い方
## 用語
+ グラフ : tensorflowの処理は[データフローグラフ]として構築する
+ データフローグラフ : ノードという計算ブロックのようなものをエッジといわれる線でつなげたもの
+ ノード : グラフを構成するもの
+ オペレーション(OP) : tensorflowではグラフを構成するノードのことをオペレーションという
オペレーションはテンソルという多次元配列の一種の形でデータを保持している
上記は基本的にROSのノードの関係をイメージするといける
オペレーションの中身を見ようとprintをしてもオペレーションは変数ではないのでTensorしか表示されない
+ セッション : tf.constantなどはあくまで計算グラフが定義されただけなので、実際の値を確認するにはセッションを開始し、処理を実行する必要がある
## 基本API(計算,変数系)
+ tf.constant(値, shape=行列の形を配列で, dtype=データの型) : 定数を作る (stringでもok)
dtypeの部分には```tf.float32``` や ```tf.int64``` などを設定する
+ tf.Variable(初期値, name="名前") : 引数には初期値を渡す => 初期値は行列でも、なんでもOK
+ tf.assign(変数, 変数に代入する値) : 変数に値を代入する => 返り値は新しい値が入った変数
+ tf.global_variables_initializar() : 変数を初期化する => これを変数に代入し、下記のsess.run()で実行する
(旧 tf.initialize_all_variables()
+ tf.placeholder(dtype=データ型, shape=形を表す, name="名前")
: プレースホルダーはデータが格納される予定地 => データは未定のままグラフを構築し、実行時に具体的な値を与える
プレースホルダーに値を渡すには ```sess.run(feed_dict={プレースホルダー: 値})``` というようにrunの引数に辞書型で与える
+ tf.add(x,y) : 要素ごとの和
+ tf.multiply(x,y) : 要素ごとの積 (旧 tf.mul)
### Optimizer系
+ tf.train.GradientDescentOptimizer(学習率).minimize(cost) :学習率を入力し、minimizeでcostに与えた計算が最小になるようにパラメータを探索する
costには交差エントロピーなどを定義する
+ tf.train.AdagradOptimizer : 上記のAdaGrad法版
+ tf.train.MomentumOptimizer : 上記のモメンタム法版
+ tf.train.AdamOptimizer : Adam法版
+ tf.train.FtrlOptimizer : Follow the Regularized Leader アルゴリズム
+ tf.train.RMSPropOptimizer : 学習率の調整を自動化したアルゴリズム
## セッション関連
+ tf.Session : tensorflowをrunするクラス
基本的に使用しなくなったsessionはリリースする方がいい
ex)
```
#closeを使用するパターン
sess = tf.Session()
sess.run()
sess.close()
#contextマネージャーを使用する
with tf.Sessoin() as sess:
sess.run()
```
+ sess.run() [sessは上記のクラスを初期化したもの ```sess = tf.Session()```とする]
: runコマンドに出力として使いたいOPを指定して実行することで、グラフからの出力を計算できる
=> runの引数は最後のアウトプットのOPで、そのアウトプットに必要な計算は自動で行われる
sess.run()は引数に出力してほしいOPのリストを引数に与えることができる=>返ってくる値もリスト
ex)
```
result = sess.run([test1,test2])
>>> resultにはリストで結果が返ってくる
```
## <u>セッションと変数</u>
+ **セッションの代入操作の流れ** : 変数とセッションについて初期値0の変数を定義し,1を代入する流れをみる
```
var1 = tf.Variable(0) #0の初期値が入ったvar1という変数を定義
update_var1 = tf.assing(var1,1) #代入する操作を定義
sess = tf.Session
sess.run(tf.initialize_all_variables) #ここで初期化が実行されvar1に0が定義される
print(sess.run(var1))
#まだ代入操作が実行されてないためvar1には0が入っているため0が表示される
sess.run(update_var1) #ここで代入操作が実行されvar1に1が定義される
print(sess.run(var1) #上で代入が行われているため1が表示される
```
+ **セッションと変数の紐づけ**
```
var1 = tf.Variable(0)
const2 = tf.constant(3)
add_op = tf.add(var1, const2)
update_var1 = tf.assign(var1, add_op)
mul_op = tf.mul(add_op, update_var1)
init_op = tf.global_variables_initializer()
sess = tf.Session()
sess.run(init_op)
print(sess.run(mul_op)) >>> 9
print(sess.run(mul_op)) >>> 36
sess.close()
sess = tf.Session() #closeなしでwithでもOK
sess.run(init_op)
print(sess.run(mul_op)) >>> 9
print(sess.run(mul_op)) >>> 36
sess.close()
```
上記のプログラムより,変数はセッションに紐づいている
そのためwithやcloseでセッションを閉じると変数の記憶はなくなる
+ **セッションと変数の代入タイミング**
```
var1 = tf.Variable(0)
const2 = tf.constant(3)
add_op = tf.add(var1, const2)
update_var1 = tf.assign(var1, add_op)
mul_op = tf.mul(add_op, update_var1)
init_op = tf.global_variables_initializer()
with tf.Session() as sess
sess.run(init_op)
print(sess.run(mul_op)) >>> 9 #このときのvar1には0が入っている>>終了した >> 3を代入
print(sess.run([mul_op, mul_op])) >>> [36,36] #このときは6が入っている >> 6を代入
print(sess.run([mul_op, mul_op]) >>> [81, 81]
```
上記のプログラムより、runに指定したオペレーションがすべて完了した後に変数に値が代入される
変数の代入後操作の後のrunから代入された変数を使用できる
以上是关于markdown tensorflow使い方的主要内容,如果未能解决你的问题,请参考以下文章