先日ボートレースの3連単予想を行うサイトを公開しました。
形にするまでにかなり苦労しました。
以前に気温の予測を行うサイトを公開しましたが、そのときにも一通りの方法を記事にしました。
今回もそのときに書いた通りに処理していけば問題がないと思っていましたが、色々と手詰まりするところがありましたので、苦労した点と便利なことなどを記事にしたいと思います。
ボートレース予想の機械学習の中身についてはまたの機会に話すよ~
機械学習サイト公開までの流れ
今回のサイトを公開するまでのフローを簡単に示しておきます。
機械学習にはKerasを用いました。この他にもWebサイトで機械学習のモデルを使う方法はあるかもしれませんが、前回と同様にこのような流れで行いました。ですので、今回はこのフローの中で苦労した点や便利なことなどを記します。
AnacondaでPythonの仮想環境の構築
最も苦労したのはPythonと用いるライブラリのバージョンとTensorFlowjsのバージョンがうまく噛み合わず思った処理が行われないことでした。
以前は自分のパソコンに直接Pythonをインストールし、ライブラリをインストールして、噛み合わなければアンインストールして、違うバージョンをダウンロードして、と結構めんどくさかったのですが、Anacondaを使えば仮想環境で複数のいろんな環境が構築できます。しかもインストールも簡単です。Anaconda自体のインストールはこちらに参考サイトを貼っておきます。
まず、以下の通り仮想環境の名前と入れたいPythonのバージョンを入れます。
1 2 3 |
#Anacondaプロンプト (base)>conda create -n py35 python=3.5 #conda create -n 仮想環境の名前 Pythonのバージョン |
作成した仮想環境に入るためには以下のようにします。仮想環境に入ると左側が(仮想環境の名前)になります。
1 2 3 4 |
#Anacondaプロンプト (base)>activate py35 #activate 仮想環境の名前 (py35)> |
あとは入った仮想環境に好きなライブラリを入れれば環境が構築できます。バージョンの指定がある場合はバージョンを指定します。指定しなければ最新バージョンになると思います。
1 2 3 |
#Anacondaプロンプト (py35)>pip install tensorflow==1.14.0 #pip insatall ライブラリ(==バージョン) |
このあたりは普段のPythonのインストールアンインストールと変わらないと思いますので、特に難しくはないと思います。
仮想環境から出る方法と、仮想環境を削除する方法は以下の通りです。
1 2 3 4 5 6 |
#Anacondaプロンプト (py35)>deactivate (base)> (base)>conda remove -n py35 --all #conda remode -n 仮想環境の名前 -all |
これでいくらでも仮想環境を構築したり、削除したりできますね!私も何回もこれをやる羽目になりました。
結局私がうまく行ったPythonの環境を下に示しておきますので良ければ参考にされてください。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
#Anacondaプロンプト (py35)>pip freeze > list.txt #list.txtの中身 name: py35 channels: - defaults dependencies: - certifi=2018.8.24=py35_1 - python=3.5.6=he025d50_0 - setuptools=40.2.0=py35_0 - vc=14.1=h0510ff6_4 - vs2015_runtime=14.16.27012=hf0eaf9b_1 - wincertstore=0.2=py35hfebbdb8_0 - pip: - absl-py==0.9.0 - astor==0.8.1 - bleach==1.5.0 - cycler==0.10.0 - gast==0.3.2 - google-pasta==0.1.8 - grpcio==1.26.0 - h5py==2.8.0 - html5lib==0.9999999 - joblib==0.14.1 - keras==2.2.4 - keras-applications==1.0.8 - keras-preprocessing==1.1.0 - kiwisolver==1.1.0 - markdown==3.1.1 - matplotlib==1.5.1 - numpy==1.16.4 - pandas==0.25.3 - pip==19.3.1 - protobuf==3.11.2 - pyparsing==2.4.6 - python-dateutil==2.8.1 - pytz==2019.3 - pyyaml==5.3 - scikit-learn==0.22 - scipy==1.4.1 - six==1.11.0 - sklearn==0.0 - tensorboard==1.14.0 - tensorflow==1.14.0 - tensorflow-estimator==1.14.0 - tensorflow-hub==0.5.0 - tensorflowjs==1.2.6 - termcolor==1.1.0 - werkzeug==0.16.0 - wheel==0.29.0 - wrapt==1.11.2 #HTMLの中のtensorflowjsの記述 <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/@tensorflow/tfjs@0.13.5"></script> |
文字の全角と半角のミス
これはプログラミング初心者にありがち(私だけ?)なミスですが、本当に5時間くらい迷いました。
こちらを見てください。HTMLを編集している場面です。
322行の「“radio”」の「“」が「”」になっています。ようはダブルクオーテーションマークが全角になっていました。
VScodeで編集しているのですが、全角と半角の違いわかりにくくないですか?なにか方法があるのでしょうか。私はこれ以降検索で「”」を置換するようにしています。
TensorFlowjsで役立つJavascriptの関数
機械学習をTensorFlowjsで行うときに役立つJavascriptの関数を紹介します。
配列を結合するconcat
2つ以上の配列を結合するときに使います。学習モデルに代入する配列を作るときに使いました。
1 2 3 4 5 6 7 8 |
#Javascript var z1 = [1,0,0] var z2 = [0,1,0] var z2 = [0,0,1] var zz1 = z1.concat(z2, z3) console.log(zz1) #実行結果 1,0,0,0,1,0,0,0,1 |
配列内の最大値のインデックスを抽出する indexOf(Math.max.apply ())
配列の中の最大値をインデックス(要素の番号)を抽出します。モデルに代入した結果を処理するときに使いました。
1 2 3 4 5 6 |
#Javascript var a = [1,2,0,3,7] b = a.indexOf(Math.max.apply(null,a)) console.log(b) #実行結果 4 |
数値型を文字列型に変換するString
変数の型について、数値を文字列に変換します。最後モデル計算結果を出力するときに数値を文字列に変換しました。
1 2 3 4 5 6 |
#Javascript var res1 = 1; var res2 = String(res1); //引数に数値を代入 console.log( typeof res2 ); #実行結果 string |
ちなみに文字列から数値に変換する場合はNumberを使います。
まとめ
今回はTensorFlowjsで行った機械学習のサイトを作成するにあたって苦労した点をまとめてみました。
プログラミングも難しいですが、環境の構築もなかなか難しいですね。色々実際にやってみると勉強になります。
今後も色々な機械学習に挑戦してみたいと思います。
コメント