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

MyMemoWiki

機械学習

提供: MyMemoWiki
2021年5月25日 (火) 14:50時点におけるPiroto (トーク | 投稿記録)による版 (→‎演算子)
ナビゲーションに移動 検索に移動

| 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)
演算子 内容 備考

Tips

The kernel appears to have died. It will restart automatically.


  • これだけだと原因は分からないのですが、 コンソールからPythonを起動し、同じコードをコピペして実行
>>> import tensorflow
Illegal instruction (core dumped)