テクニカルレポート: 人工知能を用いた渋滞予測技術(国外での先行事例)の再現

概要

時系列向き人工知能LSTM(Long Short-Term Memory,時系列データの学習に適したニューラルネットワークの一種)を用いた渋滞予測の先行事例(2016年10月公開)を再現する

(URL: https://github.com/corenel/traffic-prediction

目次

第1章 先行研究で実施されたこと

学習(訓練)に使用するデータ

米国政府機関が公開するオープンデータの1つ

名称: AMS Pasadena Main Data

ライセンス: クリエイティブコモンズ

URL: https://catalog.data.gov/dataset/ams-pasadena-main-data

学習(訓練)に使用するデータの項目

何を予測するのか

未来の曜日番号、平日か休日か、時、分から、車両速度を予測する

学習に使用するデータの分量

図1に示したデータ49824件

5分間隔の連続データであり、全部で173日分


図1.学習に使用するデータのうち車両速度のプロット(横軸はデータ番号,縦軸は車両速度)

第2章 AIシステムを構築する基盤

Python 3.12 のインストール

Pythonのインストールを行い、Pythonのプログラムを実行する環境を整える。扱う環境は、Windows搭載パソコンである。金子研究室では、Python 3.12.10を推奨する。

[Windows での Python 3.12 のインストール手順を見るには、ここをクリック]

Windows での Python 3.12 のインストール

以下のいずれかの方法でPython 3.12をインストールする。Pythonがインストール済みの場合、この手順は不要である。

方法 1:winget によるインストール

インストールコマンドの実行方法

管理者権限コマンドプロンプトを起動する(手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして、コマンド全体をコマンドプロンプトにコピー&ペーストする。

--scope machine を指定することで、システム全体(全ユーザー向け)にインストールされる。このオプションの実行には管理者権限が必要である。インストール完了後、コマンドプロンプトを再起動するとPATHが反映される。

REM Python 3.12 をシステム領域にインストール
winget install --id Python.Python.3.12 -e --scope machine --silent --accept-source-agreements --accept-package-agreements --override "/quiet InstallAllUsers=1 PrependPath=1 Include_test=0 Include_pip=1 Include_launcher=1 InstallLauncherAllUsers=1 TargetDir=\"C:\Program Files\Python312\""

REM Python と Scripts を PATH 先頭に追加
powershell -NoProfile -Command "$p='C:\Program Files\Python312'; $s=\"$p\Scripts\"; $c=[Environment]::GetEnvironmentVariable('Path','Machine'); if((Test-Path $p) -and (';'+$c+';' -notlike \"*;$p;*\") -and (';'+$c+';' -notlike \"*;$s;*\")){[Environment]::SetEnvironmentVariable('Path',\"$p;$s;$c\",'Machine')}"

方法 2:インストーラーによるインストール

  1. Python公式サイト(https://www.python.org/downloads/)にアクセスし、「Download Python 3.x.x」ボタンからWindows用インストーラーをダウンロードする。
  2. ダウンロードしたインストーラーを実行する。
  3. 初期画面の下部に表示される「Add python.exe to PATH」にチェックを入れてから「Customize installation」を選択する。このチェックを入れ忘れると、コマンドプロンプトから python コマンドを実行できない。
  4. 「Install Python 3.xx for all users」にチェックを入れ、「Install」をクリックする。

インストールの確認

コマンドプロンプトで以下を実行する。

python --version

バージョン番号(例:Python 3.12.x)が表示されればインストール成功である。「'python' は、内部コマンドまたは外部コマンドとして認識されていません。」と表示される場合は、インストールが正常に完了していない。

Build Tools・CUDA Toolkit・PyTorch のインストール

本章では、C++ ビルドツール、NVIDIA CUDA Toolkit、PyTorch のインストールを行い、GPU を活用した機械学習プログラムを実行する環境を整える。扱う環境は、Windows 搭載パソコンである。

[Build Tools・CUDA Toolkit・PyTorch のインストール手順を見るには、ここをクリック]

Windows での Build Tools for Visual Studio 2026 のインストール

Build Tools for Visual Studio 2026 は、C++ ソースコードを Windows 用バイナリにコンパイルするための開発ツール群である。unsloth 等の一部 Python パッケージは、インストール時に C++ コードのビルドを必要とするため、これらのツールが必須となる。

以下のコマンドは、Build Tools が未インストールの場合は winget で新規インストールし、インストール済みの場合は setup.exe modify でコンポーネントを追加する(バージョンは変更しない)。

インストールコマンドの実行方法

管理者権限コマンドプロンプトを起動する(手順:Windows キーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして、コマンド全体をコマンドプロンプトにコピー&ペーストする。

REM VC++ ランタイム
winget install --scope machine --id Microsoft.VCRedist.2015+.x64 -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "/quiet /norestart"

REM ============================================================
REM Visual Studio Build Tools + Desktop development with C++
REM (VCTools、MSBuildTools、CMake連携、Clang、Windows 11 SDK)
REM ============================================================
REM 進行中のインストーラーを停止(ロック競合回避)
taskkill /F /IM vs_setup.exe /T >nul 2>&1
taskkill /F /IM vs_installer.exe /T >nul 2>&1
taskkill /F /IM vs_installerservice.exe /T >nul 2>&1

REM 未インストール時: winget で新規インストール
REM インストール済み時: setup.exe modify でコンポーネント追加(バージョンは変更しない)
winget list --id Microsoft.VisualStudio.BuildTools 2>nul | findstr /i "BuildTools" >nul 2>&1
if %ERRORLEVEL% EQU 0 (
    for /f "usebackq delims=" %P in (`"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -products Microsoft.VisualStudio.Product.BuildTools -property installationPath`) do start /wait "" "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" modify --installPath "%P" --add Microsoft.VisualStudio.Workload.VCTools --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Component.VC.CMake.Project --add Microsoft.VisualStudio.Component.VC.Llvm.Clang --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset --add Microsoft.VisualStudio.Component.Windows11SDK.26100 --includeRecommended --quiet --norestart --nocache
) else (
    winget install --scope machine --id Microsoft.VisualStudio.BuildTools -e --silent --disable-interactivity --force --accept-source-agreements --accept-package-agreements --override "--quiet --wait --norestart --nocache --add Microsoft.VisualStudio.Workload.VCTools --includeRecommended --add Microsoft.VisualStudio.Workload.MSBuildTools --add Microsoft.VisualStudio.Component.VC.CMake.Project --add Microsoft.VisualStudio.Component.VC.Llvm.Clang --add Microsoft.VisualStudio.Component.VC.Llvm.ClangToolset --add Microsoft.VisualStudio.Component.Windows11SDK.26100"
)

REM 破損時の修復(任意、動作がおかしくなった場合)
REM "C:\Program Files (x86)\Microsoft Visual Studio\Installer\setup.exe" repair --installPath "C:\Program Files (x86)\Microsoft Visual Studio\18\BuildTools" --quiet --norestart

REM 導入確認(インストールパスが表示されれば正常)
"C:\Program Files (x86)\Microsoft Visual Studio\Installer\vswhere.exe" -products * -requires Microsoft.VisualStudio.Workload.VCTools -property installationPath

上記のコマンドでは、Build Tools 本体と Visual C++ 再頒布可能パッケージをインストールし、続いて以下のコンポーネントを追加している。

追加のコンポーネントが必要になった場合は Visual Studio Installer で個別にインストールできる。

Windows での NVIDIA CUDA Toolkit のインストール

NVIDIA CUDA Toolkit は、NVIDIA GPU 上で計算を行うためのコンパイラ・ライブラリ群である。PyTorch や vLLM 等が GPU を利用するために必要となる。GPU を使用しない場合、この手順は不要である。

前提条件:NVIDIA GPU、NVIDIA ドライバ、Build Tools for Visual Studio もしくは Visual Studio が必要である。

インストール中の注意:他のウインドウは閉じておくこと。

インストールコマンドの実行方法

管理者権限コマンドプロンプトを起動する(手順:Windows キーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして、コマンド全体をコマンドプロンプトにコピー&ペーストする。

REM NVIDIA CUDA Toolkit 12.8 をシステム領域にインストール
winget install --scope machine --id Nvidia.CUDA --version 12.8 -e --silent --disable-interactivity --force --uninstall-previous --accept-source-agreements --accept-package-agreements --override "-s -n"

REM 環境変数TEMP, TMPの設定(一時ファイルの保存先を短いパスに変更)
mkdir C:\TEMP
setx TEMP "C:\TEMP" /M
setx TMP "C:\TEMP" /M

環境変数 TEMP および TMP を C:\TEMP に変更しているのは、後続のインストール処理で長いパス名や空白を含むパス名がエラーの原因となる場合があるためである。

Windows での PyTorch のインストール

https://pytorch.org のインストールガイドに従い、自環境の CUDA バージョンに対応したコマンドを取得して実行する。CUDA バージョンは以下で確認できる。

nvcc --version

Python 3.12、CUDA 12.6 以上の場合は、管理者権限コマンドプロンプトを起動し、以下を実行する。cu128 は CUDA 12.8 用のタグである。CUDA バージョンが異なる場合は、上記公式サイトで該当するタグを確認し、URL 末尾の cu128 を置き換えること。

pip install --no-user -U numpy torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu128

以降の章では、必要に応じて題材に応じた必要なソフトウェアを追加する。

Python の開発環境 Visual Studio Code のインストールと Python 用の設定

Python の開発環境Visual Studio Code(プログラムを編集するソフトウェア。以下、VS Code)を整える。

[Windows での Visual Studio Code のインストールと Python 用の設定手順を見るには、ここをクリック]

Windows での Visual Studio Code のインストールと Python 用の設定手順

1. VS Code と拡張機能のインストール

以下のコマンドにより,既存の VS Code を削除し,全ユーザー共有の設定で再インストールしたうえで,拡張機能(VS Code に機能を追加するソフトウェア)をまとめて導入する.

インストールコマンドの実行方法

管理者権限コマンドプロンプトを起動する(手順:Windows キーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。そして,コマンド全体をコマンドプロンプトにコピー&ペーストする。

インストールコマンド


REM ============================================================
REM Microsoft Visual Studio Code
REM ============================================================
winget uninstall -e --id Microsoft.VisualStudioCode --silent --disable-interactivity --accept-source-agreements
rmdir /s /q C:\ProgramData\vscode-extensions 2>nul
rmdir /s /q "%APPDATA%\Code" 2>nul
rmdir /s /q "%USERPROFILE%\.vscode" 2>nul
rmdir /s /q "%LOCALAPPDATA%\Microsoft\vscode-update" 2>nul

REM VS Code をシステム領域に新規インストール
winget install --scope machine --id Microsoft.VisualStudioCode -e --silent --accept-source-agreements --accept-package-agreements

REM 全ユーザー共有の拡張機能フォルダ
mkdir C:\ProgramData\vscode-extensions 2>nul
icacls "C:\ProgramData\vscode-extensions" /grant "Everyone:(OI)(CI)M" /T

REM スタートメニューのショートカットを --extensions-dir 付きで再作成
rmdir /s /q "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code" 2>nul
del "C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk" 2>nul
powershell -NoProfile -Command "$s=New-Object -ComObject WScript.Shell; $lnk=$s.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk'); $lnk.TargetPath='C:\Program Files\Microsoft VS Code\Code.exe'; $lnk.Arguments='--extensions-dir \"C:\ProgramData\vscode-extensions\"'; $lnk.Save()"
REM ショートカットの検証
powershell -NoProfile -Command "$s=New-Object -ComObject WScript.Shell; $lnk=$s.CreateShortcut('C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Visual Studio Code.lnk'); Write-Host 'TargetPath:' $lnk.TargetPath; Write-Host 'Arguments:' $lnk.Arguments"

REM ファイル / フォルダ右クリックの「Code で開く」を登録
reg add "HKLM\SOFTWARE\Classes\*\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%1\"" /f
reg add "HKLM\SOFTWARE\Classes\Directory\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%1\"" /f
reg add "HKLM\SOFTWARE\Classes\Directory\Background\shell\VSCode\command" /ve /d "\"C:\Program Files\Microsoft VS Code\Code.exe\" --extensions-dir \"C:\ProgramData\vscode-extensions\" \"%V\"" /f

REM --extensions-dir 付きで起動する code.cmd ラッパを作成
REM (%* を echo で書くと対話的 cmd で失われるため、PowerShell で [char]37+'*' を書き出す)
powershell -NoProfile -Command "$pct=[char]37; $q=[char]34; $c='@echo off'+[char]13+[char]10+$q+'C:\Program Files\Microsoft VS Code\bin\code.cmd'+$q+' --extensions-dir '+$q+'C:\ProgramData\vscode-extensions'+$q+' '+$pct+'*'+[char]13+[char]10; [IO.File]::WriteAllText('C:\ProgramData\vscode-extensions\vscode.cmd',$c,[Text.Encoding]::ASCII)"

REM 拡張機能のインストール
set "CODE=C:\Program Files\Microsoft VS Code\bin\code.cmd"
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --uninstall-extension GitHub.copilot
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --uninstall-extension GitHub.copilot-chat
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.python
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.vscode-pylance
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension ms-python.debugpy
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension MS-CEINTL.vscode-language-pack-ja
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension saoudrizwan.claude-dev
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension rust-lang.rust-analyzer
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension tamasfe.even-better-toml
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension anthropic.claude-code
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --install-extension almenon.arepl
"%CODE%" --extensions-dir "C:\ProgramData\vscode-extensions" --list-extensions --show-versions
echo === セットアップ完了 ===

2. Python インタプリタの選択

同一マシンに複数の Python がインストールされている場合,VS Code で使用する Python 本体(インタプリタ:Python プログラムを解釈・実行するソフトウェア)を選択する必要がある.

  1. コマンドパレット(コマンド名で機能を呼び出す VS Code の入力欄)を開く(Ctrl+Shift+P
  2. Python: Select Interpreter と入力する
  3. 表示される一覧から,使用する Python(例:C:\Program Files\Python312\python.exe)を選択する.

Python プログラム実行手順

[Windows での Python プログラム実行手順を見るには、ここをクリック]

Windows での Python 実行手順(Visual Studio Codeを使用)

プログラムファイルの作成と保存

  1. 左サイドバーの「エクスプローラー」アイコン(Ctrl+Shift+E)をクリックする
  2. 「NO FOLDER OPENED」(作業対象フォルダが未選択の状態)と表示される場合は,「Open Folder」をクリックし,プログラムを保存するフォルダを選択する

    続いて「フォルダを信用するか」を確認する画面(フォルダ内のコードを実行してよいか確認する VS Code の仕組み)が表示されるので,チェックして Yes を選択する

  3. フォルダ名の右側に表示される「新しいファイル」アイコンをクリックする
  4. ファイル名(例:aitask.py.ファイル名は何でも良い)を入力し Enter を押す.拡張子は .py(Python ファイルを示す拡張子)とする
  5. 実行したいコードを選択し,Ctrl+C でコピーする.VS Code のエディタ領域に Ctrl+V で貼り付ける
  6. Ctrl+S で保存する

プログラムの実行

  1. エディタ右上の三角形「▷」アイコン(Run Python File:現在開いている Python ファイルを実行するボタン)をクリックする.または,エディタ上で右クリックし「ターミナルで Python ファイルを実行」を選択する
  2. VS Code 下部のターミナル(コマンドの入出力を表示する画面)に,実行結果(print 関数の出力等)が表示される
  3. tkinter(Python 標準の GUI ライブラリ)のファイル選択ダイアログを使うプログラムを実行した場合は,ダイアログが開くので対象画像を選択する
  4. VS Code 下部のターミナルで実行結果を確認する.OpenCV ウィンドウ(OpenCV が画像を表示するために開く専用ウィンドウ)が開いた場合はそちらも確認する.OpenCV ウィンドウは,マウスクリックでウィンドウをアクティブ(操作対象の状態)にしてからキーを押すと終了する

第3章 渋滞予測実験(時系列向きニューラルネットワークを用いた先行技術による)

実験内容

過去173日分のデータを使い,直後約6日間の速度を予測する

4層のディープニューラルネットワーク(うち3層はLSTM,うち1層は全結合層).

学習に要する時間

パソコンで数時間から数十分


図2.学習中の様子(パソコン画面の一部)

予測に要する時間

1秒以内程度(手元のパソコンを使用)

予測結果


図3.予測結果(横軸はデータ番号,縦軸は予測された車両速度)

図4.実際の計測結果(横軸はデータ番号,縦軸は予測された車両速度)

図4には、図3の予測結果と同一期間の、実際の計測結果を示している。詳細分析は今後を待つが、

が予測できているように判断している

第4章 実習手順

学習(訓練)の開始

  1. 学習(訓練)のデータのダウンロードのため、次のWebページを開く

    https://github.com/corenel/traffic-prediction

  2. 緑色の「Code」ボタンをクリックし, 「Download ZIP」をクリック
  3. .zip ファイルのダウンロードが始まるので確認する.
  4. ダウンロードした .zip ファイルを展開(解凍)する.分かりやすいディレクトリに置く.
    Windows での展開(解凍)に便利な 7-Zip: 別ページ »で説明
  5. 展開(解凍)したディレクトリを確認しておく
  6. 管理者権限コマンドプロンプトを起動する (手順:Windowsキーまたはスタートメニュー → cmd と入力 → 右クリック → 「管理者として実行」)。
  7. cd コマンドで、先ほど<展開(解凍)したディレクトリ>に移動
  8. 確認のため ls コマンドを実行.次のように表示されれば OK.
  9. いまダウンロードしたデータを Python で読み込む
    以下、https://github.com/corenel/traffic-prediction で公開されているオープンソースを一部改変して使用
  10. データを読み込んでみる

    あわせて、いくつかのパッケージも読み込む

    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import json
    from random import uniform
    from datetime import datetime
    import keras
    from utils import data_loader, train_test_split
    
    print('-- Loading Data --')
    test_size = 1728
    X, y = data_loader('data/data_pems_16664.csv')
    x_train, y_train, x_test, y_test = train_test_split(X, y, test_size)
    print('Input shape:', X.shape)
    print('Output shape:', y.shape)
    
  11. モデルの中のニューロンの結合の強さ(重み)のデータファイルを読み込み、 その後、モデルのコンパイルを行う
    print('-- Reading pre-trained model and weights --')
    with open('model/model_3_layer.json') as f:
        json_string = json.load(f)
        model = keras.models.model_from_json(json_string)
    model.load_weights('model/weights_3_layer.h5')
    
    batch_size = 96
    epochs = 100
    out_neurons = 1
    hidden_neurons = 500
    hidden_inner_factor = uniform(0.1, 1.1)
    hidden_neurons_inner = int(hidden_inner_factor * hidden_neurons)
    dropout = uniform(0, 0.5)
    dropout_inner = uniform(0, 1)
    
    model = keras.models.Sequential()
    model.add(keras.layers.LSTM(units=hidden_neurons,
                   input_shape=(x_train.shape[1], x_train.shape[2]),
                   kernel_initializer='uniform',
                   return_sequences=True))
    model.add(keras.layers.Dropout(dropout))
    model.add(keras.layers.LSTM(units=hidden_neurons_inner,
                   return_sequences=True))
    model.add(keras.layers.Dropout(dropout_inner))
    model.add(keras.layers.LSTM(units=hidden_neurons_inner,
                   return_sequences=False))
    model.add(keras.layers.Dropout(dropout_inner))
    model.add(keras.layers.Activation('relu'))
    model.add(keras.layers.Dense(units=out_neurons))
    model.add(keras.layers.Activation('relu'))
    model.compile(loss="mse",
                  optimizer="adam",
                  metrics=['accuracy'])
    
  12. 学習(訓練)

    終わるのを待っていると数時間待ちになる可能性があるので、今日は、ここまで到達したら解散

    Epoch 1/100 から始まって Epoch 100/100 までかかります

    print('-- Training --')
    history = model.fit(x_train,
                        y_train,
                        verbose=1,
                        batch_size=batch_size,
                        epochs=epochs,
                        validation_split=0.1,
                        shuffle=False)
    
  13. 予測し、予測精度を見る
    print('-- Evaluating --')
    eval_loss = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=0)
    print('Evaluate loss: ', eval_loss[0])
    print('Evaluate accuracy: ', eval_loss[1])
    
  14. 予測結果を y_pred に格納.表示.
    print('-- Predicting --')
    y_pred = model.predict(x_test, batch_size=batch_size)
    
  15. 予測結果である y_pred のプロット
    print('-- Plotting Results --')
    plt.style.use('ggplot')
    plt.plot(y_pred, label='Predicted')
    plt.title('Traffic Prediction')
    plt.xlabel('Sample')
    plt.ylabel('Velocity')
    plt.xlim(0, test_size)
    plt.legend()
    plt.show()
    
  16. 正解データのプロット
    print('-- Plotting Results --')
    plt.style.use('ggplot')
    plt.plot(y_test, label='Expected')
    plt.title('Traffic Prediction')
    plt.xlabel('Sample')
    plt.ylabel('Velocity')
    plt.xlim(0, test_size)
    plt.legend()
    plt.show()
    
  17. 学習済みモデルを保存し,モデル構造を画像として出力する
    print('-- Saving results --')
    now = datetime.now().strftime('%Y%m%d-%H%M%S')
    pd.DataFrame(y_pred).to_csv('predict/y_pred_' + now + '.csv')
    pd.DataFrame(y_test).to_csv('predict/y_test_' + now + '.csv')
    model.save('model/model_' + now + '.keras')
    keras.utils.plot_model(model, to_file='img/model.png', show_shapes=True)
    

第5章 応用してみる

  1. データの準備
    演習:

    (1)各自データを準備しなさい

    (2)各自、自分が用意したデータについて、X.csv, y.csv の2つのファイルを作りなさい

    X.csv は要因データ。y.csv は予測したいデータ

    (3)下のように, 1列目・2列目などの列内容と,全体の行数を決めた資料を作る

    ファイル名 X.csv

    • 1列目: 曜日番号 {0, 1, 2, 3, 4, 5, 6}
    • 2列目: 平日か休日か
    • 3列目: 時 0から23
    • 4列目: 分 {0, 5, 10, 15, 20, 25, 30, 35, 40, 45, 50, 55}
    • 全体の行数: 51552行

    ファイル名 y.csv

    • 1列目: 速度
    • 全体の行数: 51552行
  2. いくつかのパッケージを読み込む
    import numpy as np
    import pandas as pd
    import matplotlib.pyplot as plt
    import json
    from random import uniform
    from datetime import datetime
    import keras
    
  3. pwd で、カレントディレクトリを確認
  4. cd で、X.csv, y.csv が置いてあるディレクトリに移動
  5. ls で、X.csv, y.csv があることを確認
  6. データ読みこみ
    print('-- Loading Data --')
    XX = pd.read_csv("X.csv", header=None, names=[1,2,3,4])
    yy = pd.read_csv("y.csv", header=None, names=[1])
    X = XX.to_numpy()
    y = yy.to_numpy()
    print('Input shape:', X.shape)
    print('Output shape:', y.shape)
    

    表示される列数と行数を確認

  7. 個数を確認したら、訓練用データの個数と、検査用データの個数を決める

    ここでは、

    • 全部で 51552 個
    • 訓練用: 51000
    • 検査用: 552
    • 訓練用データと、検査用データに分ける
    x_train = X[0: 51000,:]
    y_train = y[0: 51000]
    x_test = X[51000:  51000 + 552,:]
    y_test = y[51000:  51000 + 552]
    x_train = x_train[:,np.newaxis,:]
    x_test = x_test[:,np.newaxis,:]
    
  8. モデルの中のニューロンの結合の強さ(重み)のデータファイルを読み込み、 その後、モデルのコンパイルを行う
    batch_size = 96
    epochs = 100
    out_neurons = 1
    hidden_neurons = 500
    hidden_inner_factor = uniform(0.1, 1.1)
    hidden_neurons_inner = int(hidden_inner_factor * hidden_neurons)
    dropout = uniform(0, 0.5)
    dropout_inner = uniform(0, 1)
    
    model = keras.models.Sequential()
    model.add(keras.layers.LSTM(units=hidden_neurons,
                   input_shape=(x_train.shape[1], x_train.shape[2]),
                   kernel_initializer='uniform',
                   return_sequences=True))
    model.add(keras.layers.Dropout(dropout))
    model.add(keras.layers.LSTM(units=hidden_neurons_inner,
                   return_sequences=True))
    model.add(keras.layers.Dropout(dropout_inner))
    model.add(keras.layers.LSTM(units=hidden_neurons_inner,
                   return_sequences=False))
    model.add(keras.layers.Dropout(dropout_inner))
    model.add(keras.layers.Activation('relu'))
    model.add(keras.layers.Dense(units=out_neurons))
    model.add(keras.layers.Activation('relu'))
    model.compile(loss="mse",
                  optimizer="adam",
                  metrics=['accuracy'])
    
  9. 学習(訓練)

    終わるのを待っていると数時間待ちになる可能性があるので、今日は、ここまで到達したら解散

    Epoch 1/100 から始まって Epoch 100/100 までかかります

    print('-- Training --')
    history = model.fit(x_train,
                        y_train,
                        verbose=1,
                        batch_size=batch_size,
                        epochs=epochs,
                        validation_split=0.1,
                        shuffle=False)
    
  10. 予測し、予測精度を見る
    print('-- Evaluating --')
    eval_loss = model.evaluate(x_test, y_test, batch_size=batch_size, verbose=0)
    print('Evaluate loss: ', eval_loss[0])
    print('Evaluate accuracy: ', eval_loss[1])
    
  11. 予測結果を y_pred に格納.表示.
    print('-- Predicting --')
    y_pred = model.predict(x_test, batch_size=batch_size)
    
  12. 予測結果である y_pred のプロット
    print('-- Plotting Results --')
    plt.style.use('ggplot')
    plt.plot(y_pred, label='Predicted')
    plt.title('Traffic Prediction')
    plt.xlabel('Sample')
    plt.ylabel('Velocity')
    plt.legend()
    plt.show()
    
  13. 正解データのプロット
    print('-- Plotting Results --')
    plt.style.use('ggplot')
    plt.plot(y_test, label='Expected')
    plt.title('Traffic Prediction')
    plt.xlabel('Sample')
    plt.ylabel('Velocity')
    plt.legend()
    plt.show()
    

    精度が良くなくても気にしないでください (プログラムのデバッグを将来行う可能性がある)