RでMXNet(7)

Windows10 64bit
Microsoft R Open 3.4.0

ネットワークモデルを変更する方法

  • Fine-tuneをするにあたって大事
  • いつの日かGPU搭載パソコンが手に入ることを夢見て簡単なモデルで練習(泣)
  • 数年前に手に入れたノートパソコン(Intel第3世代 Ivy Bridge搭載)で頑張ってます(笑)

f:id:touch-sp:20170701004222p:plain

  • 「model」という名前のモデルであり訓練済みのパラメータを持っているものとする
  • relu1以降を変更
#layerの書き換え
all_layers <- model$symbol$get.internals()
relu1 <- all_layers[[match("relu1_output",all_layers$outputs)]]
fc2 <- mx.symbol.FullyConnected(data=relu1,num_hidden=100,name="fc2")
fc3 <- mx.symbol.FullyConnected(data=fc2,num_hidden=10,name="fc3")
softmax <- mx.symbol.SoftmaxOutput(fc3, name = "sm")
#パラメータの書き換え
new.params <- model$arg.params
new.params$fc2_weight <- mx.rnorm(c(100,100),0,0.01)
new.params$fc2_bias <- mx.nd.zeros(100)
new.params$fc3_weight <- mx.rnorm(c(100,10),0,0.01)
new.params$fc3_bias <- mx.nd.zeros(10)
#モデルの作成
#そのまま訓練を始めるならmx.model.FeedForward.createを使っても良い
new.model <- list(symbol=softmax,arg.params=new.params,aux.params=list())
class(new.model) <- "MXFeedForwardModel"
#モデルの図示
graph.viz(new.model$symbol,direction="LR")

f:id:touch-sp:20170701011306p:plain