Web Application: 第8回 Djangoやります

こんにちは Keita_Nakamori(´・ω・`)です。

さて、前回まででTensor Flow を使ったスクリプトを書いてきましたが、これをwebアプリとしてアクセスできるようにDjangoを組み込んでいきます。

django公式サイト

djangoインストール方法

$ pip install Django

django-2.2.5 が入りました

プロジェクトを作成する

mysiteというプロジェクトを作ります

 

$ django-admin startproject mysite

mysiteフォルダの下層には同じ名称のフォルダでmysiteが生成され、さらにmange.pyという管理用のpythonファイルが生成されます。

 

  • mysite/
    • manage.py
    • mysite/
      • __init__.py
      • settings.py
      • urls.py wsgi.py

開発用サーバーを起動する

$ python manage.py runserver

とコマンドプロンプトに打つと

と出るので、http://127.0.0.1:8000/がサーバーとして動き出します。

実際にブラウザのURLバーにこれをコピペすると、インストールが完了しましたとお祝いの言葉を頂戴できます。

強制終了は control+c です。

 

Web Application: 第7回 VGG16を使った転移学習

Keita_Nakamoriです。TensorFlowに疲れてきました。

早くwebアプリの部分にいきたい・・・。

今回は、転移学習を試してみます。学習済みのCNNであるVGG16を使って、その後ろに中間層と全結合層をマニュアルで挿入して最終的にsoftmax関数を通して結果を出力します。

中間層は256node、全結合層は2クラスしかないので2nodeです。

スクリプト:VGG16_trans.py

前回まで、import keras をして kerasを使用していましたが、今どきはTensorFlowのクラスとして存在しているので使ってみます。

というのもfrom keras.models import Modelでエラーが出てしまいどうしようもないので調べていたら見つけました。

構造

スクリプト内の# モデルのサマリーを確認する model.summary() までを実行するとニューラルネットワークの構造が確認できます。

最後に、sequential (Sequential) (None, 2) が新しく生成されました。

結果

VGG16層 全結合2層 17エポックまでやってみましたが、数十分かかってしまいました。流石のディープさです。

しかし、結果は素晴らしいい。トレーニング100% テスト99%の精度。

そして、モデルファイルである192MB のvgg16_trans.h5 ファイルも上手く生成できていました。

スクリプト:vgg16_predict.py

では、転移学習済みのvgg16_trans.h5モデルをロードして、Anacondaプロンプトからサンプル画像を入力することによってcar なのか motorbikeなのか予測してみましょう。

予測

1.車の画像データの一つをcar1.jpgにリネームしてdjangoaiフォルダ直下に移動します。

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python vgg16_predict.py car1.jpg

結果:car 100

2.次にバイクの画像データの一つをbike1.jpgにリネームしてdjangoaiフォルダ直下に移動します。

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python vgg16_predict.py motorbike1.jpg

結果:motorbike 100

3.試しにビキニ画像データを入力してみましたが・・・バイク100%になりました。(笑)

次回

Web Application: 第8回 はじめてのwebアプリ

Web Application: 第6回 VGG16を構築する

VGG16をやってみます。

オックスフォード大学のVisual Geometry Groupが作った、畳み込み13層+全結合3層の 合計16層のニューラルネットワークです。

VGG16用の入力データを作成

VGG16の入力データの画像サイズは 224 x 224 である必要がありますので generate_inputdata.pyを改造して224×224のnpyデータを生成するgenerate_inputdata_224.pyを作りましょう。

また、それだと元々150角サイズが224角サイズになるわけですから、容量が増えてしまいます。(実際に600MBから1300MBに増えました。)

そこで、このスクリプトでは正規化するのをやめて、浮動小数点が発生するのを防ぎ容量を落とします。

代わりに、VGG16をやる直前に正規化を行う方針でいきます。

スクリプト:generate_inputdata_224.py

変更した部分は

  • 入力サイズ変更:image_size = 224
  • 保存名を変更:np.save(‘./image_files_224.npy’, xy)
  • 標準化中止 :data = data / 255.0 の行をコメントアウト

転移学習のモデル作成

では、データができたところでVGG16モデルを作成しましょう。

モジュール追加:from keras.applications import VGG16

ロードデータ名変更;

  • X_train, X_test, y_train, y_test = np.load(‘./image_files_224.npy’, allow_pickle=True)

正規化操作の追加:

  • X_train = X_train.astype(‘float’) / 255.0
  • X_test = X_train.astype(‘float’) / 255.0

モデル定義の変更

  •  model = VGG16( weights=’imagenet’, include_top=False, input_shape=(image_size,image_size, 3) )
  • print(‘Model loaded’)
  • model.summary()

結果

input_1 (InputLayer) (None, 224, 224, 3)について

1枚の224 x 224 サイズの画像データにつき、 RGBの3枚に分解されたデータが入力データとし入ります。

まだ何枚のデータが入ってくるかわかりませんのでNoneになっています。

畳み込み2回 プーリング1回 畳み込み2回 プーリング1回 畳み込み3回・・・、で 16層あるのだそうですがどういう数え方をしたら16になるかは理解できていません・・・。

ひとまず、できていました。このあと、全結合層を後ろに追加していくことになります。それは次回!

次回

Web Application: 第7回 VGG16を使った転移学習

 

Web Application: 第5回 npyデータからCNN

こんにちは Keita_Nakamori(´・ω・`)です。

