深層学習後編2 TensorFlow 講義課題視聴レポート (現場で潰しが効くディープラーニング講座)

### TensorFlowの実装演習
- 最も利用者の多いディープラーニングのフレームワーク。他のフレームワークとしてはKerasやpytorchなどがあげられる
- TensorFlowではテンソルというものを使っており、テンソルのセッションをrunする必要がある

![無題.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/a8e7f67a-cd72-8965-ec52-3f4d377fdff5.png)

- プレースホルダーというものを使い、後からテンソルに値を入れることができる。ミニバッチごとに違うデータを入れて学習するときなどに活用する

![無題1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/003898a1-47d2-c206-4120-28d2508346ed.png)

- 定数の宣言はconstantで行い、変数の宣言はVariableで行う
- 値の更新式はassignで生成し、生成した更新式を呼び出すことで指定した変数を更新することができる

![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/8af411c5-323c-1aa4-b76b-e4fab3bc1b33.png)

##### 線形回帰
- iter_numは学習の回数、plot_intervalは誤差を表示する間隔を指定している
- ランダムな数字xを生成し3x+2を正解の値とし、3x+2にノイズを足した値を学習データとする
- 誤差関数は平均二乗法、オプティマイザーは勾配降下法を使用

![無題2.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/b59c1e21-ba75-0068-1cba-cfbd89421a5d.png)
![無題3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/fe8471b9-9e82-e910-4b9f-661fa33fe3df.png)
![無題4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/31b58d80-7f5f-5471-9f95-1eef85107975.png)
![無題5.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/9b1a83b5-6c1e-c95f-9b10-91adf6b94844.png)

- ノイズを増やすとデータのばらつきが増える

![無題6.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/f4b6b45d-b198-325e-4f91-ca9ab1fc6d31.png)

- dの値を増やすとノイズの割合が減るのでデータのばらつきが減る

![無題7.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/8a548db7-2148-c63a-cb88-7cb553448c38.png)

##### 非線形回帰
- ランダムに生成したxで非線形な関数を作成
- 重みは標準偏差を0.01で設定している

![無題8.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/942893fc-96bc-19d2-ff11-9f38934b595e.png)
![無題9.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/6f820a50-a68d-4f48-b28a-d91bf57c9368.png)
![無題10.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/b3124974-8b58-c967-bf9a-8abdc28da1ea.png)

- 誤差を増やすとデータのばらつきが増える

![無題11.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/5849ccfa-6a34-c3a4-1f06-6269d35ffdbd.png)

- dの値を変えても学習がうまくいっていることが確認できる

![無題12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/f54baef7-83bc-bad2-84e0-42b9b53e0519.png)

- 上記と同様の方法で𝑦=30𝑥2+0.5𝑥+0.2の式を回帰分析したところ、学習率を0.01にすると学習がうまくいった。式によって最適な学習率が変わると考えられる

![無題13.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/43c3a7ad-c996-64f7-5a03-6f174fd86258.png)
![無題14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/76498a1d-b506-1908-171f-29881b56d2c1.png)
![無題15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/298aa669-7b3e-1e6d-89b7-dc2fbe8e8b4d.png)

##### mnist(一層)
- mnistの画素数は784あるので、xは784個で設定する
- 0～9の数字を分類するので、dは10個で設定する
- xは784、dは10なので、Wは784×10の行列
- 分類問題なので誤差関数はクロスエントロピーを使用

![無題16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/0a73307f-db6a-55ab-ce03-c7ecf1e65a57.png)
![無題17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/dc605155-edcd-bed7-27c9-065d8712d934.png)


##### mnist(多層)
- 隠れ層を2つ追加してmnistの分類を行う
- 隠れ層の活性化関数はどちらもシグモイド関数を使用

![無題18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/61781d13-8798-5b47-16ac-2e22f789136c.png)
![無題19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/2caec026-913a-4679-cf2d-4e6f3c8bb8cb.png)
![無題20.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/662da495-1aed-9b9a-6687-700f023db7ee.png)

- 隠れ層のサイズを少なくした場合、学習の精度が低くなることを確認した

![無題21.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/2c188b68-faa0-533b-8de5-3fcc9386a628.png)

- オプティマイザーをAdamから勾配降下法に変えると、学習が遅くうまくいかないことを確認できた。学習率をもう少し上げると学習がうまくいくと考えられる

![無題22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/ec606ebe-1b36-6d9f-a96c-09ab2f115cc3.png)

##### mnist(CNN)
- 畳み込み層が2層、全結合層が2層のCNNで学習を行う
- tensorflowではconv2dで学習データ、重み、ストライドなどを指定することでCNNを実装することができる
- tf.truncated_normal([5, 5, 1, 32], stddev=0.1)は5×5のフィルターでチャネルが32であることを示している
- padding='SAME'は入力と出力のサイズが同じになるようなパディングを設定していることを示す

![無題23.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/bc9b7dac-c3d0-b7cb-8deb-ad2f7c57c167.png)
![無題24.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/fb62bc8c-22ff-9842-6449-d23fb778cf10.png)
![無題25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/48b31b09-4848-b124-c0d8-5e4b25116d86.png)

- もともとの学習精度が良いからか、ドロップアウト率を0にしても、あまり学習に変化しないことが確認できた。

![無題26.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/440745/650faa55-7db6-1d3a-5435-7eef29089abc.png)

[次へ(keras、強化学習)](https://qiita.com/yuma-k105/items/70c19be775345b88d496)