LoginSignup
2
0

More than 5 years have passed since last update.

Deep.Netを試してみたけど学習が上手くいかず

Posted at

前書き

前回の記事にも書いたけど、結局Windows+Visual StudioでDeep.Net環境を構築したら、すんなりいけた :sweat_smile:
さて、一安心と思ってMNISTの例を試して実行してみたけど、こっちはこっちで色々問題が

環境

  • Windows 7 (64bit)
  • Visual Studio 2015

DeepNet導入手順

  1. F#プロジェクトを作成する(とりあえずコンソールアプリ)
  2. ターゲットフレームワークを「4.6.1」にする
  3. nugetにてDeep.Netをインストールする
  4. nugetにてFSharp.Core (F# 4.1)をインストールする(入ってなければ)

MNISTのアレを実行

データセットはここからとってきて任意のフォルダに格納しておく。

本家のサンプルを見ながらコーディング。しかしそのままではコンパイルエラーが発生するので、次のように修正する。

ArrayNDNSからTensorに変更
open Tensor     //open ArrayNDNS
open SymTensor
open SymTensor.Compiler.Cuda
open Datasets
Img,LblをInput,Targetに変更
let mnist = Mnist.load (__SOURCE_DIRECTORY__ + "../../../Data/MNIST") 0.0
            |> TrnValTst.ToCuda

printfn "MNIST training set: images have shape %A and labels have shape %A" 
    mnist.Trn.All.Input.Shape mnist.Trn.All.Target.Shape
printfn "MNIST test set:     images have shape %A and labels have shape %A" 
    mnist.Tst.All.Input.Shape mnist.Tst.All.Target.Shape
CPUなのでDevHostを使う
let mi = mb.Instantiate DevHost
refじゃなくなっているので「!」を外す
let hiddenAct = hiddenWeights .* input.T + hiddenBias
...
let outputAct = outputWeights .* hiddenVal
もし古い文法しか対応していない場合は次のように直す
let optCfg = { Optimizers.GradientDescent.DefaultCfg with Step=1e-1f }

これ以外にも修正箇所があるけど、方針としては上記のいずれかなので、記載は割愛。

実行時のエラー

なんか、次のコードでエラーが発生する

let hiddenAct = hiddenWeights .* input.T + hiddenBias

hiddenBiasは隠れ層のノード数分の配列データなのだが、これがブロードキャストで列方向(横方向)に隠れ層のノード数分拡張される為、「+」演算が成立しないという例外が発生する。
あまりにも手詰まり感満載だったので、いよいよ本家Githubにissueを投げてみた。(Cannot apply element-wise operator Add)

その回答を元に書き直すと

let hiddenAct = hiddenWeights .* input.T + (Expr.reshape [nHidden;SizeSpec.broadcastable] hiddenBias)

いや、さすがにこれは無理ゲーだよwww (初見殺しにも程がある)

学習を重ねても減らないLoss

紆余曲折してようやく繰り返し学習ができるようになった……。

しかし!

実行結果
Test loss after     0 iterations: 2.3019
Test loss after    50 iterations: 2.3019
...
Test loss after   950 iterations: 2.3019
Test loss after  1000 iterations: 2.3019

Lossが減ってねーー!!

終わりに

ここまできたら、少なくともWindows上ではできるようにしたいので、拙い英語力を駆使しながら、作者とのコミュニケーションを続けてみようと思う。
いつか本章のタイトルが「上手くいかず⇨いきました」になることを期待。

あとドキュメントも最新の実装に合わせた方が良い旨を提案してみようっと。

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0