前回はTensor Flowにインプットするnpyデータを作成しました。

今回はTensorflowとKerasで畳み込みニューラルネットワークを構築して、訓練・評価してみます。

keras公式ページのSequential-model-guideを参考にします。

スクリプト:cnn_test.py

VGG-likeなconvnet を参考に動作を確認していきます。

実行

では Anacondaプロンプトから $ conda info -e で仮想環境リストを確認して

djangoaiが存在することを確認したら、$ conda activate djangoai して仮想環境に入ります。

カレントディレクトリをcnn_test.pyがある場所まで移動して、実行します。

結果

エポック数30回やった結果、精度はacc: 0.99まで向上しましたが、検証データではTest accuracy:0.81までしか出ていません。おそらく過学習になっていると思われます。まだまだ改善の余地ありです。

オプティマイザーを変更

SGDからAdamに切り替えてみました。大きく悪化しました。(笑)

可視化にチャレンジ

djangoai仮想環境内で$pip install matplotlib します。

matplotlib-3.1.1 が入りました。

下記コードを最後に追加しました。オプティマイザーはSGDに戻しました。
横軸にエポック数 縦軸に損失です。 きれいな右肩下がりです。

次回

Web Application: 第6回 はじめてのwebアプリ

Web Application: 第4回 画像データをnpyデータに変換

こんにちはKeita_Nakamori(´・ω・`)です。

前回flickrから取得した画像データをTensor Flowが読めるように数値データに変換していきます。

必要なモジュールをインストール

  • pip install Pillow :
  • pip install scikit-learn :

Pillow-6.1.0とscikit-learn-0.21.3が入りました

スクリプト:generate_inputdata.py

実行しましょう

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python generate_inputdata.py

フォルダを見ると新しく「image_files.npy」  609,516,317 (609MB?)のデータが生成されました。

次回

Web Application: 第5回 はじめてのwebアプリ

 

 

Web Application: 第3回 flickr(フリッカー)で画像収集

こんにちはKeita_Nakamori(´・ω・`)。

flickrのサイトから画像を引っ張ってきてTensorFlowに流すサンプルデータにしようと思います。

登録とAPIキーの取得

トップページの一番下のDeveloperをおしてAPIキーのリスエストを行います。まずはメルアドの登録などをやってサインアップします。

そうすると APIキーのリスエストができるようになりますので、APIキーを取得します。

flickrapiのインストール

flickrのapiにアクセスするためのモジュールflickrapiをインストールします。

VSコードのコマンドプロンプト内で、

PS C:\Users\keita\anaconda_projects\djangoai> pip install flickrapi

とすると、flickrapi-2.4.0 が入りました。が、これは使えません。

Anaconda プロンプトでconda activate djangoで仮想環境にはいり(djangoai) C:\Users\keita>pip install flickrapi します。

flickrapi-2.4.0が入りました。

Imageをdownloadするスクリプト

ではflickrapiを使ってimageを取得していきましょう。djangoaiフォルダ内へ新たにdownload_images.pyを作成します。

Imageを保存するフォルダを作成

車とバイクの画像をいれるフォルダを作っておきます。

  • (djangoai) C:\Users\keita\anaconda_projects\djangoai>mkdir car
  • (djangoai) C:\Users\keita\anaconda_projects\djangoai>mkdir motorbike

スクリプトを実行する。

仮想環境(conda activate djangoai)に入って、まずはモーターバイクの画像を収集しましょう。

(djangoai) C:\Users\keita\anaconda_projects\djangoai>python download_images.py motorbike

じゃんじゃん入ってきました。

次回

Web Application: 第4回 はじめてのwebアプリ

 

