2018年2月28日水曜日

iteration と epoch

「H2Oで繰り返し回数を指定できました」と、後輩君。

「繰り返し回数」と聞き、何か行列の解法が必要だったか?と思ったのですが、epoch 数のことでした。下手に日本語にすると何を指しているのかわからなくなります。というか、epoch 数指定しないとダメでしょ。

と言いつつ、iteration と epoch の関係も忘れかけていたので整理。
例えば、データ件数 400 、ミニバッチサイズ 10 だと、40 iterations で 1 epochになります。

基本は損失関数の値と epoch 数のグラフにて、validation で最低になったあたりを採用しするようです。epoch 数が多すぎると過学習(過剰適合)となり、損失関数の値が上昇します。この手前でトレーニングデータでの学習を止めることになります。自動で止めることもできるようですが、挙動を見ていたほうが安心ですね。
Grid Search は flow で見当たりません。R か Python のコードはありますが、扱えないのでしょうか?

たまに使わないと、ダメですね。忘れないように使っていきましょう。


********************************
20180301
flow にもありました。目前に。なんと便利な。
https://github.com/h2oai/h2o-3/blob/master/h2o-docs/src/product/tutorials/random%20hyperparmeter%20search%20and%20roadmap.md


2018年2月25日日曜日

Deep Autoencoders

わからないまま寝かせていた AutoEncoder。

H2O の DeepLearningBooklet に、心電図の異常を検知するサンプルコード(R, Python)が入っていました。これ、シンプルでわかりやすいですね。

早速、動かしてみました。
損失関数として平均2乗誤差を用い、その値で異常を判別するようです。
結果は、後付けの3行だけきちんと誤差が大きくなっており、anomaly を検知できています。

R
Reconstruction.MSE
1          0.13085106
2          0.12570196
3          0.13255261
4          0.24606676
5          0.17121093
6          0.11661826
7          0.08483445
8          0.05173467
9          0.06877591
10         0.07171131
11         0.06153831
12         0.05756542
13         0.08888413
14         0.13048295
15         0.17475838
16         0.14830372
17         0.08939488
18         0.08795938
19         0.12276107
20         0.18216751
21         4.20185146
22        10.74289732
23         8.63992039



Python
Reconstruction.MSE
0.13300766148709225
0.1340553663250225
0.14216244835895137
0.26900527031422133
0.18108523873697785
0.1397391203015472
0.11732691621742322
0.07074293797762314
0.08611142459668913
0.08028534762964896
0.06783343065028946
0.07299167554971489
0.10603069145595591
0.14973342730955522
0.19851861019910494
0.16039747123615652
0.09621980071801449
0.1022931414569785
0.1267676964619905
0.2353023143453763
4.383158140645624
10.755036687539317
8.69490793593216


時系列データを扱えるところが強みですね。
例えば、道路の空洞調査では地中レーダの替わりに、ロードノイズを使えるかもしれません。実現すると、技術的にもコスト的にもハードルが下がりますね。

要求精度にもよりますが、時系列データから異常を検知できるツールとして、様々な分野で利用可能性を有しているように見えました。


***************************
20180228追記
以前試したデータにてリベンジを図りましたが、返り討ち。
ま、ほとんど変わらないコードでしたので当然でしょうか。
いずれ何とかしたいですね。
https://phreeqc.blogspot.jp/2017/11/autoencoder.html

install H20 in Python & R

Open-source machine learning の H2O を最新版にアップしました。
以下、サイトのコピペ。備忘録です。
まずはR。VS のプロジェクトからコマンドを打ち込んだところ、VS 再起動後に有効になりました。

Use H2O directly from R

Copy and paste these commands into R one line at a time:
# The following two commands remove any previously installed H2O packages for R.
if ("package:h2o" %in% search()) { detach("package:h2o", unload=TRUE) }
if ("h2o" %in% rownames(installed.packages())) { remove.packages("h2o") }

# Next, we download packages that H2O depends on.
pkgs <- c("RCurl","jsonlite")
for (pkg in pkgs) {
if (! (pkg %in% rownames(installed.packages()))) { install.packages(pkg) }
}

# Now we download, install and initialize the H2O package for R.
install.packages("h2o", type="source", repos="http://h2o-release.s3.amazonaws.com/h2o/rel-wolpert/2/R")

# Finally, let's load H2O and start up an H2O cluster
library(h2o)
h2o.init()


python はコマンドプロンプトから pip でOK。

Use H2O directly from Python

1. Prerequisite: Python 2.7.x, 3.5.x, or 3.6.x
2. Install dependencies (prepending with `sudo` if needed):

pip install requests
pip install tabulate
pip install scikit-learn
pip install colorama
pip install future
At the command line, copy and paste these commands one line at a time:

# The following command removes the H2O module for Python.
pip uninstall h2o
# Next, use pip to install this version of the H2O Python module.
pip install http://h2o-release.s3.amazonaws.com/h2o/rel-wolpert/2/Python/h2o-3.18.0.2-py2.py3-none-any.whl

2018年2月20日火曜日

3Dモデルを利用した説明

お客様側の担当者から前日に依頼がありました。
「明日、executives を連れて行くので結果の概要を説明してほしい」

急でしたが、ボーリング掘進毎に Civil3D+GEORAMA→InfraWorks のモデルを修正して毎日報告していましたので、それを利用することにしました。TV をノート PC に接続し、協議机の脇においておけば、準備完了。あとは写真、断面、平面程度の配布で十分です。

実際に TV に 3D モデルを映して動かしながら説明しました。
動画を用いない LIVE は初めてでしたが、これ、便利ですね。いつもは皆さんが資料のどこを見ているか確認しながら説明を進めるのですが、皆 TV に注視されていますので、そこに注意を払う必要がありません。皆が同じ映像を見ているという点で、参加者の意識が統一されており進行しやすいと感じました。
TV ですからプロジェクターより色濃く、艶良く、綺麗に見える点も良いですね。
また、3D モデルを動かしながら説明できるため、感覚的な話も理解を得やすいと感じました。社内の executives や設計担当者にも好評でした。

3Dモデル、今更ながら説明時の利点は多いと考えます。
積極的に利用していきましょう。

2018年2月19日月曜日

SNAP 6.0

esa の SNAP が Ver.6 にアップされました。

今度のVer.では ALOS2 のデータを正しく扱うことが可能か?と思い試してみました。
結論としてはダメでしたが、以下に手順を備忘録として残しておきます。次期 Ver. に期待しましょう。

ALOS2 を ZIP のまま file-open で開くことはできるが、2枚以上は開くことができない。
→展開してから import で読み込めば OK。

ALOS2 ファイルを直接 coregistration するとエラー。
→ import した ALOS2 を BEAM 形式で保存。それを開いて coregistration。(今回は18時間くらいで complete。)

Interferogram, filterは動くが、結果はダメ。
→?


2018年2月18日日曜日

極小アレイ+小アレイ

極小アレイに小アレイを組み合わせてみました。

今回は水平の堆積構造で、教科書的な地盤です。前回と異なり、急傾斜や地中構造物はありません。

得られたデータを BIDO で計算し、描画してみました。
まずは gnuplot での表示。
①\bin\gnpltbin¥wgnuplot.exe
②open(all files)で BIDO の結果フォルダ内の \RESULT\plot.gnplt
③paused OK を押して rayleigh 波を表示
④Axes-xrange 等変更し、paused cancel
⑤Replot を押すと、指定した範囲が拡大して描画される

鉛直動を見ると、SPAC、H0 を除けば大差ない分散曲線が得られています。
代表として CCA の結果を使って速度構造を計算してみました。

結果は良好。
極小アレイが4~15m、小アレイで10~30m程度の結果が得られています。重複部は似たような値でした。
両者の同じ周波数での速度は平均して合成。GAで逆解析をかけて速度構造を推定し、さらにそれをN値に変換してみました。付近の既往ボーリングと比べると、まあこの程度でしょうというレベル。大きく外れているわけでもなく、ばっちり合っているわけでもない。傾向は得られています。ま、物理探査ですので。

小アレイの v はやや高周波側まできれいに出ていました。速度構造にすると6~40m程度。CCA の結果と比べると、やや速度値が異なりますが、こちらの方が既往ボーリングとあっています。面白いですね。

今回の結果を見る限り、地盤が水平構造であれば目的を達せるという、教科書のトレースは出来ました。探査深度に応じてアレー半径を選ぶことも教科書通りです(極小アレーでは期待したほど深部が得られず残念でしたが)。
今後は少しずつ条件を変化させて、データを集めてみましょう。

高精度粒子法

続きです。

高精度粒子法にも種類が多くあるようです。
(FEM でもそうでしたが、計算の安定化に係る話題はさすがに領域外のように思えて、いささか興味を失います。)

「3.2 Poisson方程式の高精度生成項」に安定化ISPHにかかわる解説がありました。案外、高精度化の初歩のようですね。2010年までの文献をベースに説明されていますので、既に研究段階は脱しているように思えます。心も頭もついていきませんでしたが、使用するツールに組み込まれている場合には理解が必要でしょう。

弾塑性モデルへの適用についても4章の最後に記載がありました。
文献を追いましたが、塑性化のスイッチに第2不変量を利用する、粒子間の切れた箇所は DEM と同様の扱いに切り替える、などと書かれていました。実際の現象と少しイメージが異なるため、まだ研究段階にあると思われます。が、トリガーを使って計算内容を変更している点は参考になりました。

こうしてみると、粒子法はやはり流体のものですね。現状では土砂を扱う分野ではメリットの少ないことが理解できました。
今後の発展に期待しましょう。