TensorFlowの実装演習
- 最も利用者の多いディープラーニングのフレームワーク。他のフレームワークとしてはKerasやpytorchなどがあげられる
- TensorFlowではテンソルというものを使っており、テンソルのセッションをrunする必要がある
- プレースホルダーというものを使い、後からテンソルに値を入れることができる。ミニバッチごとに違うデータを入れて学習するときなどに活用する
- 定数の宣言はconstantで行い、変数の宣言はVariableで行う
- 値の更新式はassignで生成し、生成した更新式を呼び出すことで指定した変数を更新することができる
線形回帰
- iter_numは学習の回数、plot_intervalは誤差を表示する間隔を指定している
- ランダムな数字xを生成し3x+2を正解の値とし、3x+2にノイズを足した値を学習データとする
- 誤差関数は平均二乗法、オプティマイザーは勾配降下法を使用
- ノイズを増やすとデータのばらつきが増える
- dの値を増やすとノイズの割合が減るのでデータのばらつきが減る
非線形回帰
- ランダムに生成したxで非線形な関数を作成
- 重みは標準偏差を0.01で設定している
- 誤差を増やすとデータのばらつきが増える
- dの値を変えても学習がうまくいっていることが確認できる
- 上記と同様の方法で𝑦=30𝑥2+0.5𝑥+0.2の式を回帰分析したところ、学習率を0.01にすると学習がうまくいった。式によって最適な学習率が変わると考えられる
mnist(一層)
- mnistの画素数は784あるので、xは784個で設定する
- 0~9の数字を分類するので、dは10個で設定する
- xは784、dは10なので、Wは784×10の行列
- 分類問題なので誤差関数はクロスエントロピーを使用
mnist(多層)
- 隠れ層を2つ追加してmnistの分類を行う
- 隠れ層の活性化関数はどちらもシグモイド関数を使用
- 隠れ層のサイズを少なくした場合、学習の精度が低くなることを確認した
- オプティマイザーをAdamから勾配降下法に変えると、学習が遅くうまくいかないことを確認できた。学習率をもう少し上げると学習がうまくいくと考えられる
mnist(CNN)
- 畳み込み層が2層、全結合層が2層のCNNで学習を行う
- tensorflowではconv2dで学習データ、重み、ストライドなどを指定することでCNNを実装することができる
- tf.truncated_normal([5, 5, 1, 32], stddev=0.1)は5×5のフィルターでチャネルが32であることを示している
- padding='SAME'は入力と出力のサイズが同じになるようなパディングを設定していることを示す
- もともとの学習精度が良いからか、ドロップアウト率を0にしても、あまり学習に変化しないことが確認できた。