Web Application: 第2回 VS codeのインストールとセッティング

こんにちは Keita_Nakamori(´・ω・`) です。

前回はTensor Flowの試運転に成功しました。

今後アプリ開発をやっていく上でVSコードを使っていこうと思います。PyCharmよさようなら・・・。

VSコードのインストール

https://code.visualstudio.com/でWindows版を選択してインストーラーをダウンロードした後、実行します。

Pathは通しておきましょう。再起動後、画面左側にあるExtentionsボタンをおして、検索窓でpythonと入力して、pythonをインストールしましょう。

データ収集プログラムを作ってみる

では、左上のエクスプローラーボタンを押して、第1回目に作成した keita>Anaconda_projects>djangoaiフォルダを選択しましょう。

Jupyter Notebookで作成した tensorflow_test.ipynbが入っています。

練習のためHello World をやってみましょう

djangoaiフォルダの右側にNew Fileボタンを押してhello_world.pyを作ります。

右側のウィンドウにスクリプトが書けるように成りますのでテキトーにhello worldをプリント出力しましょう。

実行方法

どのPythonバージョンを使用するかの選択

メニュー>View>Command Pallet>Select interpriterで

第1回目で作成した仮想環境であるdjangoai:condaのPython3.7.4 64-bitを選択します。

画面の下に青い帯で変更されたことが確認できます。

ついでにpylintが入っていませんようと警告がでますのでInstallしましょう。condaかpipか聞かれますのでcondaにしてみました。

実行

スクリプト窓内で右クリックをしてrun python file in terminal します。

するとコマンドプロンプト窓内で実行されます。

次回

Web Application: 第3回 はじめてのwebアプリ

 

 

Web Application: 第1回 Anaconda3のインストールと仮想環境構築

こんにちは、Keita_Nakamori(´・ω・`)です。

webアプリというものを少し作ってみたいと思います。

  • 言語                     :Python
  • 機械学習             :TensorFlow
  • フレームワーク:Django
  • データベース      : MySQL
  • サーバー             :Xserver

あたりを使っていきます。

Anacondaのインストール

Anaconda 2019.07 for Windows Installerをインストールしました。

PathとRegister 両方ともチェックをいれました。

仮想環境djangoaiを作って、ついでにtensorflowを入れます。

Anaconda プロンプトを開いて、

(base) C:\Users\keita>conda create -n djangoai tensorflow

-nってなんでしょう。

# To activate this environment, use
#
# $ conda activate djangoai
#
# To deactivate an active environment, use
#
# $ conda deactivate

ということなので、

$ conda activate djangoai

して使ってみます。モジュール群を確認してみましょう。

(djangoai) C:\Users\keita>pip list

Package Version
——————– ———
absl-py 0.7.1
astor 0.8.0
certifi 2019.6.16
gast 0.2.2
grpcio 1.16.1
h5py 2.9.0
Keras-Applications 1.0.8
Keras-Preprocessing 1.1.0
Markdown 3.1.1
mkl-fft 1.0.14
mkl-random 1.0.2
mkl-service 2.3.0
numpy 1.16.5
pip 19.2.2
protobuf 3.8.0
pyreadline 2.1
scipy 1.3.1
setuptools 41.0.1
six 1.12.0
tensorboard 1.14.0
tensorflow 1.14.0
tensorflow-estimator 1.14.0
termcolor 1.1.0
Werkzeug 0.15.5
wheel 0.33.4
wincertstore 0.2
wrapt 1.11.2

確かにtensorflow 1.14.0が入っていますね。OKです。

Kerasも自動的に入ってきていますね。

仮想環境を抜けましょう。

(djangoai) C:\Users\keita>conda deactivate

(base) C:\Users\keita>

頭の(djangoai)が(base)に切り替わり仮想環境を抜けたことがわかります。

Anaconda Navigator

次に、Anaconda Navigatorを使ってみます。

Anaconda Navigatorを立ち上げて、Application on  (base)にの部分をdjangoaiに切り替えます。このときまだJupyter NotebookはインストールされていませんのでInstallボタンを押します。完了したらLaunchにボタンが変わりますのでLaunchします。

これでいつものJupyter Notebookが起動しますが。

今回作っていくdjangoaiアプリはユーザーフォルダkeitaの下にanaconda_projectフォルダを作って、その下djangoaiフォルダを作って、その中にスクリプトを入れていきます。

では、Jupyter Notebookを起動したらanaconda_project > djangoフォルダに移動して新規にNewボタン > Python3 しましょう。

