Udemy受講:「 みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】」(3)

  • こんばんは!小村だよ!

  • Udemy「 みんなのAI講座 ゼロからPythonで学ぶ人工知能機械学習 【2021年最新版】」の受講記録になります。

  • 今日でこの講座は最後!残り少ないので記事も短め!

  • よろしくね!



Udemy受講講義

f:id:kom314_prog:20210724120432p:plain
  • みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】

  • 講義資料:

GitHub - yukinaga/minnano_ai: YouTubeのライブ講義「【Live!人工知能 】みんなのAI講座」、およびUdemyコース「みんなのAI講座」で使用する教材です。



講義概要

  • 講義時間:約8時間(倍速再生や講習にかかる時間で前後)

  • Pythonを使った機械学習の基礎を学ぶ

  • GoogleColaboratoryを使用するため、環境構築不要

  • 機械学習の全体的な概要のみで、DeepLarningは扱わない



講義メモ

セクション7: さらに学ぶために

ライブラリ

  • scikit-learn(サーキットラン):簡単に

  • Tensorflow:テンソル計算用

  • Keras(ケラス):学習コストが低く高機能

  • PyTorch(パイトーチ):Kerasに似ている、近年トレンドとして伸びている

  • どれが流行りか


機械学習で有用な数学

  • 行列積 -「積の総和」を簡潔に記述し、簡潔に実装できる

  • 転置

    • 行列の行と列を入れ替える
  • Udemy:AIのための数学講座:少しずつ丁寧に学ぶ人口知能向けの線形代数/確率・統計/微分


発展技術


CPU VS GPU



おわりに

  • 今回は講座の終わりということで、次にどうステップアップするかの知識がメインでした

  • 私がやりたいのは株価予測や競馬予測なので、強化学習に興味あります。

  • Udemyでは「AIパーフェクトマスター講座 - Google Colaboratoryで隅々まで学ぶ実用的な人工知能機械学習」が続きによさそう

  • 今回は短いですがこの辺で

  • ではでは、ちゃお~~~!



小村の開発環境構築(19) Django Rest FrameworkのHerokuの設定続き

  • こんばんは!小村だよ!

  • 今回は前回デプロイしたherokuを見直していくよ!

  • よろしくね!



やること

  1. herokuへのmigrate実行
  2. createsuperuserして管理ページにログイン
  3. API動作確認
  4. herokuよりDBを確認
  5. herokuの静的ファイルの設定(保留)



前提条件

  • Ubuntuにリモート接続していること(これまでの環境構築参照)



手順

herokuへのmigrate実行

  • 前回デプロイだけしてデータベースを作成していなかった!

  • 下記を実行してデータベースを作成します!

  • 無事完了!

heroku run python manage.py migrate
f:id:kom314_prog:20210802230118p:plain



createsuperuserして管理ページにログイン

  • 下記を実行して管理者アカウントを作成します。
heroku run python manage.py createsuperuser
f:id:kom314_prog:20210802230423p:plain


  • IDとパスワードを設定します

  • その後管理ページにログイン

f:id:kom314_prog:20210802230851p:plain


  • 無事入れました!



API動作確認

f:id:kom314_prog:20210802231305p:plain
f:id:kom314_prog:20210802231350p:plain
  • 管理ページからデータを何件か作成してから、APIの動作を確認します

  • ばっちりAPIでデータ取得できていることがかくにんできたぞおおお!!



herokuよりDBを確認

  • 今後の保守の方法もばっちり学んでいきましょう

  • herokuのpostgresの内容を確認します

  • 参考:Heroku Dataclipsでお手軽公開クエリ

  • メニューボタンよりDataClopsを選択

  • Create Dataclipsを選択

  • 適当にクエリ文を入力してSave & Run

  • こりゃ簡単だ!すばらしき!

f:id:kom314_prog:20210802231707p:plain
f:id:kom314_prog:20210802231813p:plain
f:id:kom314_prog:20210802232036p:plain



herokuの静的ファイルの設定(保留)

  • 参考: Django + Heroku + WhiteNoise + AWS S3 によるWebアプリのデプロイ

  • WhiteNoiseをインストールする必要があるみたい

  • うーん……管理ページが崩れてるのきになるんだよなー

  • でもAPIでこのページを公開することないし、いいかなぁ

  • いったんそういうものがあるというメモだけしてやめておくぜ!!



