はじめに
- 情報系の学部に所属する学生です。
- 人工知能プログラミングの授業で与えられたコードがよくわからなかったのですが、ライブラリを全部調べたら意外と分かったのでそのメモを残します。
- 正確さに欠ける点もあると思いますが、ご了承ください。
Tensorflowについて
こちらのサイトを参考にしました。
- Googleが開発した機械学習用ライブラリ
- ニューラルネットワークの構築、訓練のシステムを作成するのに優れている。
- データの読み込み、前処理、計算、上体、出力処理にテンソル(多次元配列のようなもの?)を用いる。
- 分散学習ができるためどんな環境でも扱える。
- 問題点
- 分散学習の実行によって障害が起こる可能性がある。(Fault Toleranceで障害を防いでいる。)
- ハードウェアの性能もある程度必要。
Tensorflowってテンサーフローかと思ってました(笑)正しくはテンソルフローですね。
Kerasについて
こちらのサイトを参考にしました。
- Pythonで書かれたTensorflowまたはCNTK、Theano上で実行可能な高水準のニューラルネットワークライブラリ
- 容易に素早くプロトタイプの作成が可能。
- CNNとRNNの両方をサポートしている。
環境
Google Colaboratory
ライブラリのインポート
import
from tensorflow import keras
from tensorflow.keras import initializers as Init
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Activation, Dense, Dropout, Flatten
from tensorflow.keras.layers import BatchNormalization
from tensorflow.keras.regularizers import l1, l2, l1_l2
from tensorflow.keras.datasets import mnist
from tensorflow.keras.utils import to_categorical
from tensorflow.keras.optimizers import SGD, Adam
import numpy as np
とりあえずkerasのインポート、kerasの各機能をインポート
- initializers
どうやら重み変数などを初期化するためのkerasライブラリ - Sequential
Sequentialモデルのひな形のようなもの。.add
メソッドでレイヤーの追加、compile
で学習処理の設定、fit
メソッドでモデルの訓練が行える。 - Activation
層を生成するライブラリ。使用すると出力に活性化関数を適用できる。 - Dense
層を生成するライブラリ。使用すると全結合層を生成する。 - Dropout
入力にドロップアウトを適用できる。ドロップアウトとは訓練時にランダムにユニットを欠落させること。過学習の防止に役立つ。 - Flatten
入力を平坦化(配列の次元を全部同じに)する。 - BatchNormalization
各バッチごとに前の層の出力を正規化(使いやすいいい感じの形にすること?)する。 - l1,l2,l1_l2
正則化に用いる。 - mnist
手書き数字のデータセット。 - to_categorical
整数のベクトルを2値クラスの行列へ返還する。Keras Documentationの例がわかりやすい。
# Consider an array of 5 labels out of a set of 3 classes {0, 1, 2}:
> labels
array([0, 2, 1, 2, 0])
# `to_categorical` converts this into a matrix with as many
# columns as there are classes. The number of rows
# stays the same.
> to_categorical(labels)
array([[ 1., 0., 0.],
[ 0., 0., 1.],
[ 0., 1., 0.],
[ 0., 0., 1.],
[ 1., 0., 0.]], dtype=float32)
教師信号をone-hotラベルに変換するのに便利!
- SGD
確率的勾配降下法を実装する。 - Adam
最適化アルゴリズムの一つ。今回は使われていない。