TensorFlowの試運転

初心者向けのテストスクリプトがありましたので、実行してみます。

サンプルデータを取得します。

訓練しやすいようにデータを加工します

機械学習モデルと訓練と評価

はい、ちゃんと動きました。

次回予告

Web Application: 第2回 はじめてのwebアプリ

 

機械学習:sklearnで30日間の株価予測をやってみる

前回、pandas_datareaderで株価を取得してpandasで統計処理してmatplotlibで可視化するということをやりました。

今回は機械学習をやっていきましょう。

理屈:

ある1日の株価データのうち、High Low Open Close Volume AdjClose の6データと、さらにOpen Close から算出されるエンジニアリングデータ change を含めて、計7つのデータを入力データとします。(ここまでは前回の話)

その正解データとして、30日後の終値Closeを定義します。

数学モデルは線形回帰モデルを使います。複数の入力データがあるので重回帰分析と呼ばれています。

  • y : 正解データ
  • x1~x7:入力データ
  • a1~a7:回帰パラメータ 偏回帰係数とも呼ばれます
  • error:入力データと正解データの差(誤差) 数学モデル上では切片に相当します

y = (a1*x1) + (a2*x2) + (a3*x3) + (a4*x4) + (a5*x5) + (a6*x6) + (a7*x7) + ierror

たくさんの入力データ(1日1データ)をこのモデルに入力して、正解データと入力データの Σ(ai*xi) の部分との差 errorがトータルでできるだけ小さくなるように、最小二乗法を使って ai を決めていきます。

その結果、予測モデルが確定しますので、30日前から現在までの入力データを代入すれば、それぞれの日に対して30日後の終値が予測されます。

 

# 終値を30日間前にずらしたcolumnを作成します。

ずらされた部分はNaNという値なしの状態で埋められます。

# 入力データを作成します

# 正解データを定義します

# データを訓練用と検証用に分割して、学習モデルを選択して、学習させて、検証します

精度:92% って出ています。(´・ω・`)

# 過去30日間の入力データ predict_data から、それぞれ30日後の未来終値データ predicted_dataを予測します。

# 可視化:予測結果

後ろの黄色いやつが未来の30日間の株価予想です。

Linear Regression でも まあまあそれっぽい答えは帰ってきますね。

機械学習:Scikit-Learn ボストンデータを良く眺めてみる。ついでにKNNの回帰をやる。

Keita_Nakamoriです。

今回は、ボストンの住宅のデータを眺めて行こうと思います。

ついでにKNNの回帰を試していこうと思います。(前回はKNNの分類でした)

モジュール

ボストンデータをロード

どういうことに使えるでしょうか?

  1. このデータから回帰を行う(学習する)
  2. 以降、”特徴量を持つ新規データ”が入ってきたら、その住宅の価格を予測する。理論価格と呼ぶ
  3. 理論価格より、新規データの価格が10%安ければ買いの判断をする

どんな機械学習アルゴリズムが良いでしょうか

多次元の回帰系ですから、KNN-Regressorをやってみましょう。 だめだったら他のやつを探してみます。

  • data とtargetの形を確認しましょう
  • 訓練用データと検証用データに分割しましょう

特徴量について featrue_namesを確認しましょう

英語を日本語へ翻訳する方法

前述のようなドキュメントを調べるとき、対象とする分野、業界の用語が列挙されると、そこそこ英語ができても単語の意味がわかりません。

そんなときは逆にチャンスで、ドキュメントをまるごと、google翻訳にかけると、専門用語を英語と日本語で一気に覚えることができます。

私は常に躊躇することなくgoogle翻訳します。

念の為

#アンパックの順番を良く間違うので念の為確認

#データフレーム化してデータを眺めてみる

スキャッターマトリクスを眺めてみる

今回もデカイです。

訓練開始

一瞬過ぎて何事も起こってないようですが、ちゃんと計算できています

予測

スクリーニングしてみる

20%以上安い物件の数

22件あるんですね。

この22件について、実際に不動産の知識を持って調査すると良いのではないでしょうか。

課題:精度の算出 と 可視化

精度を検証しようとknn.score(X_test,y_test)したところ、0.4616380924610112 と出ましたが、これは一体なんでしょうw

分類と違って、回帰ですから、%ってわけでもないですし・・・ あとで、もう少し考えてみましょう。今は保留。

また、可視化については、回帰ですから、回帰直線みたいなのを引きたいのですが、このような高次元に対しての回帰直線はどのように書いたら良いのでしょうか。今後の課題といたします。

以上、でした。