おわりに

  • APIが使えるようになったーーー!!!!

  • これで本格的にはてぶのブログ記事をポートフォリオサイトに展開できる!

  • ここからが本番だぜ!がんばるぞ~~~!

  • ではでは、ちゃお!



小村の開発環境構築(18) Django Rest FrameworkのHerokuへのデプロイ

  • こんばんは!小村だよ!

  • 今回は前回作成した簡易APIをherokuにデプロイするよ!

  • よろしくね!



やること

  1. 環境変数を用意
  2. Herokuへのデプロイに必要なものを用意
  3. ローカル環境と本番環境で異なる動作をするsettings.pyを用意
  4. herokuへデプロイ



前提条件

  • Ubuntuにリモート接続していること(これまでの環境構築参照)



手順

はじめに

  • 私のDjangoRestFrameworkでは下記DB構成を予定してます

    • local(開発):sqlite3

    • heroku(本番):postgres

  • これを実現するために、最初に本番とローカルで動作を変える必要があります

  • 一般的にこのような環境による変化は、環境変数で識別することが多いです



環境変数を用意

  • というわけで早速環境変数を用意するよ!

  • 環境変数名はAPP_ENVにします

    • 何がいいのか探したけどいまいち出てこなかった
  • envを実行してAPP_ENVが定義されていないことを確認

  • 下記を実行

export APP_ENV="local"
  • その後printenv APP_ENVを実行し、localが表示されることを確認

    • venvに入っているなら、venv内で設定しないといけない(ちょいはまりした)
f:id:kom314_prog:20210731145625p:plain



SECRET_KEYを環境変数

  • ついでにsettings.pyのSECRET_KEYも環境変数を使用するように変更しました!

  • これでソースを公開しても後悔しないぜ!

SECRET_KEY = os.environ.get('SECRET_KEY')



Herokuへのデプロイに必要なものを用意

  • ふむふむふむふむ!!!!

  • 色々参考にした!

  • そして色々インストール時にエラー吐いた!

  • 何が悪いんや!!!

  • DjangoアプリをHerokuへデプロイするのには下記が必要みたい

    • gunicorn
    • django-heroku
    • dj_database_url
pip install gunicorn
pip install django-heroku
pip install dj_database_url
  • どうやらpsycopg2(postgressを使用するライブラリ)のインストールで失敗

  • 下記を実行してから再度実行でインストールできました!

    • エラーのストレスと作業時間の都合でまとめきれてないのでいつかまたまとめる
sudo apt install libpq-dev
pip install wheel



Herokuへのデプロイ成功したけどアプリケーションエラー

  • なんやかんやしてデプロイは完了した!!!!!!!!

  • 今まとめる気おきないけど、後々のためにやったこと書くと

  • そんな感じでgit push heroku mainを実行!

  • 無事デプロイできたぜ!アプリケーションエラーおきてるけどな!!!

f:id:kom314_prog:20210801163018p:plain



エラー原因調査

f:id:kom314_prog:20210802221236p:plain
f:id:kom314_prog:20210802221305p:plain



別のエラー

f:id:kom314_prog:20210802221400p:plain
f:id:kom314_prog:20210802221733p:plain



おわりに

  • 静的ファイルに問題ありで崩れちゃってるけど、いったんこれでデプロイOKで

  • あまあま設定でいきます!疲れたんだもん!

  • ではでは、ちゃお!



Udemy受講:「 みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】」(2)

  • こんばんは!小村だよ!

  • 前回に引き続き、Udemy受講記録になります。

  • よろしくね!



Udemy受講講義

f:id:kom314_prog:20210724120432p:plain
  • みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】

  • 講義資料:

GitHub - yukinaga/minnano_ai: YouTubeのライブ講義「【Live!人工知能 】みんなのAI講座」、およびUdemyコース「みんなのAI講座」で使用する教材です。



講義概要

  • 講義時間:約8時間(倍速再生や講習にかかる時間で前後)

  • Pythonを使った機械学習の基礎を学ぶ

  • GoogleColaboratoryを使用するため、環境構築不要

  • 機械学習の全体的な概要のみで、DeepLarningは扱わない



講義メモ

セクション5: 機械学習

学習の仕組み

  • 順伝播と逆伝播がある

    • 順伝播は分類分けに使う

    • 逆伝播は学習に使う

  • バックプロパゲーション(逆伝播)を使う

    • 出力結果と正解の誤差から、各ニューロンのバイアスを補正する


