初心者のメモ  ＊＊＊TensorBoard を使っていく＊＊＊

#はじめに
本投稿は、[Get started with TensorBoard](https://www.tensorflow.org/tensorboard/get_started#using_tensorboard_with_keras_modelfit)　を元に翻訳と自分なりの解釈を含めて執筆しております。
そのため間違っている所や説明不足な箇所があると思います。

その際には、ご教授・ご指摘いただけると幸いです。

#僕のレベル
tensorflowをよくわかっていない。
python自体、機械学習を触らなくてはいけない状況になったがために触っている。
しかし、ディープラーニング については色々と本を読んで知った気にはなっている。

#開発環境
mac Catalina
python 3.6.10
anaconda
jupyter notebook
tensorflow 2.0.0(tensorboardも一緒に入ってきます！)


#tensorboardについて
参考リンクより
>In machine learning, to improve something you often need to be able to measure it. TensorBoard is a tool for providing the measurements and visualizations needed during the machine learning workflow. It enables tracking experiment metrics like loss and accuracy, visualizing the model graph, projecting embeddings to a lower dimensional space, and much more.
This quickstart will show how to quickly get started with TensorBoard. The remaining guides in this website provide more details on specific capabilities, many of which are not included here.

機械学習では、学習速度、目的関数の変化や精度などを改善するためには、しばしばそれらの測定が必要になります。
tensorboardは機械学習の開発の際に必要となる上記であげたパラメータの測定や可視化を提供するツールです。
また、作成したモデルグラフを視覚的に捉えるや埋め込みを低次元の空間に投影すること（？？）も可能になります。

ここではtensorboardのクイックスタートをお見せします。しかし、このサイトの別のガイドでより詳しく説明しています。

まずはじめにimport を行います

```python:import
import tensorflow as tf
import datetime 
```

今回はお馴染みのMNIST(Mニスト)を使ってモデルを作成して行きます。

```python:MNISTデータの変換とモデル作成
mnist = tf.keras.datasets.mnist #mnistデータセットを使うぞの宣言
(x_train, y_train),(x_test, y_test) = mnist.load_data() #mnistデータを取得。xにはデータ、yにはラベルを挿入
x_train, x_test = x_train / 255.0, x_test / 255.0 #学習しやすくするため（0~1の間になるように）に、255で割る

#Sequentialを使用したモデルを定義。
def create_model():
  return tf.keras.models.Sequential([
    tf.keras.layers.Flatten(input_shape=(28, 28)),
    tf.keras.layers.Dense(512, activation='relu'),
    tf.keras.layers.Dropout(0.2),
    tf.keras.layers.Dense(10, activation='softmax')
  ])
```

*ここで脱線してMNISTについて
MNISTデータセットは、機械学習のHello worldのようなものです
このデータセットは、「0」~「9」手書き数字の画像です。この画像は8bitグレースケール(白0~黒255の256段階の値)かつ幅(28ピクセル)と高さ(28ピクセル)となっています。（合計：28*28=784ピクセル）
また、MNISTデータセットは
-6万枚の訓練データ（画像とラベル）
-1万枚のテストデータ（画像トラベル）
計７万枚から構成されています。


>Using TensorBoard with Keras Model.fit()
When training with Keras's Model.fit(), adding the tf.keras.callbacks.TensorBoard callback ensures that logs are created and stored. Additionally, enable histogram computation every epoch with histogram_freq=1 (this is off by default)
>Place the logs in a timestamped subdirectory to allow easy selection of different training runs.

keras Model.fit()でtensorboardを使用する
Model.fit()の訓練時にtf.keras.callbacks.TensorBoardを追加すると、ログが作成され保存されるようになります。
加えて、histogram_freq=1にすることで全てのエポックのヒストグラム計算を有効にする。
ログのファイル名にタイムスタンプ（実行時の日時）を加えて適当なディレクトリに配置市することで、様々なトレーニングの実行を簡単に選択できるようにする。

```python:モデルの作成、実行
model = create_model() #モデル作成
model.compile(optimizer='adam',
              loss='sparse_categorical_crossentropy',
              metrics=['accuracy'])
log_dir = "logs/fit/" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
tensorboard_callback = tf.keras.callbacks.TensorBoard(log_dir=log_dir, histogram_freq=1)

model.fit(x=x_train, 
          y=y_train, 
          epochs=5, 
          validation_data=(x_test, y_test), 
          callbacks=[tensorboard_callback]) #<-ここでtensorboard_callbackを選択
```

学習が終わったら、terminalで
```tensorboard --logdir logs/fit```
tensorboardを実行。
僕の場合は表示されないなどトラブルがありました。そんなときには絶対パスを使用しましょう。

そうするとこのような画面になると思います。
<img width="295" alt="qiita投稿用.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/636360/f112a86a-b496-5341-31a8-6cd24768d31f.png">

これらのダッシュボードが意味することを簡潔に説明します。

Scalars:エポックごとの損失とメトリックがどのように変化したのかを示す.
また、トレーニング速度、学習率、そのほかのスカラー値の追跡に使える。

Graphs:作成したモデルの可視化を行う。グラフが正しく構築できているか確認できる。

Distributions, Histograms: 時間経過に伴うテンソルの分布が表示される。また、重みとバイアスの変化を可視化できているため、それらが期待通り変化しているか確認するときに役に立つ。

#まとめ
tensorboardを使用する時は
model作成時にcallbacksをいれる

tensorboardではモデルの可視化やデータの変化具合などがわかる。

#参考リンク
[Get started with TensorBoard](https://www.tensorflow.org/tensorboard/get_started#using_tensorboard_with_keras_modelfit)