| ページ一覧 | ブログ | twitter |  書式 | 書式(表) |

MyMemoWiki

「機械学習」の版間の差分

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
343行目: 343行目:
 
*チェックポイントは、モデルで使用されるすべてのパラメータ(tf.Variableオブジェクト)の正確な値をキャプチャします
 
*チェックポイントは、モデルで使用されるすべてのパラメータ(tf.Variableオブジェクト)の正確な値をキャプチャします
 
*チェックポイントにはモデルで定義された計算のいかなる記述も含まれていないため、通常は、保存されたパラメータ値を使用するソースコードが利用可能な場合に限り有用
 
*チェックポイントにはモデルで定義された計算のいかなる記述も含まれていないため、通常は、保存されたパラメータ値を使用するソースコードが利用可能な場合に限り有用
=====SavedModel=====
+
=====[https://www.tensorflow.org/guide/saved_model SavedModel]=====
 
*パラメータ値(チェックポイント)に加え、モデルで定義された計算のシリアライズされた記述が含まれています。
 
*パラメータ値(チェックポイント)に加え、モデルで定義された計算のシリアライズされた記述が含まれています。
 
*モデルを作成したソースコードから独立
 
*モデルを作成したソースコードから独立

2021年5月29日 (土) 05:03時点における版

| Docker | Ubuntu |

機械学習

基礎


  • 未定義の値はパラメータ、説明はモデル
  • 典型的には、学習と推論の2段階でアルゴリズムを調べる
  • 学習段階での目的は、特徴モデルと呼ばれるデータを記述し、モデルに要約すること
  • 特徴ベクトルは、実際のデータを単純化したもの、学習・推論のステップはデータそのものではなく、特徴ベクトルに依存
  • 測定する値とどの測定値を比較すべきかの設計は、特徴量設計と呼ばれる
  • 調べる特徴の数が多すぎるとパフォーマンスが低下する可能性(次元の呪い)
  • 同一性は構成されている特徴に分解される

学習アプローチ


  1. 訓練データ
  2. 特徴ベクトル
  3. 学習アルゴリズム
  4. モデル

推論アプローチ


  1. テストデータ
  2. 特徴ベクトル
  3. モデル
  4. 予測

距離の測定


学習のタイプ


教師あり学習

  • モデルと呼ばれるラベル付きデータを必要とする
  • 訓練データセットと呼ばれる例の集まりを使用する
教師なし学習

  • 対応するラベルなしでデータをモデリングする
  • 十分なデータがあれば、パターンや構造を発見できる
  • クラスタリング次元削減が強力なツールとなる
強化学習

  • 環境が行動によりどう反応するかを観察することで収集される情報を訓練する
  • どのような行動の組み合わせが最も有利な結果をもたらすかを知るため

アルゴリズム

アルゴリズム 用途 備考
線形回帰 トレンドの予測
ロジスティクス回帰 データを2つのカテゴリに分類し、データセットを分割する最善の方法を見つける
多クラスタロジスティクス回帰 データを複数のカテゴリに分類する
隠れマルコフモデル(ビタビ) 最も可能性の高い隠れた理由を見出す
k平均法 固定数のカテゴリにクラスタリングし、自動的に分割
自己組織化マップ 任意のカテゴリにクラスタリングし、高次元データを2次元平面上へ非線形写像する
オートエンコーダ 入力されたデータを一度圧縮し、重要な特徴量だけを残した後、再度もとの次元に復元
Qポリシーニューラルネットワーク ニューラルネットワークを用いた環境での強化学習
パーセプトロン 教師ありニューラルネットワークを用いたデータの分類
畳み込みニューラルネットワーク 教師ありニューラルネットワークを用いた次世界画像の分類
リカレントニューラルネットワーク ニューラルネットワークを使用して観測に一致するパターンを生成
シーエンス変換(Seq2seq)モデル 自然言語の問い合わせに対する自然言語応答の予測
順位付け 効用の学習によって項目を順位付けするための学習

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にイメージが登録された

Ml docker desktop.png

  • Jupyter notebookを起動

Ml tensorflow.png

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オブジェクト)の正確な値をキャプチャします
  • チェックポイントにはモデルで定義された計算のいかなる記述も含まれていないため、通常は、保存されたパラメータ値を使用するソースコードが利用可能な場合に限り有用
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)