パラメータの更新(出力層)

  • 修正量のベース(δo = (出力 - 正解)* 活性化関数の微分形))

  • 重みの修正量 = - 学習係数 * δo * 入力

  • バイアスの修正量 = - 学習係数 * δo


パラメータの更新(中間層)

  • 修正量のベース(δm = δo * 出力にかける重み * 活性化関数の微分形)

  • 重みの修正量 = - 学習係数 * δm * 入力

  • バイアスの修正量 = - 学習係数 * δm


質疑応答

  • 十分な学習のデータ量は?

    • 大変なものでは難しい
  • ニューロンの数は?

    • 最初は小さく、後から大きく
  • 活性化関数は微分可能な関数のみ?

    • その通り



セクション6: 機械学習ライブラリの活用

scikit-learnとは?


サポートベクトルマシンとは?

  • 境界により分類分けを行う

  • 特徴が2なら線だが、3以上は面になる(チョウヘイメン)


サポートベクトルマシンでの機械学習

  • 下記を実施

    • 花びらの分類

    • 手書き数字の分類

    • 株価の単純な上下の予想

  • 実用レベルではなさそうだが、ある程度予想ができていていい感じであった

  • 5章でこんなの私にはむりーとなった心を癒してくれたぜ!


質疑応答

  • 機械学習の値に、実際の値ではなく変化率を使う理由は?

    • 株価などは、時期によって平均の値段が変わるため、参考になりづらくなる
  • サポートベクトルマシンで、どの程度の割合で明日株価が上がる、などは出せる?



おわりに

  • 「 みんなのAI講座 ゼロからPythonで学ぶ人工知能機械学習 【2021年最新版】」のセクション5, 6を受講しました!

  • むずそーーーと思ったのが、Pythonのライブラリ使うことでできるかもーになってきました!

  • 馬券の予測をだしたいのですが、その場合ニューラルネットワークをより学ばなきゃですね

  • 今回はサポートベクトルマシンのみの学習だったので、次から学びたいです!

  • 残すところこのUdemyの講座もあと1セクション!最後までやりたいと思います!

  • ではでは、ちゃお~~~!

Udemy受講:「 みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】」(1)

  • こんばんは!小村だよ!

  • 所属している会社で今月頭よりUdemyを契約してくださりました!!!

  • 活用するっきゃねぇ!!!!!

  • ということで、Udemy受講記録になります。

  • よろしくね!



Udemy受講講義

f:id:kom314_prog:20210724120432p:plain
  • みんなのAI講座 ゼロからPythonで学ぶ人工知能と機械学習 【2021年最新版】

  • 講義資料:

GitHub - yukinaga/minnano_ai: YouTubeのライブ講義「【Live!人工知能 】みんなのAI講座」、およびUdemyコース「みんなのAI講座」で使用する教材です。



講義概要

  • 講義時間:約8時間(倍速再生や講習にかかる時間で前後)

  • Pythonを使った機械学習の基礎を学ぶ

  • GoogleColaboratoryを使用するため、環境構築不要

  • 機械学習の全体的な概要のみで、DeepLarningは扱わない



講義メモ

セクション1: 人工知能の概要と開発環境

f:id:kom314_prog:20210724120610p:plain
  • GoogleColaboratoryがどちゃくそ便利!

  • Jupiterのクラウド版の認識でOK

  • 将来的に競馬予想作ろうとおもってるんだけど、全部これでできそう

  • Google信者が加速するぜ!!!



セクション2: Pythonの基礎

  • そこそこ飛ばしました

  • 唯一、__call__についてだけ初見でした。便利そう。使っていきたい



セクション3: 必要な数学の学習

ネイピア数

  • 機械学習でよくつかうということだけど今はピンとこない

  • e = 2.7182...

  • 微積分した時のグラフが同じ図になるらしい?

  • ネイピア数の求め方は、以下の式でnを無限に大きくすることで求まる

  • (1 + (1 / n) ** n)



シグモイド関数

$$y = \frac{1}{1+e^{-x}}$$

y = 1 / 1 - e^-x

  • ある値を1~-1の間の値にする性質がある



セクション4: ニューラルネットワーク

  • 人の神経細胞を模したネットワーク

  • (人口)ニューラルネットワークの構成要素

  • 1つのニューロンには入力が複数あり、重みを与え、バイアスを加え、活性化関数を通し出力する

    • いみわからん!
  • ニューラルネットワークは、値に応じて分類分けするための仕組み???

    • 出力層の活性化関数によって得られる結果が変わる

      • シグモイト関数を使うときは2つの分類にわけたいとき
  • なんとなくわかったようで理解度20%くらいと思う。



