ラベル Study の投稿を表示しています。 すべての投稿を表示
ラベル Study の投稿を表示しています。 すべての投稿を表示


【LIST】記憶力を高める方法

Photo by Unseen Studio on Unsplash

記憶力を低下させる原因

  1. 無関心
  2. 意欲の低下
  3. 理解不足
  4. 復習不足
  5. アウトプット不足

記憶力を高める方法

  1. 関心をもつ
  2. 意味を理解する
  3. 覚えたいことを精選する(すべてを覚えることはできない)
  4. 覚えたいことを繰り返し使う(アウトプットの機会を増やす)
  5. 既存の知識と結びつける
  6. 頭の疲労を防止する
  7. 頭の疲労を癒す
  8. 十分な睡眠をとる
  9. 適度な運動する
Posted in  on 1/28/2024 by rteak |  


【LIST】ChatGPT の始め方

Photo by Unseen Studio on Unsplash

ChatGPT の始め方

  1. https://openai.com/blog/chatgpt にアクセスする
  2. 左下にある「Try ChatGPT」をクリックする
  3. 「Sign Up」をクリックする
  4. メールアドレスか Google Acount もしくは Microsoft Acount でアカウント登録する
  5. 名前と生年月日を登録する
  6. 電話番号を登録する
  7. SMS で送信されてきた認証コードを入力する
  8. スマホでもブラウザで https://chat.openai.com/ にアクセスすればアプリは不要(スマホアプリの中には偽物もあるので要注意)

ChatGPT でできること

  1. 一般的な知識の提供や質問に回答すること
  2. あなたの関心事や好みに基づいて、おすすめの本や映画を提案すること
  3. 日々のタスクやスケジュールの管理に役立つ情報を提供すること
  4. 英語を含む複数の言語での翻訳を行うこと
  5. 文章の校正や添削を行うこと
  6. ユーモアや面白い回答を返すこと

ChatGPT でできることは ChatGPT からの回答を引用した。

専門的なことはネットで検索するよりも的確な回答が得られる。

Posted in  on 4/16/2023 by rteak |  


Python で簡単 RPA

image
Photo by Andrea De Santis on Unsplash

Windows 上の操作で自動化したいことがあり、いろいろなシェアウェアを試してみたが、どれもいまひとつであった。

ネットで調べてみたところ RPA のようなことが Python でもできるようなので自作することにした。

開発にいたる背景

au カブコム証券 FX のシステムトレードを使っている。
通信が瞬断すると自動売買が停止し、リトライを手動でしなければならない。(Fig.1 参照)
頻繁に起きるので自動売買の意味がない。

通信設定の調整もやり尽くしたが、インターネット側の問題であれば手詰まりである。

同証券会社にリトライを自動化してくれと要求したとしても、すぐには対応してくれないだろう。

取り急ぎ Python で自動でリトライボタンをクリックするプログラムを作成することにした。

Fig.1
Fig.1 通信エラー

プログラムの概要

このプログラムで実現したいのは、システムトレードに通信エラーが表示されたらリトライボタンをクリックするということ。

通信エラーの表示が検知できればよいのだが、それを実現しようとすると途端にハードルが高くなる。

幸いリトライボタンの座標にはそれ以外のイベントを起こすものがない。
そこで無条件にリトライボタンを定期的にクリックするという仕様にした。

処理手順

  1. 現在のウインドウを取得する
    これは自動売買中に PC で別の作業を行っていることもあり、リトライボタンをクリックした後、元の画面に戻れるようにするため。
    [ソースコード:12行目~13行目]

  2. 対象のウインドウを見つけて、アクティブ化する
    システムトレードのウインドウがアクティブになっていないこともあるので、一旦システムトレードのウインドウを見つけてからアクティブ化する。
    [ソースコード:15行目~20行目]

  3. 指定の座標でクリックする
    予めリトライボタンの座標を調べておき、その位置で左クリックするようにする。
    [ソースコード:22行目~23行目]

  4. 元の画面に戻る。
    1で取得していたウインドウに戻す。
    [ソースコード:25行目~27行目]

ちょっとした工夫

ちょいプロだが、繰り返し回数と実行間隔は可変にしておいた。
[ソースコード:46行目~53行目]

このプログラムはコマンド起動するが、その際繰り返し回数と実行間隔を指定することにより状況に応じた運用ができる。

また、プログラムを走らせたまま外出することもある。
ログを出力し、プログラムの稼働確認ができるようにしておく。
[ソースコード:32行目~42行目]

ログは Google Drive に出力するにすればスマホでも確認できる。
プログラムが停止していたら、リモートアクセスで再起動などの対応を取る。
リモートアクセスは Chrome リモート デスクトップ を使用している。

ソースコード

メモ

win32gui は pywin32 をインストールすること。

pip install pywin32

座標の求め方

まず、画面全体の大きさはディスプレイの解像度で確認する。

設定 > システム > ディスプレイ > ディスプレイの解像度

次に該当位置にマウスのカーソルを置き、コンソールで下記のコマンドを実行する。

>>> import pyautogui
>>> pyautogui.position()
Point(x=987, y=695)

解像度は1920 × 1080 であり、横は真ん中あたり、縦は真ん中より少し下なので、だいたいこんなものだろう。

コードに書くときは切りよく x=1000、y=700 にしておいた。

実行方法

