Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Mxnetで回帰 #TokyoR 53th

4,120 views

Published on

第53回 Tokyo.R LT資料です。

Published in: Data & Analytics
  • Be the first to comment

Mxnetで回帰 #TokyoR 53th

  1. 1. MXNetで回帰 Michael A. Nielsen, "Neural Networks and Deep Learning", Determina<on Press, 2015 This work is licensed under a Crea<ve Commons AEribu<on-NonCommercial 3.0 Unported License. Tokyo.R #53@渋谷ファーストプレイス, TwiEer: @siero5335
  2. 2. 自己紹介 TwiEer ID: @siero5335 仕事: 化学物質曝露影響の解析    化学分析法の開発    専門: 環境化学、分析化学 興味: 生理活性物質の一斉分析    関連分野へのデータ解析応用 hoxo-m 2
  3. 3. MXNet ? みんな大好きdmlc製のDeep learning用ライブラリ いろんな言語に対応, GPUも利用可 早い(らしい) 引用: hEps://github.com/dmlc/mxnet R-packageについてのドキュメントは最近移動した模様 hEp://mxnet.readthedocs.org/en/latest/packages/r/index.html
  4. 4. hEp://tjo.hatenablog.com/entry/2016/03/29/180000 hEp://keiku.hatenablog.jp/entry/2016/03/31/172456 MXNetについての記事が続々と 畳み込みニューラルネットやKaggle Dataを使った実践など
  5. 5. hEp://tjo.hatenablog.com/entry/2016/03/29/180000 hEp://keiku.hatenablog.jp/entry/2016/03/31/172456 MXNetについての記事が続々と 畳み込みニューラルネットやKaggle Dataを使った実践など 上記は判別の話だが自分がよく使うのは回帰なので調べてみた
  6. 6. MXNetの線形回帰: データ読み込み・定義 library(mlbench) library(mxnet) #データ分割・読み込み data(BostonHousing, package="mlbench") train.ind = seq(1, 506, 3) train.x = data.matrix(BostonHousing[train.ind, -14]) train.y = BostonHousing[train.ind, 14] test.x = data.matrix(BostonHousing[-train.ind, -14]) test.y = BostonHousing[-train.ind, 14] # 入力データの定義 data <- mx.symbol.Variable("data”) 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  7. 7. #結合形式, data設定, 隠れ層の数指定 fc1 <- mx.symbol.FullyConnected(data, num_hidden=1) # 出力層を線形回帰に指定 lro <- mx.symbol.LinearRegressionOutput(fc1) mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) # testデータへの当てはめ preds1 = predict(model1, test.x) # RMSE算出 sqrt(mean((preds1-test.y)^2)) # モデルの図示 graph.viz(model1$symbol$as.json()) MXNetの線形回帰: パラメータ設定・結果確認1 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  8. 8. #結合形式, data設定, 隠れ層のユニット数指定 fc1 <- mx.symbol.FullyConnected(data, num_hidden=1) # 出力層を線形回帰に指定 lro <- mx.symbol.LinearRegressionOutput(fc1) mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) # testデータへの当てはめ preds1 = predict(model1, test.x) # RMSE算出 sqrt(mean((preds1-test.y)^2)) # モデルの図示 graph.viz(model1$symbol$as.json()) MXNetの線形回帰: パラメータ設定・結果確認2 回帰分析の場合、出力層直前の 隠れ層のユニット数は1でないとだめ 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  9. 9. #結合形式, data設定, 隠れ層のユニット数指定 fc1 <- mx.symbol.FullyConnected(data, num_hidden=1) # 出力層を線形回帰に指定 lro <- mx.symbol.LinearRegressionOutput(fc1) mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) # testデータへの当てはめ preds1 = predict(model1, test.x) # RMSE算出 sqrt(mean((preds1-test.y)^2)) # モデルの図示 graph.viz(model1$symbol$as.json()) MXNetの線形回帰: パラメータ設定・結果確認3 この他に mx.symbol.MAERegressionOutput mx.symbol.Logis<cRegressionOutput が関数として用意されている。 回帰分析の場合、出力層直前の 隠れ層のユニット数は1でないとだめ 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  10. 10. #結合形式, data設定, 隠れ層のユニット数指定 fc1 <- mx.symbol.FullyConnected(data, num_hidden=1) # 出力層を線形回帰に指定 lro <- mx.symbol.LinearRegressionOutput(fc1) mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) # testデータへの当てはめ preds1 = predict(model1, test.x) # RMSE算出 sqrt(mean((preds1-test.y)^2)) # モデルの図示 graph.viz(model1$symbol$as.json()) MXNetの線形回帰: パラメータ設定・結果確認4 パラメータの設定 この他に mx.symbol.MAERegressionOutput mx.symbol.Logis<cRegressionOutput が関数として用意されている。 回帰分析の場合、出力層直前の 隠れ層のユニット数は1でないとだめ 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  11. 11. #結合形式, data設定, 隠れ層のユニット数指定 fc1 <- mx.symbol.FullyConnected(data, num_hidden=1) # 出力層を線形回帰に指定 lro <- mx.symbol.LinearRegressionOutput(fc1) mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) # testデータへの当てはめ preds1 = predict(model1, test.x) # RMSE算出 sqrt(mean((preds1-test.y)^2)) # モデルの図示 graph.viz(model1$symbol$as.json()) MXNetの線形回帰: パラメータ設定・結果確認5 パラメータの設定 この他に mx.symbol.MAERegressionOutput mx.symbol.Logis<cRegressionOutput が関数として用意されている。 回帰分析の場合、出力層直前の 隠れ層のユニット数は1でないとだめ 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  12. 12. mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=16.0632830097341 [2] Train-rmse=12.2792378026774 [3] Train-rmse=11.1984627690848 [4] Train-rmse=10.2645244456113 [5] Train-rmse=9.49711029707845 ・・・ [50] Train-rmse=8.24580523984314 MXNetの線形回帰: 実行結果 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  13. 13. mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=16.0632830097341 [2] Train-rmse=12.2792378026774 [3] Train-rmse=11.1984627690848 [4] Train-rmse=10.2645244456113 [5] Train-rmse=9.49711029707845 ・・・ [50] Train-rmse=8.24580523984314 # RMSE算出 sqrt(mean((preds1-test.y)^2)) [1] 7.800502 MXNetの線形回帰: 実行結果 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html
  14. 14. mx.set.seed(0) model1 <- mx.model.FeedForward.create(lro, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=16.0632830097341 [2] Train-rmse=12.2792378026774 [3] Train-rmse=11.1984627690848 [4] Train-rmse=10.2645244456113 [5] Train-rmse=9.49711029707845 ・・・ [50] Train-rmse=8.24580523984314 # RMSE算出 sqrt(mean((preds1-test.y)^2)) [1] 7.800502 MXNetの線形回帰: 実行結果 参照: “Neural Network with MXNet in Five Minutes” hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html # モデルの図示 graph.viz(model1$symbol$as.json())
  15. 15. MXNetの線形回帰 + 深層ニューラルネットの場合 # 結合形式, data設定, 隠れ層の数指定 fc1 <- mx.symbol.FullyConnected(data, name="fc1", num_hidden=128) act1 <- mx.symbol.Ac<va<on(fc1, name="relu1", act_type="relu") drop1 <- mx.symbol.Dropout(act1, p = 0.5, name="drop1") fc2 <- mx.symbol.FullyConnected(drop1, name="fc2", num_hidden=64) act2 <- mx.symbol.Ac<va<on(fc2, name="relu2", act_type="relu") drop2 <- mx.symbol.Dropout(act2, p = 0.5, name="drop2") fc3 <- mx.symbol.FullyConnected(drop2, name="fc3", num_hidden=1) # 出力層を線形回帰に指定 lro2 <- mx.symbol.LinearRegressionOutput(fc3)
  16. 16. mx.set.seed(0) model2 <- mx.model.FeedForward.create(lro2, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=24.2765298493927 [2] Train-rmse=24.2690448139394 [3] Train-rmse=24.2609693838471 [4] Train-rmse=24.2502836327908 [5] Train-rmse=24.2384326028005 ・・・ [50] Train-rmse=10.7532270057404 # RMSE算出 sqrt(mean((preds2-test.y)^2)) [1] 8.511512 MXNetの線形回帰+ 深層ニューラルネット: 結果
  17. 17. mx.set.seed(0) model2 <- mx.model.FeedForward.create(lro2, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=24.2765298493927 [2] Train-rmse=24.2690448139394 [3] Train-rmse=24.2609693838471 [4] Train-rmse=24.2502836327908 [5] Train-rmse=24.2384326028005 ・・・ [50] Train-rmse=10.7532270057404 # RMSE算出 sqrt(mean((preds2-test.y)^2)) [1] 8.511512 MXNetの線形回帰+ 深層ニューラルネット: 結果 # モデルの図示 graph.viz(model2$symbol$as.json()) ちゃんとDeepになってる →
  18. 18. mx.set.seed(0) model2 <- mx.model.FeedForward.create(lro2, X=train.x, y=train.y, ctx=mx.cpu(), num.round=50, array.batch.size=20, learning.rate=2e-6, momentum=0.9, eval.metric=mx.metric.rmse) Start training with 1 devices [1] Train-rmse=24.2765298493927 [2] Train-rmse=24.2690448139394 [3] Train-rmse=24.2609693838471 [4] Train-rmse=24.2502836327908 [5] Train-rmse=24.2384326028005 ・・・ [50] Train-rmse=10.7532270057404 # Model2のRMSE [1] 8.511512 # Model1のRMSE [1] 7.800502 MXNetの線形回帰+ 深層ニューラルネット: 結果 # モデルの図示 graph.viz(model2$symbol$as.json()) ちゃんとDeepになってる → Deepにしたらこの条件では性能が落ちてる… 安易に深くすりゃ良いわけではない ちゃんとしたチューニングや使い分けが必要
  19. 19. Enjoy !

×