7,556 バイト追加
、 2021年6月3日 (木) 14:48
| [[機械学習]] |
==[https://www.tensorflow.org/?hl=ja TensorFlow]==
*Googleが公開した機械学習フレームワーク
*便利な[[Python]] APIと比較すると劣るがC++ APIを備える
*すべての[[数学]]は抽象化される
*[https://www.tensorflow.org/tensorboard/get_started?hl=ja TensorBoard]というインタラクティブ=な可視化環
===ドキュメント===
----
*[https://www.tensorflow.org/tutorials?hl=ja チュートリアル]
*[https://www.tensorflow.org/guide?hl=ja ガイド]
===[https://www.tensorflow.org/install?hl=ja インストール]===
----
====[[Docker]]を使用したインストール====
----
[https://www.typea.info/blog/index.php/2021/05/24/ubunt_docker_tensorflow_other_host_bridge/ TensorFlow DockerイメージをUbuntuに構築し他ホストから接続する]
<pre>
$ docker pull tensorflow/tensorflow:latest # Download latest stable image
$ docker run -it -p 8888:8888 tensorflow/tensorflow:latest-jupyter # Start Jupyter server
</pre>
<pre>
$ docker run -it --net shared_nw --ip 192.168.0.10 -p 8888:8888 tensorflow/tensorflow:latest-jupyter
</pre>
*[[Docker]] Desktopにイメージが登録された
[[File:ml_docker_desktop.png|500px]]
*Jupyter notebookを起動
[[File:ml_tensorflow.png|500px]]
====tokenを確認====
----
*一度終了したコンテナを再度起動
<pre>
$ 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
________ _______________
___ __/__________________________________ ____/__ /________ __
__ / _ _ \_ __ \_ ___/ __ \_ ___/_ /_ __ /_ __ \_ | /| / /
_ / / __/ / / /(__ )/ /_/ / / _ __/ _ / / /_/ /_ |/ |/ /
/_/ \___//_/ /_//____/ \____//_/ /_/ /_/ \____/____/|__/
</pre>
*シェルからトークンを取得する
<pre>
root@92ce0f7112eb:/tf# jupyter notebook list
Currently running servers:
http://0.0.0.0:8888/?token=dda07003bf50df42ccbd737ea09753318149a29a21b4ebe5 :: /tf
</pre>
===[https://www.tensorflow.org/guide/tensor?hl=ja テンソル]===
----
====テンソルの作成====
----
<pre>
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)
</pre>
*結果
<pre>
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)
</pre>
====テンソル初期化====
----
*5×5のテンソルを0.25で初期化
<pre>
m4 = tf.ones([5,5]) * 0.25
print(m4)
</pre>
*結果
<pre>
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)
</pre>
===演算子===
----
*使用例
<pre>
x = tf.constant([[1,2]])
nx = tf.negative(x)
print(nx)
</pre>
*結果
<pre>
tf.Tensor([[-1 -2]], shape=(1, 2), dtype=int32)
</pre>
*https://www.tensorflow.org/api_docs/python/tf/math
{| class="wikitable"
|-
! scope="col"| 演算子
! scope="col"| 内容
! scope="col"| 備考
|-
| 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 が通常行うのと同じように)し、グラフとセッションは実装の詳細のような感覚になっています
<pre>
# TensorFlow 1.X
outputs = session.run(f(placeholder), feed_dict={placeholder: input})
# TensorFlow 2.0
outputs = f(input)
</pre>
===[https://www.tensorflow.org/guide/variable?hl=ja 変数]===
----
*変数は tf.Variable クラスを介して作成および追跡されます。tf.Variable は、そこで演算を実行して値を変更できるテンソルを表します。特定の演算ではこのテンソルの値の読み取りと変更を行うことができます。
<pre>
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()}")
</pre>
*結果
<pre>
Spike False
Spike True
Spike False
Spike False
Spike True
Spike False
Spike True
</pre>
====保存と読み込み====
----
*[https://www.tensorflow.org/guide/checkpoint トレーニングのチェックポイント]
*「TensorFlow のモデルを保存する」という言いまわしは通常、次の 2 つのいずれかを意味します。
**チェックポイント
**保存されたモデル(SavedModel)
=====[https://www.tensorflow.org/guide/checkpoint チェックポイント]=====
*チェックポイントは、モデルで使用されるすべてのパラメータ(tf.Variableオブジェクト)の正確な値をキャプチャします
*チェックポイントにはモデルで定義された計算のいかなる記述も含まれていないため、通常は、保存されたパラメータ値を使用するソースコードが利用可能な場合に限り有用
*TensorFlow 1.xのtf.compat.v1.train.Saverが変数名ベースのチェックポイントを読み書きするのとは対照的に、Checkpoint.save()とCheckpoint.restore()はオブジェクトベースのチェックポイントを読み書きします。
=====[https://www.tensorflow.org/guide/saved_model SavedModel]=====
*パラメータ値(チェックポイント)に加え、モデルで定義された計算のシリアライズされた記述が含まれています。
*モデルを作成したソースコードから独立
*TensorFlow Serving、TensorFlow Lite、TensorFlow.js、または他のプログラミング言語のプログラム(C、C++、Java、Go、Rust、C# などの TensorFlow API)を介したデプロイに適している
===Tips===
====[https://analytics-note.xyz/programming/tensorflow-omp-error-libiomp5/ The kernel appears to have died. It will restart automatically.]====
----
*これだけだと原因は分からないのですが、 コンソールからPythonを起動し、同じコードをコピペして実行
<pre>
>>> import tensorflow
Illegal instruction (core dumped)
</pre>
*[https://qiita.com/nPeeech/items/e976a7c227cd12b89d51 Keras/Tensorflowをimportしたら"Illegal instruction (コアダンプ)"と出た時の対処法]