メルマガ登録
※TensorFlowとは2015年11月9日にオープンソース化されたGoogleの機械学習ライブラリです。
本ブログでは、実際のTensorFlowの使い方を連載方式でご紹介しています。
皆様こんにちは。
テクノロジー&ソフトウェア開発本部の佐藤貴海です。
本ブログでは、「Variables: Creation, Initializing, Saving, and Restoring」をご紹介します。
https://www.tensorflow.org/versions/master/how_tos/variables/index.html
「Variables: Creation, Initializing, Saving, and Restoring」というタイトルからもわかるとおり、この章では、TensorFlow上での変数の取り扱いについて解説しています。
ただし、元のチュートリアルもそうであるように、特に詳細な解説というわけではなく簡単な機能の紹介となります。
まずは「ふんふん」と軽い気持ちで読んでいただき、後のチュートリアルで出てきた時に改めて解説させていただこうと思います。
今回、以下の2点を中心に解説をします。
tf.Variableで変数を作成することができます。
# Create two variables.
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name="weights")
biases = tf.Variable(tf.zeros([200]), name="biases")
これは前回のブログまででやったことをそのまま実行しています。ただし、初期化するのを忘れずに。
TensorFlowでは、初期化を明示的に実行しないと変数が確保されません。
これは、GPUへのメモリ転送などのオーバーヘッドを避けるためだと思われます。
# Add an op to initialize the variables.
init_op = tf.initialize_all_variables()
# Later, when launching the model
with tf.Session() as sess:
# Run the init operation.
sess.run(init_op)
(以下略)
こちらも以前やった通りです。
tf.initialize_all_variablesは全変数を初期化(確保)してしまうので、一部変数の初期値だけ必要な場合には適しません。
ある変数の初期値だけ必要な場合は、initialized_value()を使う方が良さそうです。
# 普通の変数宣言
weights = tf.Variable(tf.random_normal([784, 200], stddev=0.35),
name="weights")
# weightsと同じ値をもつ変数を宣言
w2 = tf.Variable(weights.initialized_value(), name="w2")
# weightsの2倍の値をもつ変数を宣言
w_twice = tf.Variable(weights.initialized_value() * 2.0, name="w_twice")
tf.initialize_all_variables()で、変数のリストを渡して初期化することもできます。
tf.train.Saver()を使用して、変数の保存(シリアライズ)と復元ができます。
今回の例では、あまりすごさが伝わりづらいかも知れませんが、この機能により各エポックでのモデルの保存や復元ができるようになるため、モデルの評価を後々に非常にやりやすくなります。
詳しくは「4-1. Convolutional Neural Networks」でご紹介させていただく予定です。
# 変数を用意して
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# 初期化して
init_op = tf.initialize_all_variables()
# Saverを用意して
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(init_op)
# Saver.saveで保存
save_path = saver.save(sess, "/tmp/model.ckpt")
print("Model saved in file: %s" % save_path)
# 変数を用意して
v1 = tf.Variable(..., name="v1")
v2 = tf.Variable(..., name="v2")
...
# 初期化して
init_op = tf.initialize_all_variables()
# Saverを用意して
saver = tf.train.Saver()
with tf.Session() as sess:
sess.run(init_op)
# Saver.restoreで保存
saver.restore(sess, "/tmp/model.ckpt")
tf.train.Saverにリストか辞書を渡すと、保存・復元する変数の選択ができます。
また、辞書の場合は、シリアライズされている名前と異なった名称で保存・復元することができます。
# シリアライズされた中のmy_v2変数をv2として復元する
saver = tf.train.Saver({"my_v2": v2})
この機能により、過去に3層目まで学習したモデルに、新しく層を追加したい時など、モデルの再利用がしやすくなっています。
次回は「3-1. TensorFlow Mechanics 101」を公開予定です。次回のブログも、今回と同様に簡単な機能の紹介として、学習結果の確認ができる「TensorBoard」の紹介を予定しています。
あなたにオススメの記事
2023.12.01
生成AI(ジェネレーティブAI)とは?ChatGPTとの違いや仕組み・種類・活用事例
2023.09.21
DX(デジタルトランスフォーメーション)とは?今さら聞けない意味・定義を分かりやすく解説【2024年最新】
2023.11.24
【現役社員が解説】データサイエンティストとは?仕事内容やAI・DX時代に必要なスキル
2023.09.08
DX事例26選:6つの業界別に紹介~有名企業はどんなDXをやっている?~【2024年最新版】
2023.08.23
LLM(大規模言語モデル)とは?生成AIとの違いや活用事例・課題
2024.03.22
生成AIの評価指標・ベンチマークとそれらに関連する問題点や限界を解説