「TensorFlow」の版間の差分
ナビゲーションに移動
検索に移動
(相違点なし)
|
2021年6月3日 (木) 14:48時点における版
| 機械学習 |
目次
TensorFlow
- Googleが公開した機械学習フレームワーク
- 便利なPython APIと比較すると劣るがC++ APIを備える
- すべての数学は抽象化される
- TensorBoardというインタラクティブ=な可視化環
ドキュメント
インストール
Dockerを使用したインストール
TensorFlow DockerイメージをUbuntuに構築し他ホストから接続する
$ docker pull tensorflow/tensorflow:latest # Download latest stable image $ docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter # Start Jupyter server
$ docker run -it --net shared_nw --ip 192.168.0.10 -p 8888:8888 tensorflow/tensorflow:latest-jupyter
- Docker Desktopにイメージが登録された
- Jupyter notebookを起動
tokenを確認
- 一度終了したコンテナを再度起動
$ docker ps -a CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES 92ce0f7112eb tensorflow/tensorflow:latest-jupyter "bash -c 'source /et…" 25 hours ago Exited (0) 4 seconds ago sleepy_varahamihira $ docker start 92ce0f7112eb 92ce0f7112eb $ docker exec -it 92ce0f7112eb /bin/bash ________ _______________ ___ __/__________________________________ ____/__ /________ __ __ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / / _ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ / /_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/
- シェルからトークンを取得する
root@92ce0f7112eb:/tf# jupyter notebook list Currently running servers: http://0.0.0.0:8888/?token=dda07003bf50df42ccbd737ea09753318149a29a21b4ebe5 :: /tf
テンソル
テンソルの作成
import tensorflow as tf # 2x1行列 m1 = tf.constant([[1. , 2.]]) # 1x2行列 m2 = tf.constant([ [1], [2] ]) # ランク3のテンソルを定義 m3 = tf.constant([ [ [1,2], [3,4], [5,6] ], [ [7,8], [9,10], [11,12] ] ]) print(m1) print(m2) print(m3)
- 結果
tf.Tensor([[1. 2.]], shape=(1, 2), dtype=float32) tf.Tensor( [[1] [2]], shape=(2, 1), dtype=int32) tf.Tensor( [[[ 1 2] [ 3 4] [ 5 6]] [[ 7 8] [ 9 10] [11 12]]], shape=(2, 3, 2), dtype=int32)
テンソル初期化
- 5×5のテンソルを0.25で初期化
m4 = tf.ones([5,5]) * 0.25 print(m4)
- 結果
tf.Tensor( [[0.25 0.25 0.25 0.25 0.25] [0.25 0.25 0.25 0.25 0.25] [0.25 0.25 0.25 0.25 0.25] [0.25 0.25 0.25 0.25 0.25] [0.25 0.25 0.25 0.25 0.25]], shape=(5, 5), dtype=float32)
演算子
- 使用例
x = tf.constant([[1,2]]) nx = tf.negative(x) print(nx)
- 結果
tf.Tensor([[-1 -2]], shape=(1, 2), dtype=int32)
演算子 | 内容 | 備考 |
---|---|---|
add | ||
subract | ||
multiply | ||
pow | ||
exp | ||
sqrt | ||
div | ||
truediv | ||
floordiv | ||
mod |
コードをグラフとして理解
- 全ての演算子をノードとして考える
- ノード間の辺は数学関数の構成
- データは矢印を通って流れる
セッション
- https://www.tensorflow.org/guide/effective_tf2?hl=ja
- TensorFlow 1.X では、ユーザーは tf.* API 呼び出しを行って、手動で抽象構文木(グラフ)を作成する必要がありました
- API を呼び出したら、出力テンソルと入力テンソルのセットを session.run() 呼び出しに渡して、手動で抽象構文木をコンパイルする必要があった
- TensorFlow 2.0 はこれを逐次的に実行(Python が通常行うのと同じように)し、グラフとセッションは実装の詳細のような感覚になっています
# TensorFlow 1.X outputs = session.run(f(placeholder), feed_dict={placeholder: input}) # TensorFlow 2.0 outputs = f(input)
変数
- 変数は tf.Variable クラスを介して作成および追跡されます。tf.Variable は、そこで演算を実行して値を変更できるテンソルを表します。特定の演算ではこのテンソルの値の読み取りと変更を行うことができます。
import tensorflow as tf raw_data = [1.,2.,8.,-1.,0.,5.5,6.,13] spike = tf.Variable(False) for i in range(1, len(raw_data)): if raw_data[i] - raw_data[i - 1] > 5: spike.assign(True) else: spike.assign( False) print(f"Spike {spike.numpy()}")
- 結果
Spike False Spike True Spike False Spike False Spike True Spike False Spike True
保存と読み込み
- トレーニングのチェックポイント
- 「TensorFlow のモデルを保存する」という言いまわしは通常、次の 2 つのいずれかを意味します。
- チェックポイント
- 保存されたモデル(SavedModel)
チェックポイント
- チェックポイントは、モデルで使用されるすべてのパラメータ(tf.Variableオブジェクト)の正確な値をキャプチャします
- チェックポイントにはモデルで定義された計算のいかなる記述も含まれていないため、通常は、保存されたパラメータ値を使用するソースコードが利用可能な場合に限り有用
- TensorFlow 1.xのtf.compat.v1.train.Saverが変数名ベースのチェックポイントを読み書きするのとは対照的に、Checkpoint.save()とCheckpoint.restore()はオブジェクトベースのチェックポイントを読み書きします。
SavedModel
- パラメータ値(チェックポイント)に加え、モデルで定義された計算のシリアライズされた記述が含まれています。
- モデルを作成したソースコードから独立
- TensorFlow Serving、TensorFlow Lite、TensorFlow.js、または他のプログラミング言語のプログラム(C、C++、Java、Go、Rust、C# などの TensorFlow API)を介したデプロイに適している
Tips
The kernel appears to have died. It will restart automatically.
- これだけだと原因は分からないのですが、 コンソールからPythonを起動し、同じコードをコピペして実行
>>> import tensorflow Illegal instruction (core dumped)
© 2006 矢木浩人