とらりもんHOME  Index  Search  Changes  Login

とらりもん - 機械学習入門 Diff

  • Added parts are displayed like this.
  • Deleted parts are displayed like this.

(2020年度生物資源学類2年次対象「実用解析I」(春A・B学期)のページです。)

[[概要|機械学習入門: 概要]]

!2020/04/27
目標: Linuxとpythonの使い方を思い出し, 今後の学習・作業環境を構築する。
# [[機械学習入門: 準備]]

!2020/05/09

目標: 機械学習のサンプルプログラムを走らせてみて, 機械学習ってどういうものか, ざっくりしたイメージをつかむ。

# [[ウォームアップ|機械学習入門: ウォームアップ]]
# [[機械学習初体験|機械学習入門: 機械学習初体験]]
# [[レポート課題|機械学習入門: レポート課題2]]

!2020/05/11

目標: 機械学習のサンプルプログラムを解読し, 自分なりに改変していじることができるようになる。うまく動かないときの対処法を習得する。

# [[サンプルプログラムの解読と改造|機械学習入門: サンプルプログラムの解読と改造]]
# [[レポート課題|機械学習入門: レポート課題3]]

!2020/05/18

目標: ニューラルネットワークの概念や仕組みを理解し, 用語に慣れる。

# [[ニューラルネットワークの体験|機械学習入門: ニューラルネットワークの体験]]
# [[レポート課題|機械学習入門: レポート課題4]]

!2020/05/25

# [[ニューラルネットワークの実装の準備|機械学習入門: ニューラルネットワークの実装の準備]]
# [[レポート課題|機械学習入門: レポート課題5]]

!2020/06/01

# ニューラルネットワークの学習(第4章)
# [[レポート課題|機械学習入門: レポート課題6]]

!2020/06/08

# ニューラルネットワークの学習(第5章)
# レポート課題
** Affineレイヤとは何か?
** common/layers.pyの中の, class Affineの中で, dout, self.dW, self.dbはそれぞれテキストP148あたりでは何に対応するか?
** テキストP148の5.13式は, common/layers.pyの中でどこにどのように実装されているか?
** 次のプリントの, 問1(1-1)から(1-18)を解け。
** (オプション; 出来る人はやってみよう! 成績には考慮しません)次のプリントの, 問2, 問3, 問4を解け。
** (オプション; 出来る人はやってみよう! 成績には考慮しません)common/layers.pyの中の, class Reluの中で, 誤差逆伝播はどう実装されているか?
{{attach_anchor(2020_0608_jitsuyo.pdf)}}

!2020/06/15

(グループで助けあって作業すること。)

レポート課題1: グループで話し合って, グループのニックネームを決めよ。

レポート課題2: 関数f(x)=x^2+x+1の最小値を勾配法によって, 表計算ソフトで求めよ。初期値はx=10, 学習率は0.01とせよ。

レポート課題3: 課題2を表計算ソフトでなくpythonプログラムを作って実施せよ。できるだけクラスを使い, common/layers.pyに似たスタイルでプログラムを作れ。

レポート課題4: 以下の7つのデータペア(x, t)について, y=ax+bというモデルでtを近似したい(yがtの推定値)。損失関数は誤差2乗和L=堯yi-ti)^2とし, 確率的勾配降下法(SGD)でa, bを求めるpythonプログラムを作れ。初期値はa=0, b=0とする。学習率は適当に定めよ(いろいろ試そう!)。できるだけクラスを使い, common/layers.pyに似たスタイルでプログラムを作れ。すなわち, 推定モデル(y=ax+b)のクラスと, 損失関数(L)のクラスを別々にそれぞれ実装せよ。微分係数を求める際は一気に求めるのでなく, 推定モデルのクラスで∂y/∂aと∂y/∂bを実装し, 損失関数のクラスで∂L/∂yとを実装し, それらを連鎖律(合成関数の微分)で結合する形で∂L/∂aと∂L/∂bを求めよ。ミニバッチは作らず, かわりにデータを1回ずつランダムにサンプリングし, データ1つにつき1回のSGDステップを行えばよい。
x      t
1 2
2 1
3 3
4 5
5 4
6 8
7 5

結果をグラフに表示せよ。グラフには最小二乗法で求めた回帰直線もいっしょに表示せよ。
{{attach_view(SGDtest.png)}}

注: 最小二乗法で理論的にすぐに求まることを, なぜわざわざ確率的勾配法でやるのか? 最小二情報で理論的・解析的に解が決まるのはシンプルな関数のみである。SGDは, 複雑な関数にも使える。だからニューラルネットワークで使われるのだ。

!2020/06/22

期末課題

以下の6種類の樹種の葉を分類する分類器を作ろう(行頭の数字は各樹種の識別ラベル):
# ヒノキ
# クスノキ
# ヤマボウシ
# ヤマモモ
# イチョウ
# イロハカエデ

(1) 「ゼロから学ぶDeep Learning」のコードを流用して, CNNではないニューラルネットで作れ。

(2) 「ゼロから学ぶDeep Learning」のコードを流用して, CNNで作れ。

(3) sklearn, kerasなどの機械学習ライブラリを用いて作れ。

これらの結果を相互に比較せよ。


注意:
* 入力画像は100ピクセル x 100ピクセルのjpeg形式のカラー画像。
* チーム内で協力してやること。グループ内で(1)〜(3)の実装を分担してもよい。
* 訓練データは, 普通の年は学生で集めるのだが, 今年は奈佐原が提供する。
* レポートには, 以下は必ず書くこと。
** グループの愛称, メンバー(相棒)の氏名
** 手法: 前処理の概要。(1)(2)(3)のソースコード(たくさんコメントつけること)。どう考えて作ったか。
** 結果: (1)(2)(3)の精度とその比較
** 考察: 結果からわかったこと。前処理やハイパーパラメータや構造などの影響・効果など。
** 感想

参考: [[機械学習入門: 自前データでニューラルネット]]