らんだむな記憶

blogというものを体験してみようか!的なー

Celsius to Fahrenheit.ipynbとAdam最適化

Intro to TensorFlow for Deep Learning | Udacityをぼんやりと眺める。

勾配降下法の最適化アルゴリズムの備忘録 - Qiita
勾配降下法の凄いやつ、くらいに思っとこ。最近はアニメーションで見られて凄い。
ノートにドーナツ描いたりしてた時代は何だったんだろうという勢いで・・・。

まぁ、ともかく最小二乗法ベースの損失関数 $J(w) = \frac{1}{2}\sum (y^{(i)} - \hat{y}^{(i)})^2$ を作っておいて、すっごい勾配降下法で $w$ の最適値を求めますよってことだな。ゼロから作るDeep Learningのp.87〜のとことか[第2版]Python 機械学習プログラミングの10.3.1の内容とかCourseraのアレとかを念頭におかないとなんじゃコレ?という気持ちに・・・
epochsとは?と思ってしまうが、勾配降下法ではぐるぐるイテレーションを回すのだったから、収束するまである程度くるくる回しておけと・・・。

以下、写経: (なんとなくそっかーという気分がするものの、唐突に登場するkerasなど、どうにもハードルが・・・)

from __future__ import absolute_import, division, print_function, unicode_literals
import tensorflow as tf

import numpy as np

# ログをエラーだけに
import logging
logger = tf.get_logger()
logger.setLevel(logging.ERROR)

# トレーニングデータ作成
celsius_q    = np.array([-40, -10,  0,  8, 15, 22,  38],  dtype=float)
fahrenheit_a = np.array([-40,  14, 32, 46, 59, 72, 100],  dtype=float)

# モデル作成
## 層の構築
l0 = tf.keras.layers.Dense(units=1, input_shape=[1])

## 層のモデルへの組み込み
model = tf.keras.Sequential([l0])

## モデルのコンパイル
model.compile(loss='mean_squared_error',
              optimizer=tf.keras.optimizers.Adam(0.1))

# モデルの訓練
history = model.fit(celsius_q, fahrenheit_a, epochs=500, verbose=False)

# 訓練済みモデルを使った予測
model.predict([100.0])

# 層の重みパラメータの確認
print("These are the layer variables: {}".format(l0.get_weights()))

オマケで層の数を増やして複雑にしたモデルのサンプルがある。とっとは精度が上がるが、複雑にしたことで変換ロジックのシンプルな構造(特に直接的な係数)が隠れちゃいましたよと。
上記が一番簡単なTensorflowのサンプルだと信じたい・・・。placeholderとかVariableとかSessionとかから入ると何が何やら・・・。

・・・なんかそれっぽい結果は得られているが、ポチポチしているだけで全然見えてこない。
脳死で覚えるkeras入門 - Qiitaを読んでみる・・・。うーん。Courseraのアレのお手製感から、このライブラリ感までのギャップがひどい・・・。ヴィジュアル的に溝が埋まらない・・・。
組み立てたモデル?を視覚化できるともうちょっとわかりそうな気もするが・・・。
きっとTensorBoardってやつがそれかな・・・。
YouTubeから画像を持ってくると、以下のようなモデルの視覚化がしたいわけだ:
dense layer