放射線科Dr.のちいさなたまご

趣味でやっているお勉強の記録です。
今日もわくわく、明日は何をしようかな・・・

初CNN!畳み込みニューラルネットワークへ

2020-06-22 08:47:58 | 趣味のprogramming

さて

四日坊主を予定しているUdemyの機械学習のコースですが、

 

【4日で体験!】 TensorFlow, Keras, Python 3 で学ぶディープラーニング体験講座
TensorFlow 2 対応! 4日間でディープラーニングを体験してみよう!Windows, MacでOK!

 

なんと四日坊主予定が、五日坊主予定に変更になりました!

(※個人の変更で、正式にはまだ四日です)

 

二日目まで終えた前回記事から、1日経ち、見事三日目を制覇する予定でしたが、

二日目の終わりの方にオマケ的な立ち位置でついている「CNNを動かそう!」の企画が、

PCのスペック的に辛くて、辛くて、もう本当に辛くて・・・涙

涙ちょちょぎれすぎた結果、

そこで三日目を終了してしまいました。

 

二日目に行った、三層パーセプトロンモデルは、

「入力画像→入力層→中間層1→出力層→最終出力」と、三つの層からできています。

実は、入力層には、28x28の合計784pixelの値をなんと一列に直してインプット。

これが大問題の原因です!!

なぜなら二次元平面で少しだけズレた画像が、

一列に直されることで、全く異なる画像として入力層にインプットされてしまうからです。

 

この問題を見事解決したのが、

CNN(Convolutional Neural Network)こと、畳み込みニューラルネットワーク!

「真っ直ぐな線がある」や「真ん中に穴あり」などの

画像を視認する上で人間も利用している「特徴量」を抽出するフィルターをかけることで、

二次元平面画像から特徴量を取り出して使えるモデルなのです。

 

このCNNの凄さにより、

三層パーセプトロンモデルでは正解率が9割超えが限界だったFashionMNISTデータでも、

余裕で9割超を達成することができる!!・・・はずでした。

 

特徴量抽出のためのフィルター(keras.layers.Conv2Dの関数で指定)

1ヵ所目で3x3を32枚、2ヵ所目で5x5x32を64枚

くらい使ってやるべきだったのですが

 

計算を始めたところ、これが終わらない。

epoch数1にしても60000枚終えるのに5分くらいかかる。

xxxx/60000と徐々に増えていくのですが、

もう増え方が遅すぎて、1の位までよく見える始末。

もう辛いよ辛いよ・・・と声が聞こえそうな気がしたので、

辛くないように設定し直した結果・・・!

 

 

はい。なんと、フィルターが1ヵ所目4枚、2箇所目4枚!!

こんなフィルターで正解を出せるのかと思ったら、

これが案外accuracy80くらいまでは余裕で達成してました。

 

自分としては自分のPCでプログラムを無事に動かせて、

適宜調整もできたので大満足

(本来のaccuracyをあげる目的の調整とは違う意味ですが)

 

というわけで、

辛そうなPCを見ていたら、自分も猛烈に疲れを感じ、

CNNを3日目として、4日で体験!を、5日で体験!と変更、PCを閉じたのでした。

おしまい。


祝・4冊目の本が決定!

2020-06-22 08:30:26 | 趣味の物理

ついに昨日でブログを始めてから5日目、

ということで、本も4冊目を決定しました!ジャンっ

遠い昔のように思えますが、1冊目の本として決めた物理のエッセンス赤とで2冊組みです。

1冊目(赤)は、力学&波動

2冊目(青)は、熱&電磁気&原子

波動は正直なところ、ページ数も少なく、力学や電磁気と比べるとマイナーな感じ。

その波動が、結構終わりの方まで見えてきて、それと同時に飽きてきた!

それで夜遅くに電磁気に手を出してしまったという流れです。

 

実はこの前の年末〜年始にかけて、力学と電磁気学をかじりました。

すっかり高校の時の記憶が抜け落ちていて(力学でsinθとcosθの成分に分ける計算すら怪しい)

初めて学ぶかのように時間がかかりましたが、

今回は、サクサクっ問題が進んで、

前回かなり間違えながら進んでいたものが、

ほとんど正解しかしない! それは言い過ぎ・・・

 

電磁気学 p.32~123

  1. 電場と電位 p.32~ ←スタート!
  2. コンデンサー p.44~ ←ほぼ終了 6/21
  3. 直流回路 p.69~ ←本日予定 6/22 あとで追記します✅
  4. 電流と磁場 p.88~
  5. 電磁誘導 p.95~
  6. 交流 p.109~
  7. 電磁場中の荷電粒子の運動 p.118~

長い。。書いていて若干げんなりしてきてしまった。

電磁気学自体が90ページもあり、サクサク進んでいた気がしたものの、

まだまだ以前やった貯金をほぼ使い果たして全体の3分の1。

 

しかし、電気回路をサクサク書いてイメージしてく作業は楽しいので、

また飽きてきたら考えるとして、飽きる前に進めるところまで進めます!

 

明らかに、4の電流と磁場って、

プロトンがクルクル回転して、それで磁場ができるというMRIの基本となる現象の基礎よね。

そういう風に書いてくれてたら高校生の時ももっと興味持ったのに。

高校生の時の自分の物理学への認識って、

「少々難解で特殊なルールが設定されてるゲーム」で、

「特殊なルール」=発見されてきた自然界の掟、って分かってなかった。なんてこった。

 

✅ 追記予定

・・・


回転や移動を表す行列

2020-06-20 22:59:02 | 趣味の数学

いよいよ『線形代数と幾何』という本の題名らしく、

二次元における回転や平行移動を表す行列が出てきました。

 

なかには、合成関数を表す行列というのもありましたが、

