ホーム » Edward » TensorFlow : Edward : Getting Started

TensorFlow : Edward : Getting Started

TensorFlow : Edward : Getting Started (翻訳/解説)

翻訳 : (株)クラスキャット セールスインフォメーション
更新日時 : 11/18/2018
作成日時 : 10/14/2018

* 本ページは、Edward サイトの Getting Started を翻訳した上で適宜、補足説明したものです:

* サンプルコードの動作確認はしておりますが、必要な場合には適宜、追加改変しています。
* ご自由にリンクを張って頂いてかまいませんが、sales-info@classcat.com までご一報いただけると嬉しいです。

 

貴方の最初の Edward プログラム

Edward の確率的モデリングはランダム変数の単純な言語です。ここではベイジアン・ニューラルネットワークを示します。それはその重み上に事前分布を持つニューラルネットワークです (この例は簡略しています; Jupyter notebook による対話的バージョンは こちら で利用可能です)。

最初に cosine 関係を持つ 50 観測の toy データセットをシミュレートします。

import numpy as np

x_train = np.linspace(-3, 3, num=50)
y_train = np.cos(x_train) + np.random.normal(0, 0.1, size=50)
x_train = x_train.astype(np.float32).reshape((50, 1))
y_train = y_train.astype(np.float32).reshape((50, 1))

次に、2-層ベイジアン・ニューラルネットワークを定義します。ここでは、tanh 非線形性を持つニューラルネットワークを手動で定義します。

import tensorflow as tf
from edward.models import Normal

W_0 = Normal(loc=tf.zeros([1, 2]), scale=tf.ones([1, 2]))
W_1 = Normal(loc=tf.zeros([2, 1]), scale=tf.ones([2, 1]))
b_0 = Normal(loc=tf.zeros(2), scale=tf.ones(2))
b_1 = Normal(loc=tf.zeros(1), scale=tf.ones(1))

x = x_train
y = Normal(loc=tf.matmul(tf.tanh(tf.matmul(x, W_0) + b_0), W_1) + b_1,
           scale=0.1)

次に、データからモデルについて推論を行ないます。変分推論を使用します。重みとバイアスに渡り正規近似を指定します。

qW_0 = Normal(loc=tf.get_variable("qW_0/loc", [1, 2]),
              scale=tf.nn.softplus(tf.get_variable("qW_0/scale", [1, 2])))
qW_1 = Normal(loc=tf.get_variable("qW_1/loc", [2, 1]),
              scale=tf.nn.softplus(tf.get_variable("qW_1/scale", [2, 1])))
qb_0 = Normal(loc=tf.get_variable("qb_0/loc", [2]),
              scale=tf.nn.softplus(tf.get_variable("qb_0/scale", [2])))
qb_1 = Normal(loc=tf.get_variable("qb_1/loc", [1]),
              scale=tf.nn.softplus(tf.get_variable("qb_1/scale", [1])))

tf.get_variable の定義は変分ファクターのパラメータが変化することを可能にします。それらは総て 0 に初期化されます。標準偏差パラメータは softplus 変換に従ってゼロより大きいものとして制約されます。

今、データが与えられてモデルの潜在変数を推論するために Kullback-Leibler ダイバージェンス で変分推論を実行します。
1000 反復を指定します。

import edward as ed

inference = ed.KLqp({W_0: qW_0, b_0: qb_0,
                     W_1: qW_1, b_1: qb_1}, data={y: y_train})
inference.run(n_iter=1000)

最後に、モデル fit を批評します (= criticize) 。ベイジアン・ニューラルネットワークはニューラルネットワークに渡る分布を定義しますので、グラフィカルなチェックを遂行できます。

推論されたモデルからニューラルネットワークを描いてそれがどの程度上手くデータにフィットするかを可視化します。

モデルは観測された領域の $x$ と $y$ 間のコサイン関係を捕捉しています。

 

以上






AI導入支援 #2 ウェビナー

スモールスタートを可能としたAI導入支援   Vol.2
[無料 WEB セミナー] [詳細]
「画像認識 AI PoC スターターパック」の紹介
既に AI 技術を実ビジネスで活用し、成果を上げている日本企業も多く存在しており、競争優位なビジネスを展開しております。
しかしながら AI を導入したくとも PoC (概念実証) だけでも高額な費用がかかり取組めていない企業も少なくないようです。A I導入時には欠かせない PoC を手軽にしかも短期間で認知度を確認可能とするサービの紹介と共に、AI 技術の特性と具体的な導入プロセスに加え運用時のポイントについても解説いたします。
日時:2021年10月13日(水)
会場:WEBセミナー
共催:クラスキャット、日本FLOW(株)
後援:働き方改革推進コンソーシアム
参加費: 無料 (事前登録制)
人工知能開発支援
◆ クラスキャットは 人工知能研究開発支援 サービスを提供しています :
  • テクニカルコンサルティングサービス
  • 実証実験 (プロトタイプ構築)
  • アプリケーションへの実装
  • 人工知能研修サービス
◆ お問合せ先 ◆
(株)クラスキャット
セールス・インフォメーション
E-Mail:sales-info@classcat.com