おわりに

  • きょうはここまで!

  • めっちゃつかれたーーー!!!

  • 知らない式を理解しようとするとめちゃくちゃ脳疲弊する!!!!

  • ニューラルネットワークが全然理解できた気がしない!!!

  • なので次回ニューラルネットワークから復習していきます!

  • ではでは、ちゃお~~~!

小村の開発環境構築(17) Django Rest Frameworkの初期プロジェクト作成

  • こんばんは!小村だよ!

  • 今日はDRFを爆速作成する予定だよ!

  • よろしくね!



やること

  1. pipライブラリ確認
  2. Djangoのスタートアップ実行
  3. .gitignoreの作成
  4. DRFの爆速API作成
  5. 簡易API完成



前提条件

  • Ubuntuにリモート接続していること(これまでの環境構築参照)



参考サイト



手順

pipライブラリ確認

  • 早速参考サイトの通りスタートアップを作成していくよ

  • まずは必要なものがpipされていることを確認

f:id:kom314_prog:20210723120221p:plain


autopep8            1.5.7  
Django              3.2.5  
django-filter       2.4.0  
djangorestframework 3.12.4 
flake8              3.9.2  
  • この5つが入っていることが確認できたね

  • これらは今後も必須なので、requirements.txtを作ってメモしておくよ!

f:id:kom314_prog:20210723120700p:plain



Djangoのスタートアップ実行

f:id:kom314_prog:20210723123052p:plain
f:id:kom314_prog:20210723123149p:plain


  • django-admin startproject apiを実行

  • 作られるフォルダが、api\api\~と深いので、apiを1つ減らしておきます

  • そしたら次にpython manage.py startapp srcを実行

f:id:kom314_prog:20210723123442p:plain
f:id:kom314_prog:20210723123556p:plain


  • apiフォルダとsrcフォルダが同じ階層に作られますが、api\src\~に変えます

  • この状態でひとまず動くか確認しましょう

  • python manage.py runserverを実行。問題なし!

f:id:kom314_prog:20210723124432p:plain
f:id:kom314_prog:20210723124521p:plain



.gitignoreの作成

  • 変更履歴がvenvのせいで確認できないので、venvを対象外にします

  • .gitignoreを作成してvenvを記述

  • 変更履歴がすっきりしたのでそのままコミットしておきましょう

f:id:kom314_prog:20210723125116p:plain



DRFの爆速API作成

  • ではでは、参考サイトをコピペしまくりでやっていきます

    • 何回も会社でやったのでコピペですが、初回はちゃんと書いたほうがいいです


変更したところのメモ

  • フォルダ構成を変えているのでsettings.pyapps.pyの初期値を変更する
f:id:kom314_prog:20210723150201p:plain
f:id:kom314_prog:20210723150239p:plain


  • pycacheがうざいので下記環境変数を追加して発生しないようにする
export PYTHONDONTWRITEBYTECODE=1


  • urlsは1つにまとめる
# coding: utf-8

from rest_framework import routers
from api.src.views import UserViewSet, EntryViewSet
from django.conf.urls import url, include
from django.contrib import admin

router = routers.SimpleRouter()
router.register(r'users', UserViewSet)
router.register(r'entries', EntryViewSet)

urlpatterns = [
    url(r'^admin/', admin.site.urls),
    url(r'^api/', include(router.urls)),
]
f:id:kom314_prog:20210723155412p:plain



簡易API完成

f:id:kom314_prog:20210723155729p:plain
  • http://127.0.0.1:8000/api/entries/にアクセスするとjson形式で返します

  • 参考サイトではこの後もいろいろやってますが、今回は割愛

  • ひとまず最低限のAPIが作れるようになりました!



おわりに

  • 仕事場でPython覚えるときに一番最初に実施した手順でした

  • このサイトを元に何回も人に教えてるので、特に問題なく完了ですね

  • 後は初期設定の修正と、DB変更とherokuデプロイ!

  • そしたらweb開発の続きができる予定!

  • がんばるぞー!

  • ではでは、ちゃお~~~!



小村の開発環境構築(16) Pythonのリンターフォーマッター設定

  • こんばんは!小村だよ!

  • 今日は前回やったpython系のインストールの続きをやっていくよ!

  • よろしくね!