原点Oを中心に角度α回転させる行列Aと

原点Oを中心に角度β回転させる行列Bを合成すると・・・!

角度α+β分だけ回転させる行列ABを作ることができる!

何がすごいかというと、

あの加法定理がこれでスイスイ求められる点です。

 

2X2の正方行列、前は見てもどんな変換を示すのかイメージがなく、さっぱり!

って感じだったのが、少しずつ慣れてきてイメージできるようになりました。

イメージがあるのとないのとでは全然違う!机上の空論から現実感アップ

 

この行列を使って空間図形を操り、画像を処理する機械学習プログラムに組み込んでいく・・・

そんな日が来るのか、来ると良いなと思って、明日もグイグイ線形代数進めるぞ!

今日はひとまず、ズー


Udemy講座でニューラルネットワーク体験

2020-06-20 18:27:23 | 趣味のprogramming

さて、昨日から始まりました

『四日坊主でディープラーニング体験』という期待を背負ったプログラム!

(正式名称は以下です。。笑)

【4日で体験!】 TensorFlow, Keras, Python 3 で学ぶディープラーニング体験講座
TensorFlow 2 対応! 4日間でディープラーニングを体験してみよう!Windows, MacでOK!

 

昨日は、Anaconda様を手持ちのPCに召喚し、環境構築なるものを行い、

Jupyter Notebookなるものを立ち上げるところまで行きました。

 

今日はいよいよ、Tensorflowの初心者向けのintroductionに乗っているコードを

自分のPCで動かしてみるという段階です!

0〜9までの手書き数字60000枚で学習させる "MNIST"でレクチャーを聞いて、

靴やTシャツなどの種類を学習させる"FASHION MNIST"を使って自分でもやってみました。

 

 

ニューラルネットワークは、人間の脳の構造を模倣していて、

ニューロン(パーセプトロンと呼ばれる)を単層ではなく複数の層にして

ネットワークを構成したものを、ニューラルネットワーク、

その中でも4層以上重ねたものを、ディープニューラルネットワークと呼んでいます。

 

まずは3層のニューラルネットワークを実装して、理解を深めよう!

というのが今日、第二日目/四日坊主の目的でした。

 

ついついコードを動かすことに必死になりすぎて、

木を見て森を見ず的な状況になりがちなので、

ニューラルネットワークによる学習フローの復習で締めたいと思います。

 

まずは、データ集め。

 →今回はkerasのdatasetの中に入っていたのでコマンドで指定すれば完了。

次に、データの正規化。

 →Inputとして使うデータの数値が0〜1の間になるように調整。

 →今回はPixelの値が0~255段階だったので、255で割った。

次に、モデルの定義。

 → 今回は三層のニューラルネットワークを使うため、keras.models.Sequentialで定義。

次に、最適化手法や損失関数の指定。

 → model.compileの関数の中で、optimizerやloss関数を指定していく。

 → optimizerはAdam, RMSprop、SGDなどの種類があって、良い結果になるものを選ぶ

次に、トレーニングを実行。

 → トレーニングデータを入れて、model.fit関数で。

 → epochsの数は、最初は5回くらいで計算早く、良さそうなら増やしてく。

最後に、精度評価。

 → model.evaluate関数で。

 

以前少しかじったときは、本当にちんぷんかんぷん!で雰囲気しかわかりませんでした。

が、Rを使う機会が多くあったおかげで、

プログラミングの基礎の感覚が少しずつ掴めてきた感覚があります

 

いよいよ、明日は、四日坊主中、三日目!・・・鬼門。

三日坊主では終わりたくない!


波動もついに干渉へ!

2020-06-20 14:35:04 | 趣味の物理

光は「粒子性」と「波動性」を持つ!

と聞いても、全くピンと来ず。

そもそも波動ってなんでしたっけ?という疑問を解決すべく、

数日前から取り組み始めた高校物理の参考書、物理のエッセンス。

 

順調に進んで、ようやく最終章の『干渉』に突入しました!

波動 p.96~p.149

項目は5つ

1。波の性質 p.96 ← 6/16

2。定常波 p.106

3。ドップラー効果 p.116 ← 6/17

4。反射と屈折 p.122  ← 6/19

5。干渉 p.132 ←今日ここ 6/20

 

反射と屈折で登場したのは、凸レンズと凹レンズ。

ん・・・なんだかイメージが湧かないなと思ったら急に、

あ!それ、虫眼鏡のことか!

と当たり前すぎることに気づいて、虫眼鏡で遊んだ日々を思い出した。

次に人生で虫眼鏡と仲良く遊ぶのは、小さな文字が見えなくなってきたらだろう。

つまり自分の世代は、一番虫眼鏡に縁がない世代なんだなと。

 

1/a + 1/b = 1/f (aは光源〜レンズ, bはレンズ〜像, fは焦点距離)

それぞれが正か負かによって、

  • 凸レンズor凹レンズ (f)
  • 実像or虚像 (b)
  • 光源がレンズの前or後 (a)

が変わるんだと。

公式覚えて解くのは良いとして作図してイメージ持つのは難しい。

 

波の干渉で登場する、絶対屈折率と距離の積で表される「光路長」

響き自体が懐かしい〜〜!!

同位相の波の干渉ならその差が波長の整数倍と等しくなると、強め合いが起こる。

ヤングの実験ではその強め合いが起こる位置に明線が、弱め合いには暗線が。

2つの波が真ん中で出会う時、タイミングが合うと一気に大きく盛り上がる

そんな様子が目に浮かんできて、あぁ〜ようやく「波」を思い出せたなと。

 

まだ、回折格子、薄膜による干渉、楔形薄膜による干渉、ニュートンリング。。。

と、先は続いているので、それはまた時間があったら進めて、報告します!