プログラムは実行可能ファイル(exe ファイル)にビルドしておく。(参考:Python ファイルをビルドしてEXE ファイルを作る方法

コンソールに直接コマンドを打ち込んでもよいがバッチファイルにしておけばコンソールを開かなくても実行できる。

次のバッチファイルの例では、60秒間隔で 1440回(24時間)繰り返す設定になっている。

auto_retry.exe 1440 60

使用感

手動でリトライする必要がなくなったので夜中も安心して眠れるようになった。

ただ、PC で作業している場合は一瞬ではあるものの、作業が定期的に止まってしまうところが難点。
ネットサーフィンなどのお楽しみ中なら我慢できる範囲。

専用のマシンを導入すべきだろうか?

Posted in  on 10/30/2022 by rteak |  


無償の暗記カード Web サービス AnkiWeb

image
Photo by Alejandro Escamilla on Unsplash

私にとって効果的な英語勉強法

私は英語が好きだ。
でも、聴くのも話すのも苦手である。
これまでさまざまな勉強法を試してきたが効果的な方法はなかった。

いま効果があると感じているのは英語のフレーズを暗唱する方法だ。

日常生活で使う日本語のフレーズを英語のフレーズで言い換えることにより次のような効果が得られる。

  • 英語構文と英単語、英熟語を同時に覚えられる。
  • われわれ日本人が苦手とする冠詞の付け方をパターンで覚えることができる。
  • 英語らしい表現が身につく。

この練習を毎日5分から15分くらい行う。

これを始めてから 2022年8月25日時点で 221日経過しており、実施したのは198日であるから、結構続いている。

現時点では最も自分に適した勉強法だと思っている。

AnkiWeb が私の勉強を支えてくれている

この英語勉強法を支えてくれているのが AnkiWeb である。

About - AnkiWeb

AnkiWeb とは Web で使える暗記カード(フラッシュカード)である。
AnkiWeb は次のような特徴がある。

  • オリジナルのカードが作れる
  • Web なので PC やスマホがあればどこでも記憶をテストできる
  • アプリもあり Web と同期できる( Windows / Android / iOS )
  • デッキ(カードの束)はシェアできる(他の人が作成したデッキを利用することもできる)
  • 予め勉強時間を設定すればその時間になるまで出題してくれる(たとえば5分を設定すると5分後に勉強を継続するか終了するかを尋ねてくれる)
  • 記憶の程度に応じて適切な頻度で出題される

AnkiWeb を使うようになってからは、本を読んで覚えようとしていたときより、覚えやすく記憶に残りやすくなったと思う。

AnkiWeb をこんな風に使っている

カードの登録

カードの登録は自分でやっている。

たとえば「もっとやさしい起きてから寝るまで英語表現600 起きてから寝るまでシリーズ」という本があるので、日本語と英語のフレーズを毎日少しずつ登録する。

[音声DL付]改訂版 もっとやさしい起きてから寝るまで英語表現600 起きてから寝るまでシリーズ

この本に限らず英語のテキストであれば何でもよい。
English Journal」などの Web サイトを使えばコストはかからない。

ENGLISH JOURNAL ONLINE

多いと疲れるし長続きしないので、必ず嫌にならない程度の数に抑えておく。
この作業は作業記憶(ワーキングメモリ)を使うので、すでに勉強を初めていると言っても差し支えない。

暗記テスト

登録が済めばテストを開始する。
表示された日本語のフレーズを英語で諳んじる。
その結果により「もう一度」「難しい」「正解」「簡単」のいずれかをクリックする。
私の場合は次のような基準でクリックしている。

  • 英語で言えない、あるいは間違った場合は「もう一度」
  • ちょっとしたミスであれば「難しい」
  • 間違いなく言えた場合は「正解」
  • 間違わない自信があれば「簡単」
テストの例
テストの例

使い方は自由。
それぞれご自身の勉強スタイルで使えばよいだろう。

参考記事

外国語の単語はフレーズで覚える方がよい Google 翻訳に保存した単語を一括で Anki Web に取り込む方法
Posted in  on 8/25/2022 by rteak |  


キカガクで AI・機械学習を学ぶ


久しぶりに キカガク を訪問したら、リニューアルしていたので、復習を兼ねて受講することにした。
記事内の数式は正しい表記になっておらず、またほとんどの数式を省略している。
まとめにも書いているが、非常に理解しやすく解説されているので、実際に受講されることをおすすめする。

「キカガク」の使用方法

基本的な操作の方法を動画で説明。

  1. 設定
    プロフィールの変更
    パスワードの変更
    学習コースの選択
    学習開始日と学習終了日の設定


  2. ダッシュボード
    学習の開始
    学習の進捗状況の表示


    Fig.2 ダッシュボード

  3. コース一覧
    無料コース
    有料コース(「AI 人材育成長期コース」購入者はすべて学習可能)


    Fig.3 コース一覧

「Python & 機械学習入門」の内容

導入

当コースの流れについて説明。

  1. 線形代数
  2. 重回帰分析
  3. 重回帰分析の実装
  4. 実データで演習
  5. 統計
  6. 外れ値除去スケーリングを考慮した重回帰分析
  7. ビジネス活用

概念の紹介

人工知能、機械学習、ディープラーニングの概念について紹介。

  1. 人工知能(AI)
    目:画像、耳:音声(時系列)、口:自然言語、それぞれの要素を数値に変換
  2. 機械学習
    変換された数値をもとに、入力と出力の関係性(規則性)を発見
  3. ディープラーニング
    機械学習のアルゴリズムの一部
    他のアルゴリズムとして単回帰分析、SVM などがある

これらは、人工知能 ⊃ 機械学習 ⊃ ディープラーニング の関係になる。

機械学習に必要な数学

機械学習に必要となる数学の分野は次の3つ。

  1. 微分・積分
  2. 線形代数
  3. 確率・統計

機械学習の3大トピック

機械学習には次の3つの種類がある。

  1. 教師あり学習
    入力 X と出力 Y の関係性を学習
    回帰:「数値」を予測
    分類:「カテゴリ」を予測
  2. 教師なし学習
    入力 X の情報構造を学習
    クラスタリング:傾向で分類
    次元削減:入力の変数を削減
  3. 強化学習
    データがない、データがほとんどない状態から、データ収集しながら学習

簡単な機械学習と内挿、外挿

機械学習が保証するのは内挿の予測まで。

  1. 内挿:データの範囲内
  2. 外挿:データの範囲外

外挿は機械学習の保証外となるが、時系列のデータに関しては外挿であっても構わない。

微分

微分は何に使えるか

機械学習における微分の利用目的はモデルとなる関数の誤差を最小にすること。

  1. 接線(y = ax + b)の傾きが求められる
    誤差が最小のとき、傾きはゼロ
  2. 傾きゼロを利用することで、関数(誤差)が最小となる点を求める
    機械学習では誤差を最小にしたい

微分(導関数) 1

機械学習における微分の使い方(2点から直線を求める)。

  1. 2点を通る直線の傾きを求める
  2. 傾き a = f(x) の増加量 ÷ x の増加量

微分(導関数) 2

機械学習における微分の使い方(1点から直線を求める)。

  1. 極限(lim)を使って1点を通る直線の傾き求める
  2. 条件:h → 0、対象:2x + h のとき、極限(lim):2x
  3. 傾き a = f(x+h) - f(x) / (x - x + h)
    傾き a = f(x+h) - f(x) / h

微分の公式

次の3つの公式は頻繁に使うので覚えておく。

  1. (1)' = 0
  2. (x)' = 1
  3. (x**2)' = 2x

以下は演算例。

  1. (3x**2)' = 3 * 2x = 6x
  2. (4x+3)' =(4x)' + (3)' = 4 * (x)' + 3 * (1)' = 4
  3. (3x**2+4x+7)' = 3 * (x**2)' + 4 * (x)' + 7 * (1)' = 3 * 2x + 4 + 0 = 6x + 4  

偏微分

機械学習では複数の変数を取り扱うので、偏微分の演算方法を覚えておく。

偏微分とは多変数の微分すること。

∂/∂a():a 以外を定数だと仮定して微分する。
定数は微分から外だし可能。

計算例
∂/∂a(c-2ca+ca**2) = c * (1)' - 2 * c * (a)'  + c * (a**2)' = -2c + 2ca

線形代数

スカラー・ベクトル・行列

スカラー・ベクトル・行列はそれぞれサイズが異る。
テンソルは複数の行列を並べたもの。

  1. スカラー
    サイズ:1行 × 1列
  2. ベクトル
    サイズ:n行 × 1列
  3. 行列
    サイズ:n行 × m列

行列の演算

行列の基本的な演算方法。

  1. 行列の加減算
    同じ行位置、列位置毎に加減算する。
    条件:サイズが等しいこと
  2. 行列積
    加減算とは異なり、行の順序位置と列の順序位置を一致させて積算した結果を加算する。
    条件:行列 A と 行列 B を掛けるとき、A の列と B の行が等しいこと

サイズ

演算結果のサイズには法則性がある。

  1. ベクトルとベクトルの積はスカラーになる
  2. 行列とベクトルの積はベクトルになる
  3. ベクトルと行列とベクトルの積はスカラーになる

転置(Transpose)

スカラー・行列の行と列を置き換えることを転置という。
転置には次のような法則がある。

  1. スカラーを転置しても同じ値になる。
  2. 転置された行列 A を転置すると、行列 A に戻る。
  3. 行列 A と行列 B の積の転置は、行列 B の転置と行列 A の転置の積に等しい。
  4. 行列 A と行列 B と行列 C の積の転置は、行列 C の転置と行列 B の転置と行列 A の転置の積に等しい。

単位行列・逆行列

単位行列と逆行列の関係性

  1. 単位行列
    対角成分に 1 が並び、その他は 0 となる正方行列
    行列 A と単位行列 I の積は行列 A となる。
    単位行列 I と行列 A の積は行列 A となる。
  2. 逆行列(Inverse Matrix)
    行列 A と逆行列 AI の積は単位行列 I になる
    逆行列 AI と行列 A の積は単位行列 I になる
    条件:行列は正方行列であること

ベクトルで微分

機械学習では評価関数を最適化するためにベクトルを偏微分するため、演算方法を覚えておく。
ベクトルの微分は各要素を偏微分すればよい。

  1. 定数のベクトルを微分したゼロベクトルになる
  2. 転置されたベクトル a とベクトル x の積を偏微分するとベクトル a になる
  3. 転置されたベクトル x と行列 A とベクトル x の積を偏微分すると、行列 A と転置された行列 A を足したものとベクトル x の積となる。

単回帰分析

問題設定

問題設定では、出力変数と入力変数を決める。
ただし、単回帰分析の場合、入力変数は1つに限定する。
入力変数を複数扱う場合は重回帰分析を行う。

分析は学習と推論のフェーズがある

  1. 学習ではモデルを構築する
  2. 推論ではモデルを通して予測値を求める

「モデル」を決める

モデルを決めるために、入力変数と出力変数の関係を直線で表し、傾きと切片を求める。

この傾きと切片をパラメータという。
データ(入力変数と出力変数)にもとづいて適切にパラメータを決定する。

パラメータを決定するためにデータの中心化(Centering)を行う。
データの中心化を行うと切片がゼロになり、演算が楽になる。
データの中心化は各データから入力変数と出力変数の平均値を引けばよい。

「評価関数」を決める

パラメータを適切に決定することを評価関数を決めるという。
評価関数は損失関数ともいう。

実際の値と予測値の差を誤差という。

評価関数は二乗誤差(誤差を二乗したもの)の合計値を求める。

評価関数を「最小化」する

誤差を最小化するために、評価関数の傾きがゼロになるように調整する。
すなわち、傾きがゼロになるように評価関数を偏微分する。

演算は次の2つのステップに分ける。

  1. 式を変形する
    評価関数の式に傾きの変数が含まれるように変形する
    傾きの変数が含まれない項は単純な変数に置き換える
  2. 最適なパラメータを求める
    単純な変数に置き換えられた評価関数を偏微分する
    偏微分後、単純な変数に置き換えられた項を元に戻す

重回帰分析 1

「モデル」を決める

単回帰分析と同様、入力変数と出力変数の関係を直線で表し、傾きと切片(パラメータ)を求める。
ただし入力変数は複数になり、傾きも複数になる。
傾きは「重み」といい、入力変数毎に異なる。

切片は「バイアス」という。
入力変数を定数 1 にすれば、他の入力変数と同じように扱うことができる。

モデルはベクトル式で表現できる。

「評価関数」を決める

単回帰分析と同様、パラメータを適切に決める。

評価関数は実測値から予測値を引いた数の二乗誤差の合計値を求める。

評価関数はベクトル式で表現できる。

評価関数を「最小化」する

単回帰分析と同様、演算は2つのステップで行う。

  1. 式を変形する
    予測値は、行のサイズがサンプル数、列のサイズが入力変数の数の行列で表現できる。
  2. 最適なパラメータを求める
    評価関数を重みのベクトルで微分するとゼロベクトルになる。
    割り算が行えないので、逆行列をかける。
    逆行列は正方行列であることが条件。
    逆行列の条件として「多重共線性」というのもある。

Python 速習

環境構築

Google Colaboratory を使うため、PC に Python やライブラリをインストールするなどの環境構築作業は要らない。

  1. Google アカウント作成
  2. Google Colaboratory で新規ノートブック作成
    Google Colaboratory は無料。
    すでに Python やライブラリ等、必要な環境がそろっている。
    !pip list の実行でインストールされているライブラリ等を表示できる。
  3. 基本動作
    コードモードとテキストモード(マークダウン記法やTEX)
    Ctrl + Enter :実行
    Ctrl + m + b :下にセル追加
    Ctrl + m + a :上にセル追加
    Ctrl + m + d :セル削除
    Ctrl + m + m :テキストモード(マークダウン)
    Ctrl + m + y :コマンドモード
  4. データのアップロード
    Google drive にマウントすることができる。
    %%time で処理時間計測できる。
    ラインタイムのタイプを変更すると GPU や TPU が使えるようになる。
    !nvidia-smi の実行で割り振られている GPU が表示される。

変数

  1. print(変数) :変数に代入されている値を表示
  2. type(変数) :変数の型を表示
  3. リスト:[]
  4. タプル:()
  5. 辞書:{}

基本構文

  1. 比較演算子
  2. エスケープシーケンス

制御構文

よく使用する制御文。

  1. for 文:繰り返し処理
  2. if 文:条件分岐

関数

関数には3つの種類がある。

  1. 入力(引数)のない関数
  2. 入力(引数)のある関数
    デフォルト値を設定することができる。
  3. 返り値のある関数

クラスの基礎

クラスには3種類の関数を定義することができる。

  1. init 関数:インスタンス化
  2. 通常の関数
  3. call 関数:インスタンスに対して引数を与えるだけで実行ができる

単回帰分析の実装

Numpy の速習

Numpy は数値計算を行うために使用する。
  1. import numpy as np
  2. ベクトルの定義
    x = np.array([[1, 2, 3]])
    y = np.arrya([[2, 3.9, 6.1]])
  3. データの中心化(Centering)
    xc = x - x.mean() #データから平均値を引く
    yc = y - y.mean()
  4. 傾き a の計算
    xx = xc * xc #centering された x の要素積
    xy = xc * xy #centering された x と y の要素積
    a = xy.sum() / xx.sum() #xy の総和 ÷ xx の総和
  5. 実装する際は、scikit-learn 等のライブラリを用いるため、このような計算は不要。 

Pandas 速習

Pandas はデータの操作( CSV ファイルの読み込み、SQL 等によるデータベースとの連携等)で使用する。

  1. import pandas as pd
  2. CSV ファイルの読み込み
    df = pd.read_csv("sample.csv") #data frame 型
  3. 先頭から~行表示
    df.head() #先頭から 5行分表示
    df.head(3) #末尾から 3行分表示
  4. 末尾から~行表示
    df.tail() #末尾から 5行分を表示
    df.tail(3) #末尾から 3行分を表示
  5. 行で区切って表示
    df[2:10] #2行目から 10行分を表示
    df[:10] #0行目から 10行分を表示
    df[2:] #2行目から最後の行までを表示
  6. 行と列を指定して表示
    df.iloc[0, 0] #0行目の0列目を表示
    df.iloc[1, 1] #1行目の1列目を表示
    df.iloc[:10, 0] #0行目から 10行分、0列目を表示
    df.iloc[:5, :] #0行目から 5行分、0列目から最後の列までを表示
  7. カラム名を指定して取得
    df['x'] # x列を pandas.core.series.series 型で表示
    df['y'] # y列をを pandas.core.series.series 型で表示 

Matplotlib 速習

Matplotlib はグラフ等を描画するために使用する。

  1. import matplotlib.pyplot as plt
  2. 散布図を表示
    plt.scatter(x, y)
    plt.show()
  3. 描画のサイズを変える
    fig = plt.figure(figsize(8, 8)) #縦と横のサイズを 8 にする
    ax = fig.add_subplot(1, 1, 1) #複数のグラフを表示する
    ax.scatter(x, y) #縦と横のサイズが大きくなる
    ax.scatter(x, y, c='red') #ドットを赤色にする
    ax.set_title('first scatter') #「first scatter」というタイトルを付ける
    ax.set_xlabel('x') #x軸に「x」というラベルを付ける
    ax.set_ylabel('y') #y軸に「y」というラベルを付ける

Numpy による単回帰分析の実装

Numpy を使って単回帰分析を行う。

  1. ライブラリのインポート
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
  2. CSV ファイルの読み込み
    df = pd.csv_read('sample.csv')
    df.head(3)
  3. データの中心化
    df.describ() #データ項目の表示
    df_c = df - df.mean()
    x = df_c['x']
    y = df_c['y']
    plt.scatter(x, y) #散布図の表示
  4. パラメータ a の計算
    xx = x * x
    xy = x * y
    a = xy.sum() / xx.sum()
  5. 結果をグラフ表示
    plt.scatter(x, y, label='y') #実績値の散布図
    plt.plot(x, a * x, c='red'), label='y_hat' #予測値の直線
    plt.legend() #凡例の表示
  6. 予測
    x_new = 40 #x が 40 のとき y_hat はいくらになるか
    xc_new = x_new - mean['x'] #データの中心化
    yc = a * xc_new
    y_hat = yc + mean['y'] #中心化前の状態に戻す
  7. 予測値を算出する関数を作成
    def predict(x):
        #定数項
        a = 10069.022519284063
        xm = 37.62222
        ym = 121065.0
        #中心化
        xc = x - xm
        #予測
        y_hat = a * xc + ym
        return y_hat
  8. 内挿と外挿
    内挿:学習したデータの範囲内
    外挿:学習したデータの範囲外
    機械学習では外挿のデータは正しく予測できない。

重回帰分析の実装

行列演算の基礎

行列演算に必要な知識

  • ベクトルの定義
  • 行列の定義
  • 転置
  • 逆行列
  • 行列積

重みを算出

  1. ライブラリのインポート
    import numpy as np
  2. ベクトルの定義
    x = np.array([[1], [2], [3]])
  3. 行列の定義
    X = np.array([[1, 2], [3, 4]])
  4. 転置(Transpose)
    Xt = X.T
  5. 逆行列(linalg : linear algebra : 線形代数)
    X_inv = np.linalg.inv(X)
  6. 行列積
    XX_inv = np.dot(X, X_inv) #結果は単位行列になる

NumPy でよく使用する処理

  1. 行の数と列の数を取得
    B = np.array([[1, 2, 3], [4, 5, 6]])
    row, col = B.shape #row には行の数、col には列の数が入る
  2. 行毎に要素を抽出
    for b in B:

演習

  1. import numpy as np
  2. X = np.array([[1, 2, 3], [1, 2, 5], [1, 3, 4], [1, 5, 9]])
  3. y = np.array([[1], [5], [6], [8]])
  4. Xt = X.T
  5. XtX = np.dot(Xt, X)
  6. XtX_inv = np.linalg.inv(XtX)
  7. Xty = np.dot(Xt, y)
  8. w = np.dot(XtX_inv, Xty)

実装の際は上記のような計算は行わない。scikit-learn 等のライブラリを使用して、ミスを減らし、効率的にモデルを構築する。

scikit-learn で実装

重回帰分析は、sklearn.linear_model.LinearRegression を使用する。

    1. ライブラリのインポート
      import numpy as np
      import sklearn
    2. データの準備
      X = np.array([[1,2,3], [1,2,5],[1,3,4],[1,5,9]])
      y = np.array([[1],[5],[6],[8]])
    3. モデルの宣言(インスタンス化)
      from sklearn.linear_model import LinearRegression
      model = LinearRegression(fit_intercept=False)
      ※ fit_intercept=False : 切片の計算も行う
    4. モデルの学習(パラメータの調整)
      model.fit(X,y)
    5. 調整後のパラメータの確認
      print(model.coef_)
    6. 予測精度の確認(決定係数 0 ~ 1)
      print(model.score(X, y))
    7. 予測
      X_new = np.array([[1, 3, 6]])
      y_pred = model.predict(X_new)
      print(y_pred)

    まとめ

    キカガク代表取締役会長の吉崎さんが講師をご担当。
    黒と赤のマジックペンと A4 の白紙を使って手書きで非常にわかりやすく説明されていた。
    まるで家庭教師に教えていただいているようだった。
    こちらもノートを用意し、同じように手書きで式を書いたり、重要事項をメモしたりした。
    内容的には、機械学習に必要となる数学の基礎知識が精選され、かつ順序よく説明されていたので、とても理解しやすかった。

    機械学習を独学で習得しようとして、線形代数や微分等で躓いた人は是非このコースを受講されることをおすすめしたい。

    参考資料

    キカガク|AI・機械学習を学ぶ e ラーニングプラットフォーム | キカガク

    The Matrix Cookbook

    Posted in  on 5/16/2021 by rteak |  


    効率のよい資格試験対策

    Image by tjevans from Pixabay

    資格の効能

    資格は結構取っている。

    取得した資格は、IPA 独立行政法人 情報処理推進機構 の「システム監査技術者」「プロジェクトマネージャ」、全日本情報学習振興協会 の「個人情報保護士」「情報セキュリティ管理士」、日本規格協会  の「QC検定 準1級」等がある。

    「資格を持っているからと言って、仕事ができるとは言い切れない」とよく言われるが、初めて会う人にはよい印象を与えられる。

    合格するにはある程度の努力が必要なので、努力する人、資格が取れるだけの知識を持っている人だと思われるようだ。

    資格試験対策の方法

    資格試験対策は過去問を解くところから始める。

    間違った問題はノートに書き残す。
    参考書で調べたこともそのノートに書く。

    参考書の通し読みは効率が悪いのでやらない。
    ただし、初めての分野に挑戦する場合は例外で、参考書を3回ほど通し読みする。

    同じ過去問を解き、間違わなくなったら別の過去問を解く。
    なので最も新しい過去問から解くのがいいだろう。

    これは資格試験に限らず、高校受験の頃からやってきた方法だ。
    最も効率が良い勉強法だと思っている。

    未経験からエンジニアを目指すTechAcademy Pro  
    心理カウンセリングスペシャリスト資格講座

    Posted in  on 9/20/2020 by rteak |  


    Pytorch を Windows10 にインストールした

    Photo by Jonatan Pie on Unsplash

    Pytorch を Windows10 にインストールした

    Pytorch とは、Facebook が開発した Python 用の機械学習ライブラリ。

    Pytorch を pip でインストールしたので、その手順を公開する。

    インストール前の確認

    動作環境

    Pytorch をインストールする環境は以下のとおり。

    • Windows 10 home 1909
    • Python 3.7.7
    • Pycharm 2020.1.4 (Community Edition)

    Pytorch のサイトにアクセス

    https://pytorch.org/ にアクセスし、インストールオプションを選択する。

    インストールオプションの選択


    インストールオプションを選択すると項目が赤色になる。
    今回選択したのは以下のとおり。

    • PyTorch Build : Stable (1.5.1) 
      安定版を選択した。

    • Your OS : Windows

    • Package : pip
      pip でインストールするため。

    • CUDA : None
      CUDA を使用していないため。

    インストール

    Run this Command: の右側にあるコマンドをコピーし、Pycharm の Terminal に貼り付けて実行。



    動作確認

    PyTorch のバージョンをチェックし、検証用プログラムで動作確認を行う。



    謝辞

    今回の記事を書くに当たり、PyTorch のインストール(Windows 上) を参考にさせていただいた。

    ありがとうございました。

    Python 3 入門 + 応用 +アメリカのシリコンバレー流コードスタイルを学ぶオンライン講座 
    未経験からエンジニアを目指すTechAcademy Pro 

    Posted in  on 9/20/2020 by rteak |  


    プログラミング上達法

    Photo by Kelly Sikkema on Unsplash

    この記事は、PC を所有し、PC の基本的な操作やソフトウェアのインストールなどが問題なく行える人を対象にしている。

    一から教科書を読むのは危険

    経験上言えることは、教科書を最初から最後まで読んでも、プログラミングができるようになるとは限らないということ。
    そればかりか、プログラミングが嫌いになるという危険性がある。

    とにかく何かを作る

    では、教科書を読む代わりに何をすればよいのだろうか。

    まずは、開発環境を整えて「Hello World」を表示するプログラムを作ってみよう。
    そして、どんなプログラムが作りたいのかを考えよう。

    作りたいプログラムが思いついたら、その処理順序を考えてみる。
    たとえば、

    1. ファイルを読み込む
    2. ファイル内のデータ項目を分割する
    3. 分割したデータ項目を加工する
    4. 加工したデータ項目を画面に表示する

    という処理順序であれば、ファイルを読み込む方法を調べて実際にコードを書いてみよう。調べる方法はネットでも教科書でも何でもよい。

    その処理が問題なく動作するようになるまで調べながらコードを書き直す。
    すべての処理順序が実装できるまで繰り返す。
    この工程がプログラミングの知識を増やしてくれる。

    プログラムが動くと嬉しい。
    その喜びを味わい続けることが上達への近道である。

    少しずつ改善していく

    初めの頃は基本的な機能しか思いつかない。
    しかし、実際にプログラムを動かしていると、いろいろな機能を追加したくなってくる。

    アイデアが湧いてきたら、必ずメモしておこう。
    そのメモはそのまま To Do List になる。

    新しい機能は、すぐに実装できるものがあれば、調べないと実装できないものもある。
    実際に調べてコードを書くことが技を磨く修行になる。

    実装できる機能が増えれば増えるほど、プログラミング能力が向上していると実感できると思う。

    実際にコードを書いてプログラムを動かすことが、モチベーションの維持向上に寄与する。
    このモチベーション維持向上がプログラミング上達のコツでもある。

    未経験からエンジニアを目指すTechAcademy Pro 

    Posted in  on 9/20/2020 by rteak |  


    キカガク(KIKAGAKU)を復習する


    Photo by NeONBRAND on Unsplash

    4ヶ月弱かかった

    2020年7月30日に「KIKAGAKU | AIを無料で学べる学習サイト」を一通り受講し終えた。
    2020年4月6日から始めたので、4ヶ月弱かかったことになる。
    詰めてやれば、数日で終わるような内容だが、仕事や別の趣味の合間でやっていたこともあり、モチベーションを維持するのが精一杯だった。

    モチベーションを維持するために

    モチベーションを維持するためにも、学習記録をブログに残すようにした。
    単に読むだけではなく、ブログに書き込むことによって達成感が持てるようにした。
    ソースコードや実行結果もブログに掲載した。

    ソースコードは写経というより、ほとんどコピペになった。
    ただし、そのままだと出力できなかったり、元のコードにバグがあったりしたので、一部は改変している。

    理解を深めるためにも復習を

    初期の頃の学習記録を読み直したところ、内容がかなり貧弱だったので、復習も兼ねてブログの書き直しを始めた。

    復習し始めてみると、新たな気付きがあり、より理解が深まるような気がする。
    面倒くさいけれど、やる価値はあると思う。

    Posted in  on 8/02/2020 by rteak |  


    キカガク(KIKAGAKU)で「テキスト分類」を学ぶ

    Photo by Icons8 Team on Unsplash

    今回は、キカガクで「テキスト分類(TensorFlow)」を学んだ。

    学習内容

    自然言語は今までのデータとは異なり、固定の長さのデータではなく、データごとに長さが異なるため、学習の際には固定の長さの数値に落とし込む必要がある。

    文章を品詞ごとに分割する形態解析、単語を数値化する手法の一つである Bag of Words を使って自然言語の特徴量変換を行う。

    MeCab で形態素解析

    文章を単語毎に区切る方法のことを 形態素解析 (morphological analysis) と呼ぶ。
    MeCab を使用しての形態素解析を行う。

    形態素解析の実装

    Tagger クラスをインタンス化する。
    -Ochasen は形態素解析の出力方法のこと。
    文章の分割には parse() メソッドを使用する。
    分割されたテキストデータはエスケープシーケンスを取り除き、単語ごとに抽出を行う処理を施す必要がある。

    名詞の抽出

    入力変数は各記事(文書)、目的変数はニュースサイト名(ラベル)とする。
    各記事(文書)を数値化し、ニュースサイト名に分類する。

    この問題設定の場合、名詞が特徴となるため、形態素解析で名詞を抽出する。
    特定の文字列でテキストデータを分けるときは、split() メソッドを使用する。
    品詞が名詞の単語のみを抽出し、リストに格納する。

    自然言語の特徴量変換

    基礎的なテキストデータのエンコーディング方法(ベクトル化)の種類

    • Bag of Words (Count encoding)
    • tf-idf
    • One-hot encoding
    • Word2Vec

    Bag of Words の概要

    Bag of Words (以下 BoW)とは、単語の出現回数によって単語を数値に変換する方法。

    BoW の実装

    BoW の実装は scikit-learn を用いる。
    scikit-learn を用いる場合、テキストデータは単語ごとに半角スペース区切りになっている必要がある。

    join() メソッドを用いることでリストの要素を繋げられる
    エンコーディングは CountVectorizer クラスを使用する。
    インスタンス化後に fit_transform() メソッドを使用すると、単語毎に ID が割り振られ、ID ごとの出現回数を元にベクトル化が行われる。
    vocabulary_ 属性にはエンコーディングされた重複なしの単語とその ID を確認できる。
    エンコーディング後の数値は toarray() メソッドを使用して取得する。

    文書分類の実装

    実際のデータセットを用いて、文書分類の実装を行う。

    入力変数・目的変数の作成

    テキストファイルごとに BoW を用いてエンコーディングを行う。
    また、テキストファイルごとにどのカテゴリの文書なのかを示す目的変数の作成も行う。

    glob を用いてファイルの読み込みを行う。
    取り出したこの 1 テキストファイルが入力変数になる。
    このテキストデータからこの記事がどのカテゴリに属するのかの分類を行う。

    各ディレクトリに対応する要素番号を分類に使用するラベルとして使用する。
    enumerate() を使うことで、for 文を用いて繰り返しを実行する際に要素番号も併せて取得することができる。
    全てのディレクトリ・テキストファイルを読み込み、同時にラベル付けも行う。

    文章から名詞のみを抽出

    前に作成した名詞抽出用の関数を使用して、文書全体で使用されている名詞を全て word_collect というリストに格納していく。

    それぞれのテキストデータに対し名詞抽出を行う関数を適用し、リストに追加する前に半角スペース区切りの文字列に変換を行う。

    BoW に変換

    全ての名詞を使用して辞書を作成した場合、使用される単語量が膨大になる(約 5 万単語)ことが想定されるため、エンコーディング時に引数 min_df を指定し、出現頻度が指定した値以下のものは取り扱わない設定を行う。

    モデルの定義と学習

    ニューラルネットワークを実装する。
    モデルの定義・学習・評価を行い、文書分類がどの程度の精度で行うことができているのか次の手順で確認する。

    1. 学習用データセットとテスト用データセットに分割
    2. モデルの定義
    3. モデルの学習
    4. モデルの評価

    ソースコード



    実行結果

    Fig.1 損失

    Fig.2 正解率


    Posted in  on 7/30/2020 by rteak |  


    キカガク(KIKAGAKU)で「機械学習による自然言語処理」を学ぶ

    Photo by Icons8 Team on Unsplash

    今回は、キカガクで「機械学習による自然言語処理」を学んだ。

    学習内容

    実装の流れ

    自然言語処理の流れ(文章の特徴を抽出するための操作)は次のとおり。

    1. データの収集
    2. 【前処理】クリーニング処理
    3. 【前処理】単語の正規化
    4. 【前処理】形態素解析
    5. 【前処理】基本形への変換
    6. 【前処理】ストップワード除去
    7. 単語の数値化
    8. モデルの学習

    データの収集

    解決したいタスクに応じてデータを収集する。

    【前処理】クリーニング処理

    HTMLのタグなど意味を持たないノイズを削除する。
    BeautifulSoup や 標準ライブラリ re モジュールを使用する。

    【前処理】単語の正規化

    半角や全角、小文字大文字などを統一する。
    表記ゆれ(「行う」と「行なう」、「りんご」と「リンゴ」、「Apple」と「apple」等)を統一する。

    【前処理】形態素解析

    文章を単語ごと分割する。単語の分かち書き。
    MeCab、Janome、JUMAN++ を使用する。

    MeCab は MeCab: Yet Another Part-of-Speech and Morphological Analyzer から mecab-0.996.exe をダウンロードしてインストール(文字コードは UTF-8 を選択)。
    さらに、pip install mecab-python-windows で Python 開発環境にもインストール。

    【前処理】基本形への変換

    語幹(活用しない部分)への統一を行う。
    例:学ん(だ)→学ぶ

    主に MeCab を使用する。
    昨今の実装では基本形へ変換しない場合もある。

    【前処理】ストップワード除去

    出現回数の多すぎる単語など、役に立たない単語を除去する。
    ストップワードをまとめた辞書との一致検索や出現頻度による削除を行なう。
    昨今の実装では除去しない場合もある。

    単語の数値化

    機械学習で扱えるよう文字列から数値へ変換を行う。

    モデルの学習

    タスクに合わせ、古典的な機械学習~ニューラルネットワーク選択する。

    オープンデータセットについて

    オープンデータセットとはある団体が保有しており、自由に活用できるよう公開しているデータのこと。

    オープンデータセットは次のようなものがある。

    オープンデータセットのまとめサイト

    ソースコード



    実行結果


    Posted in  on 7/30/2020 by rteak |  


    キカガク(KIKAGAKU)で「自然言語処理の基礎」を学ぶ

    Photo by Icons8 Team on Unsplash

    今回は、キカガクで「自然言語処理の基礎 - KIKAGAKU」を学んだ。

    学習内容

    はじめに

    • 言葉は関係性から成り立つ。

    • 言葉はデータの集合である。

    • 音声は波形、文字はただの点と線の集合。このごく微小の信号やシンボルが群をなすことにより、最終的に我々にとっての「意味」が形成される。

    • 言葉を関係性をもったデータの集合であると考えるならば、我々はこれらの扱い方や関係性を自動で導き出す方法を知っているはず。

    自然言語とは

    自然言語と人工言語

    自然言語(Natural Language)とは

    • 私達人間が日常的に読み書きしたり、話したりするのに使っている言語のこと

    • 人間によって繰り返し使われ、進化してきた言語のこと

    • 自発発生的生まれた言語のこと

    • 日本語、英語、中国語等

    人工言語(Constructed Language)とは

    • 人間によって人工的に作り出された言語のこと

    • ある目的で人工的に作られた言語のこと

    • エスペラント、プログラミング言語(Python、C++等)等

    自然言語処理

    自然言語処理とは、自然言語をコンピュータに処理させる技術・学問分野のことを指す。
    自然言語処理はコンピュータによる知的な処理の代替が目標。

    自然言語処理のタスクと応用技術

    言語の処理・活用方法

    自然言語処理の基礎技術

    自然言語処理の基礎技術とは、文章からより良い特徴を抽出するための根幹技術である。

    基礎技術の分類

    • 形態素解析
      文章を単語ごとに切り分ける処理
      文章のパーツ化を担うため最も重要

    • 構文解析
      単語の係り受けなど、修飾関係を決める処理

    • 意味解析
      「意味が妥当であるか」など、文章の意味を決定する処理
      例:望遠鏡で泳ぐ彼女を見た

    • 文脈解析
      複数の文について関係を決定する処理
      例:入り口に男性が立っている。彼の名前は佐川だ。

    機械学習を用いた自然言語処理

    機械学習の本質は「データにおける自動的な特徴の抽出、関係性の構築」であるため自然言語とも相性が良い。

    ニューラルネットワークは End-to-End 学習(入力変数と目的変数の直接的な結びつきの構築) ができるため、従来の基礎技術で必要だった複雑なチューニングや部分的な最適化、それらの専門知識が不要になった。

    Posted in  on 7/29/2020 by rteak |  


    キカガク(KIKAGAKU)で「畳み込みニューラルネットワークの代表的なモデル」を学ぶ

    Photo by Owen Beard on Unsplash

    今回は「畳み込みニューラルネットワークの代表的なモデル - KIKAGAKU」を学んだ。

    学習内容

    Functional API

    複数の入出力が発生するようなモデルの場合、Sequential API では記述できないため、Functional API を使って記述する。

    VGGNet(2014)

    VGGNet は非常にシンプルでわかりやすいアーキテクチャであるのに精度が高い。

    VGGNet の特徴

    1. 3×3 フィルタのみを使用
    2. 同一チャネルの複数の畳み込み層と Max Pooling を 1 セットとし、繰り返す
    3. Max Pooling 後の出力チャネル数を 2 倍にする」

    3×3 フィルタを使用するのは、上下左右中心の情報が受容できる最も小さなサイズであるため。

    パラメータ数が半減できるのに精度は高い。

    GoogLeNet / Inception(2014)

    GoogLeNet は Inception モジュールとして、複数のネットワークを1つにまとめ、モジュールを積み重ねる、Network In Network の構成がなされている。

    Inception モジュールの内部では、異なるフィルタサイズの複数の畳み込み層を同時に通して、結合する処理が行われる。これはパラメータ数を削減して計算コストを下げつつ、複雑なアーキテクチャを組むために行われる。

    また、Global Average Pooling も GoogLeNet で採用され、CNN で特徴マップを全結合層へつなぐ際に使用される。

    これまでは特徴マップの各画素を順番に切り取って並べることでベクトル化していたのに対し、GAP では一つの特徴マップから Average Pooling で 1×1 のサイズにしたものを並べてベクトル化する。

    ResNet(2015)

    ResNet は Residual モジュールを採用している。
    層を深くすることで精度が向上する一方、深くしすぎると逆伝播時に勾配消失してしまう問題があり、その対策として Residual モジュールが提案された。
    Residualモジュールに、1×1 畳み込みを加えて、パラメータを削減しより効率的に学習を行える Bottleneck モジュールも提案された。

    He 初期化は、活性化関数に ReLU を用いる際の、最適な重みの初期値として、平均 0 標準偏差 1 の正規分布からランダムに設定する。

    Batch Normalization も ResNet で提案された。
    ResNet は最大 152 層まで深くしたアーキテクチャが提案されており、各バリエーションの構成は以下の通り。

    • ResNet18
    • ResNet34
    • ResNet50
    • ResNet101
    • ResNet152

    MobileNet (2017)

    MobileNet はモデルサイズの軽量化を図りながら、高精度の予測を可能としたモデルであり、物体検出などの速度が求められる問題設定のバックボーンとして使用されている。

    Depthwise Separable Convolution は、畳み込みの計算を Depthwise Convolution と Pointwise Convolution に分解することで、通常の畳み込み処理からパラメータ数を大きく削減することに成功した。

    Depthwise Convolution は、 3 チャネルの画像に対し、各チャネルごとに 1 枚ずつフィルタを用意し、チャネル単位で畳み込みを行うが、各チャネルでの計算結果を足し合わせる処理は行わない。
    Depthwise Convolution では入力画像のチャネル数分のチャネルを持った特徴マップが出力される。

    TensorFlow では layers.DepthWiseConv2D() で実装できる。
    Pointwise Convolution は、1×1 のフィルタをDepthwise Convolution で出力された特徴マップのチャネル数分用意して、畳み込み計算を行う。
    TensorFlow では、layers.Conv2D(kernel_size=1, strides=1) で実装できる。

    ソースコード



    実行ログ


    Posted in  on 7/26/2020 by rteak |  


    キカガク(KIKAGAKU)で「データ拡張」を学ぶ


    Photo by Owen Beard on Unsplash

    今回は「データ拡張 - KIKAGAKU」を学ぶ。

      学習内容

      ベースモデルの作成

      1. データセットの準備
      2. データをプロット
      3. 正規化

      モデルの定義と学習

      1. シードの固定
      2. モデル構築
      3. Optimaizer の設定
      4. モデルのコンパイル
      5. 学習の詳細設定
      6. 学習の実行

      各処理の確認

      1. サンプルイメージ
      2. データ拡張のためのモジュール
      3. 処理後を可視化する関数
      4. 回転
      5. 水平移動
      6. せん断
      7. 拡大
      8. 水平反転
      9. 垂直反転
      10. option : fill_mode 

      各処理適用後の画像の保存

      1. 画像を保存する関数
      2. サンプル画像の用意
      3. 水増し処理を定義
      4. batch_size, height, width, channel に reshape
      5. 保存回数の指定

      データ拡張による精度の変化

      1. 適用したいデータ拡張の種類を定義
      2. シードの固定
      3. モデル構築
      4. Optimaizer の設定
      5. モデルのコンパイル

      ソースコード



      実行結果

      Fig.1

      Fig.2

      Fig.3

      Fig.4

      Fig.5

      Fig.6

      Fig.7

      Fig.8

      Fig.9

      Fig.10

      fig.11



      実行ログ


      Posted in  on 7/24/2020 by rteak |  


      ショッピングサイトの商品を定期的にチェックするプログラムを Python で作った

      Photo by Marcin Kempa on Unsplash

      ショッピングサイトの商品を定期的にチェックするプログラムを Python で作った。

      ショッピングサイトで欲しい商品があっても、よく売れる商品なのですぐに欠品になる。

      商品が補充されるのをずっと待っているわけにもいかないので、商品が補充されたときにメールで知らせてくれるプログラムを Python で作成した。

      今回はそのプログラムを作成するためのポイントを公開しよう。

      ショッピングサイトで商品の在庫をチェックするための準備

      まずは、商品を購入したいショッピングサイトを開き、欲しい商品を検索してみる。

      今回の例では東急ハンズのハンズネットで検索してみた。

      下図は、検索結果のスナップショットの一部である。

      アドレスバーには「https://hands.net/search/?q=XXXXX」(XXXXX は商品名)と表示された。

      この URL を使用し、商品名のところを変更してやればよい。

      (ソースコードの 13行目から 18行目までを参照)

      検索結果の 0件がこの URL の HTML のどこにあるのか、知っておく必要がある。

      上記のコードを実行してみると、この URL の HTMLが表示される。(コードが多いので省略)

      HTML で「0件」の箇所を検索してみると、

      <div class="result">検索結果 <span class="count">0件</span></div>

      という行が特定できた。

      商品の在庫があるかどうかは、クラス "count" が「0件」かどうかを判定してやればよい。

      (ソースコードの 20行目から 27行目までを参照)

      以上がショッピングサイトで商品の在庫をチェックするための準備作業である。

      これらの情報を参考にして、コードを書いていけばよい。

      在庫判定後の処理

      在庫がなかったときは、検索した時刻を取得して在庫がなかったことをログに出力する。

      (ソースコードの 30行目から 35行目までを参照)

      在庫があったときは、メールを送信して在庫があったことを時刻とともにログに出力する。

      (ソースコードの 37行目から 66行目までを参照)

      今回メールサービスは GMAIL を使用している。

      GMAIL を使用する場合、ログインで使用するパスワードはアプリパスワードにすること。

      アプリパスワードの生成方法は、「アプリ パスワードでログイン - Google アカウント ヘルプ」を参照。

      なお、ログ出力は在庫があってもなくても行うため、関数にしておいた。

      (ソースコードの 71行目から 75行目までを参照)

      どれくらいの頻度で何回繰り返すか

      検索頻度は10分おきにし、在庫があれば繰り返しから抜けるようにした。在庫がなければ最大144回( 24時間分)繰り返す。

      検索頻度は控えめにして、ショッピングサイトに迷惑がかからないようにする。

      (ソースコードの 10行目から 12行目まで、68行目から 69行目までを参照)

      バックグラウンドで実行する(Windows 10 の場合)

      長時間繰り返し検索するため、プログラムは実行可能ファイル(exe ファイル)にして、バックグラウンドで実行できるようにしておく。(参考:Python ファイルをビルドしてEXE ファイルを作る方法

      バックグラウンドでプログラムを実行するには、バッチファイルを作成し、その中で start コマンドを使って exe ファイルを起動すればよい。

      start /MIN inventory_check.exe

      その気になれば、なんとかなる

      何かやりたいことがあっても、はじめからできないと諦めてしまうとその先はない。

      できるはずと思ってあれこれ調べていけば、必ず解決策が見つかる。

      壁にぶつかっても工夫を凝らせば乗り越えられる。

      その気になれば、なんとかなるものだ。

      ソースコード

      Posted in  on 6/28/2020 by rteak |  


      キカガク(KIKAGAKU)で「畳み込みニューラルネットワークの精度向上」を学ぶ

      Photo by Owen Beard on Unsplash

      今回は「畳み込みニューラルネットワークの精度向上 - KIKAGAKU」を学ぶ。

      学習内容

      ベースモデルを作成する

      1. データセットの準備
      2. モデルの定義と学習
      3. 結果の確認

      最適化アルゴリズム

      1. SGD (Stochastic Gradient Descent: 確率的勾配降下法)
      2. Momentum SGD
      3. RMSprop
      4. Adam (Adaptive moment estimation)

      過学習対策

      1. ドロップアウト
      2. 正則化 (Regularization)
      3. 早期終了
      4. バッチノーマリゼーション

      活性化関数

      ソースコードと実行結果

      ベースモデル


      Fig.1 データセット

      Fig.2 Accuracy

      Fig.3 Loss




      過学習対策(ドロップアウト)


      Fig.4 Accuracy

      Fig.5 Loss




      過学習対策(正則化)


      Fig.6 Accuracy

      Fig.7 Loss



      過学習対策(早期終了)


      Fig.8 Accuracy

      Fig.9 Loss




      過学習対策(バッチノーマリゼーション)



      Fig.10 Accuracy


      Fig.11 Loss




      活性化関数



      Fig.12 活性化関数



      Posted in  on 6/07/2020 by rteak |