1. 今回用いるデータについて
こんにちは、今回も前回に引き続き、ニューラルネットワークを実装していきたいと思います。前回の記事は以下からご覧ください。
Juliaで学ぶ画像処理〜ニューラルネットワーク(Neural Network) part1〜
Juliaで学ぶ画像処理〜ニューラルネットワーク(Neural Network)part2〜
Juliaで学ぶ画像処理〜ニューラルネットワーク(Neural Network) part1〜
Juliaで学ぶ画像処理〜ニューラルネットワーク(Neural Network)part2〜
こんなことができると夢が広がりますよね!これを可能にするのが機械学習、ニューラルネットワークです。
2. 用いるニューラルネットについて
今回は入力として(32,32,3)の画像を考えます。32 x 32 の画像にRGBの3つの色の値があります。
・ConvolutionLayer(name="conv1", n_filter=20, kernel=(5,5),bottoms=[:data], tops=[:conv1])
たたみ込み層です。(5,5)の大きさのたたみ込みを行います。n_filterはフィルターの数になってます。以下の図は「Convolutional Neural Networkを実装する(http://qiita.com/icoxfog417/items/5aa1b3f87bb294f84bac#_reference-1e2766fa43d0bc1f8af5)」を参考にしました。
・ConvolutionLayer(name="conv1", n_filter=20, kernel=(5,5),bottoms=[:data], tops=[:conv1])
たたみ込み層です。(5,5)の大きさのたたみ込みを行います。n_filterはフィルターの数になってます。以下の図は「Convolutional Neural Networkを実装する(http://qiita.com/icoxfog417/items/5aa1b3f87bb294f84bac#_reference-1e2766fa43d0bc1f8af5)」を参考にしました。
この層の出力は(32,32,20)となります。
・PoolingLayer(name="pool1", kernel=(2,2), stride=(2,2),bottoms=[:conv1], tops=[:pool1])
プーリングと呼ばれる操作を行います。プーリングは前の出力層を粗くするリサンプリングする操作になりますが、これにより画像の多少のズレによる見え方の違いを吸収することが可能になります。
・PoolingLayer(name="pool1", kernel=(2,2), stride=(2,2),bottoms=[:conv1], tops=[:pool1])
プーリングと呼ばれる操作を行います。プーリングは前の出力層を粗くするリサンプリングする操作になりますが、これにより画像の多少のズレによる見え方の違いを吸収することが可能になります。
・InnerProductLayer(name="ip1", output_dim=500, neuron=Neurons.ReLU(), bottoms=[:pool2], tops=[:ip1])
ネットワークの重みと出力層との重みとの内積を計算し、それを出力します。ここで用いられるneuronとは、計算された値によって出力層をどのように決めるかというのを決定したものです。今回はReLUですので、以下のようなものが用いられます。
ネットワークの重みと出力層との重みとの内積を計算し、それを出力します。ここで用いられるneuronとは、計算された値によって出力層をどのように決めるかというのを決定したものです。今回はReLUですので、以下のようなものが用いられます。
・SoftmaxLossLayer(name="loss", bottoms=[:ip2,:label])
作った層を学習していくために、なんらかの基準を設ける必要があります。機械学習の分野ではこれを評価関数といいます。上の例では出力(予想値)とlabel(実際の値)とをみて、出来るだけ一致させたいという目的のもと、SoftmaxLossLayerを構築しています。
作った層を学習していくために、なんらかの基準を設ける必要があります。機械学習の分野ではこれを評価関数といいます。上の例では出力(予想値)とlabel(実際の値)とをみて、出来るだけ一致させたいという目的のもと、SoftmaxLossLayerを構築しています。
3. 初期設定、データのインストール
まずはgithubの以下のページからcloneしてください。前回のmnistをした人はこれは飛ばしてもらって大丈夫です。Mocha-documentation(https://github.com/pluskid/Mocha.jl)
クローンしたらexmaples/cifar10よりフォルダに移動してもらって
クローンしたらexmaples/cifar10よりフォルダに移動してもらって