mxnetで回帰 #tokyor 53th

19
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

Upload: akifumi-eguchi

Post on 16-Apr-2017

2.885 views

Category:

Data & Analytics


0 download

TRANSCRIPT

Page 1: Mxnetで回帰 #TokyoR 53th

MXNetで回帰

MichaelA.Nielsen,"NeuralNetworksandDeepLearning",Determina<onPress,2015ThisworkislicensedunderaCrea<veCommonsAEribu<on-NonCommercial3.0UnportedLicense.

Tokyo.R#53@渋谷ファーストプレイス,TwiEer:@siero5335

Page 2: Mxnetで回帰 #TokyoR 53th

自己紹介 TwiEerID:@siero5335

仕事:化学物質曝露影響の解析   化学分析法の開発   専門:環境化学、分析化学

興味:生理活性物質の一斉分析   関連分野へのデータ解析応用hoxo-m

2

Page 3: Mxnetで回帰 #TokyoR 53th

MXNet?

みんな大好きdmlc製のDeeplearning用ライブラリいろんな言語に対応,GPUも利用可早い(らしい)

引用:hEps://github.com/dmlc/mxnet

R-packageについてのドキュメントは最近移動した模様hEp://mxnet.readthedocs.org/en/latest/packages/r/index.html

Page 4: Mxnetで回帰 #TokyoR 53th

hEp://tjo.hatenablog.com/entry/2016/03/29/180000

hEp://keiku.hatenablog.jp/entry/2016/03/31/172456

MXNetについての記事が続々と

畳み込みニューラルネットやKaggleDataを使った実践など

Page 5: Mxnetで回帰 #TokyoR 53th

hEp://tjo.hatenablog.com/entry/2016/03/29/180000

hEp://keiku.hatenablog.jp/entry/2016/03/31/172456

MXNetについての記事が続々と

畳み込みニューラルネットやKaggleDataを使った実践など上記は判別の話だが自分がよく使うのは回帰なので調べてみた

Page 6: Mxnetで回帰 #TokyoR 53th

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”)

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 7: Mxnetで回帰 #TokyoR 53th

#結合形式,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

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 8: Mxnetで回帰 #TokyoR 53th

#結合形式,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でないとだめ

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 9: Mxnetで回帰 #TokyoR 53th

#結合形式,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.MAERegressionOutputmx.symbol.Logis<cRegressionOutputが関数として用意されている。

回帰分析の場合、出力層直前の隠れ層のユニット数は1でないとだめ

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 10: Mxnetで回帰 #TokyoR 53th

#結合形式,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.MAERegressionOutputmx.symbol.Logis<cRegressionOutputが関数として用意されている。

回帰分析の場合、出力層直前の隠れ層のユニット数は1でないとだめ

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 11: Mxnetで回帰 #TokyoR 53th

#結合形式,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.MAERegressionOutputmx.symbol.Logis<cRegressionOutputが関数として用意されている。

回帰分析の場合、出力層直前の隠れ層のユニット数は1でないとだめ

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 12: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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の線形回帰:実行結果

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 13: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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の線形回帰:実行結果

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

Page 14: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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の線形回帰:実行結果

参照:“NeuralNetworkwithMXNetinFiveMinutes”hEp://mxnet.readthedocs.org/en/latest/packages/r/fiveMinutesNeuralNetwork.html

#モデルの図示graph.viz(model1$symbol$as.json())

Page 15: Mxnetで回帰 #TokyoR 53th

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)

Page 16: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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の線形回帰+深層ニューラルネット:結果

Page 17: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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になってる →

Page 18: Mxnetで回帰 #TokyoR 53th

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)Starttrainingwith1devices[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にしたらこの条件では性能が落ちてる…安易に深くすりゃ良いわけではないちゃんとしたチューニングや使い分けが必要

Page 19: Mxnetで回帰 #TokyoR 53th

Enjoy!