やること

  1. python拡張機能をインストール
  2. autopep8 flake8のインストール
  3. autopep8 flake8の設定(失敗)
  4. autopep8 flake8の再設定



前提条件

  • Ubuntuにリモート接続していること(これまでの環境構築参照)



手順

python拡張機能をインストール

  • 前回やっておくべきだったけど失念してたよ!

  • VSCode拡張機能pythonをインストールします!

  • これしとかないとVSCode上でpython独自の設定とかができないよ!

f:id:kom314_prog:20210720235237p:plain



autopep8 flake8のインストール

  • 次はフォーマッタとリンター!

  • 開発するうえでフォーマッターとリンターは最初に着手したいよねー

  • というわけでautopep8 flake8をインストールするよ!

  • 参考:python PEP8 VSCodeでautopep8とflake8を適用する

pip install autopep8
pip install flake8
f:id:kom314_prog:20210720234600p:plain



autopep8 flake8の設定(失敗)


  • pylintの無効化
f:id:kom314_prog:20210721000628p:plain


  • pythonのlintingの有効化
f:id:kom314_prog:20210721001452p:plain


  • flake8の有効化
f:id:kom314_prog:20210721001558p:plain


  • ファイル保存時のlinting
f:id:kom314_prog:20210721001723p:plain


  • フォーマットのstyleをautopep8に設定
f:id:kom314_prog:20210721001849p:plain


  • 保存時の自動生計を有効化
f:id:kom314_prog:20210721002001p:plain


  • 1行文字数制限を外す
f:id:kom314_prog:20210721002934p:plain


  • 最終的に追加されたのは下図でした。半分くらいはデフォルトで設定されてたね
f:id:kom314_prog:20210721002910p:plain


import math, sys;

def example1():
    ####This is a long comment. This should be wrapped to fit within 72 characters.
    some_tuple=(   1,2, 3,'a'  );
    some_variable={'long':'Long code lines should be wrapped within 79 characters.',
    'other':[math.pi, 100,200,300,9876543210,'This is a long string that goes on'],
    'more':{'inner':'This whole logical line should be wrapped.',some_tuple:[1,
    20,300,40000,500000000,60000000000000000]}}
    return (some_tuple, some_variable)
def example2(): return {'has_key() is deprecated':True}.has_key({'f':2}.has_key(''));
class Example3(   object ):
    def __init__    ( self, bar ):
     #Comments should have a space after the hash.
     if bar : bar+=1;  bar=bar* bar   ; return bar
     else:
                    some_string = """
                       Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""
                    return (sys.path, some_string)
f:id:kom314_prog:20210721002541p:plain
f:id:kom314_prog:20210723104421p:plain


  • いや、autopep8後にflake8のlintが反応するんだが????

  • えっ、それを解消してくれる参考サイトではなかったの……?

  • 文字数制限はまぁいいとして、改行数が許せぬ……c

autopep8とflake8の再設定

  • 文句言ってても仕方ないので修正しまーす!

  • 色々回って最終的に下記設定に落ち着きました

  • 設定先もリモートタブじゃなくてワークスペースタブに変更

  • 上の設定まじで意味ないな……不要と追記しておこう。

{
    "[python]": {
      "editor.tabSize": 4,
      "editor.formatOnSave": true,
      "editor.formatOnPaste": false,
      "editor.formatOnType": false,
    },
    "python.linting.enabled": true,
    "python.linting.lintOnSave": true,
    "python.linting.pylintEnabled": false,
    "python.linting.flake8Enabled": true,
    "python.linting.flake8Args": [
        "--max-line-length=120",
    ],
    "python.formatting.provider": "autopep8",
    "python.formatting.autopep8Args": [
        "--aggressive",
        "--aggressive",
    ],
    "files.autoSave": "afterDelay",
    "files.autoSaveDelay": 10000,
}
f:id:kom314_prog:20210723114002p:plain
f:id:kom314_prog:20210723114040p:plain



  • 倍近くの行に成形されるね!

  • 上の設定と大きく変わってるのは、--aggressive2つ付けてるところかな

  • 整形後のコードを見ると、下記とかひどいので、こういうのは都度調整だね

            some_string = """
                       Indentation in multiline strings should not be touched.
Only actual code should be reindented.
"""



おわりに

  • 今日はこの辺でおわりますー!

  • すんなり言ってたらアプリ作成までやりたかったんだけどねー次に回す!

  • ではでは、ちゃお~~~!