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

MyMemoWiki

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

提供: MyMemoWiki
ナビゲーションに移動 検索に移動
110行目: 110行目:
  
 
|}
 
|}
 
==[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 (コアダンプ)"と出た時の対処法]
 

2021年6月3日 (木) 14:45時点における版

| Docker | Ubuntu |

機械学習

基礎


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

学習アプローチ


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

推論アプローチ


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

距離の測定


学習のタイプ


教師あり学習

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

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

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

アルゴリズム

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